diff --git a/README.md b/README.md index 0a57010..273cff5 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,33 @@ cd build ./compile.sh build BOARD=blueberry BRANCH=legacy BUILD_DESKTOP=no BUILD_MINIMAL=yes KERNEL_CONFIGURE=yes RELEASE=bookworm ``` +上面的构建方式或者源码已经过时!!! +最新的构建方式!!! + +```bash +# 对应ArmDebian build 版本(目前最新) +aixiao@aixiao:~/build-blueberry$ git log +commit 0e1224e3089ce6c850bc314da460b640e34e321d (HEAD -> main, origin/main, origin/HEAD) +Author: Ricardo Pardini +Date: Sun Apr 12 09:03:15 2026 +0200 + + rock-3a: u-boot: bump from -rcX to 2026.04 (final) + + + + +# patch 补丁文件, 下载后放到VM虚拟机(本地) +root@NIUYULING:/mnt/c/Users/aixiao/Desktop/Blueberry# ls SF/ArmDebian/New/ +0001-add-blueberry-board.patch ARM64-dts-sun50i-h616-Blueberry.patch ArmDebian.sh blueberry.conf series.conf.patch +root@NIUYULING:/mnt/c/Users/aixiao/Desktop/Blueberry# + +# 脚本构建(虚拟机) +aixiao@aixiao:~$ ls +0001-add-blueberry-board.patch ARM64-dts-sun50i-h616-Blueberry.patch ArmDebian.sh blueberry.conf build-blueberry series.conf.patch +aixiao@aixiao:~$ bash ArmDebian.sh + +``` + 预构建系统下载 https://blueberry.aixiao.me/images/ ## EMMc 刷入系统 diff --git a/SF/ArmDebian/New/0001-add-blueberry-board.patch b/SF/ArmDebian/New/0001-add-blueberry-board.patch new file mode 100644 index 0000000..dba9010 --- /dev/null +++ b/SF/ArmDebian/New/0001-add-blueberry-board.patch @@ -0,0 +1,279 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: aixiao +Date: Fri, 9 Aug 2024 07:23:02 +0000 +Subject: Add Blueberry device tree and defconfig + +Signed-off-by: aixiao +--- + arch/arm/dts/sun50i-h616-blueberry.dts | 225 ++++++++++ + configs/blueberry_defconfig | 29 ++ + +diff --git a/arch/arm/dts/sun50i-h616-blueberry.dts b/arch/arm/dts/sun50i-h616-blueberry.dts +new file mode 100644 +index 00000000000..acef7ef4f03 +--- /dev/null ++++ b/arch/arm/dts/sun50i-h616-blueberry.dts +@@ -0,0 +1,225 @@ ++// SPDX-License-Identifier: (GPL-2.0+ or MIT) ++/* ++ * Copyright (C) 2022 Arm Ltd. ++ */ ++ ++/dts-v1/; ++ ++#include "sun50i-h616.dtsi" ++ ++#include ++#include ++#include ++ ++/ { ++ model = "Blueberry BLB"; ++ compatible = "blueberry,blb", "allwinner,sun50i-h616"; ++ ++ aliases { ++ ethernet0 = &emac1; ++ serial0 = &uart0; ++ }; ++ ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ gpio_2 { ++ function = "wifi_wake"; ++ gpios = <&pio 6 15 GPIO_ACTIVE_LOW>; /* PG15 */ ++ default-state = "on"; ++ }; ++ }; ++ ++ reg_vcc5v: vcc5v { ++ /* board wide 5V supply directly from the USB-C socket */ ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc-5v"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ regulator-always-on; ++ }; ++ ++ reg_usb1_vbus: regulator-usb1-vbus { ++ compatible = "regulator-fixed"; ++ regulator-name = "usb1-vbus"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ vin-supply = <®_vcc5v>; ++ enable-active-high; ++ gpio = <&pio 2 16 GPIO_ACTIVE_HIGH>; /* PC16 */ ++ }; ++ ++ reg_vcc33_wifi: vcc33-wifi { ++ /* Always on 3.3V regulator for WiFi and BT */ ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc33-wifi"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ vin-supply = <®_vcc5v>; ++ }; ++ ++ reg_vcc_wifi_io: vcc-wifi-io { ++ /* Always on 1.8V/300mA regulator for WiFi and BT IO */ ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc-wifi-io"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-always-on; ++ vin-supply = <®_vcc33_wifi>; ++ }; ++ ++ wifi_pwrseq: wifi-pwrseq { ++ compatible = "mmc-pwrseq-simple"; ++ clocks = <&rtc 1>; ++ clock-names = "osc32k-out"; ++ reset-gpios = <&pio 6 18 GPIO_ACTIVE_LOW>; /* PG18 */ ++ post-power-on-delay-ms = <200>; ++ }; ++}; ++ ++&emac1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&rmii_pins>; ++ phy-mode = "rmii"; ++ phy-handle = <&rmii_phy>; ++ phy-supply = <®_dldo1>; ++ allwinner,rx-delay-ps = <3100>; ++ allwinner,tx-delay-ps = <700>; ++ status = "okay"; ++}; ++ ++&mdio1 { ++ rmii_phy: ethernet-phy@0 { ++ compatible = "ethernet-phy-ieee802.3-c22"; ++ reg = <0>; ++ }; ++}; ++ ++&ehci1 { ++ status = "okay"; ++}; ++ ++&ohci1 { ++ status = "okay"; ++}; ++ ++&mmc0 { ++ vmmc-supply = <®_dldo1>; ++ bus-width = <4>; ++ status = "okay"; ++}; ++ ++&mmc1 { ++ vmmc-supply = <®_vcc33_wifi>; ++ vqmmc-supply = <®_vcc_wifi_io>; ++ mmc-pwrseq = <&wifi_pwrseq>; ++ bus-width = <4>; ++ max-frequency = <25000000>; ++ non-removable; ++ //mmc-ddr-1_8v; ++ status = "okay"; ++}; ++ ++&mmc2 { ++ vmmc-supply = <®_dldo1>; ++ no-1-8-v; ++ bus-width = <8>; ++ max-frequency = <20000000>; ++ non-removable; ++ status = "okay"; ++}; ++ ++&r_i2c { ++ status = "okay"; ++ ++ axp313a: pmic@36 { ++ compatible = "x-powers,axp313a"; ++ status = "okay"; ++ reg = <0x36>; ++ wakeup-source; ++ ++ standby_param: standby_param { ++ vcc-dram = <0x4>; ++ }; ++ ++ regulators{ ++ reg_dcdc1: dcdc1 { ++ regulator-name = "axp313a-dcdc1"; ++ regulator-min-microvolt = <500000>; ++ regulator-max-microvolt = <3400000>; ++ regulator-step-delay-us = <25>; ++ regulator-final-delay-us = <50>; ++ regulator-always-on; ++ }; ++ ++ reg_dcdc2: dcdc2 { ++ regulator-name = "axp313a-dcdc2"; ++ regulator-min-microvolt = <500000>; ++ regulator-max-microvolt = <1540000>; ++ regulator-step-delay-us = <25>; ++ regulator-final-delay-us = <50>; ++ regulator-ramp-delay = <200>; ++ regulator-always-on; ++ }; ++ ++ reg_dcdc3: dcdc3 { ++ regulator-name = "axp313a-dcdc3"; ++ regulator-min-microvolt = <500000>; ++ regulator-max-microvolt = <1840000>; ++ regulator-step-delay-us = <25>; ++ regulator-final-delay-us = <50>; ++ regulator-always-on; ++ }; ++ ++ reg_aldo1: aldo1 { ++ regulator-name = "axp313a-aldo1"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-step-delay-us = <25>; ++ regulator-final-delay-us = <50>; ++ regulator-always-on; ++ }; ++ ++ reg_dldo1: dldo1 { ++ regulator-name = "axp313a-dldo1"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-step-delay-us = <25>; ++ regulator-final-delay-us = <50>; ++ regulator-always-on; ++ }; ++ }; ++ }; ++}; ++ ++&uart0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart0_ph_pins>; ++ status = "okay"; ++}; ++ ++&usbotg { ++ /* ++ * PHY0 pins are connected to a USB-C socket, but a role switch ++ * is not implemented: both CC pins are pulled to GND. ++ * The VBUS pins power the device, so a fixed peripheral mode ++ * is the best choice. ++ * The board can be powered via GPIOs, in this case port0 *can* ++ * act as a host (with a cable/adapter ignoring CC), as VBUS is ++ * then provided by the GPIOs. Any user of this setup would ++ * need to adjust the DT accordingly: dr_mode set to "host", ++ * enabling OHCI0 and EHCI0. ++ */ ++ dr_mode = "otg"; ++ status = "okay"; ++}; ++ ++&usbphy { ++ usb1_vbus-supply = <®_usb1_vbus>; ++ status = "okay"; ++}; +diff --git a/configs/blueberry_defconfig b/configs/blueberry_defconfig +new file mode 100644 +index 00000000000..3dbd152c7c1 +--- /dev/null ++++ b/configs/blueberry_defconfig +@@ -0,0 +1,29 @@ ++CONFIG_ARM=y ++CONFIG_ARCH_SUNXI=y ++CONFIG_DEFAULT_DEVICE_TREE="sun50i-h616-blueberry" ++CONFIG_SPL=y ++CONFIG_DRAM_SUN50I_H616_DX_ODT=0x08080808 ++CONFIG_DRAM_SUN50I_H616_DX_DRI=0x0e0e0e0e ++CONFIG_DRAM_SUN50I_H616_CA_DRI=0x0e0e ++CONFIG_DRAM_SUN50I_H616_TPR10=0xf83438 ++CONFIG_MACH_SUN50I_H616=y ++CONFIG_SUNXI_DRAM_H616_DDR3_1333=y ++CONFIG_R_I2C_ENABLE=y ++CONFIG_SPL_SPI_SUNXI=y ++# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set ++CONFIG_SPL_MAX_SIZE=0xbfa0 ++CONFIG_SPL_STACK=0x58000 ++CONFIG_SPL_I2C=y ++CONFIG_SPL_SYS_I2C_LEGACY=y ++CONFIG_SYS_I2C_MVTWSI=y ++CONFIG_SYS_I2C_SLAVE=0x7f ++CONFIG_SYS_I2C_SPEED=100000 ++CONFIG_SPI_FLASH_MACRONIX=y ++CONFIG_LED=y ++CONFIG_LED_GPIO=y ++CONFIG_SYS_PROMPT="blueberry@uboot:~$ " ++CONFIG_AXP313_POWER=y ++CONFIG_MMC_SUNXI_SLOT_EXTRA=2 ++CONFIG_MMC_BROKEN_CD=y ++CONFIG_SUN8I_EMAC=y ++CONFIG_I2C3_ENABLE=y +-- +Created with Armbian build tools https://github.com/armbian/build + diff --git a/SF/ArmDebian/New/ARM64-dts-sun50i-h616-Blueberry.patch b/SF/ArmDebian/New/ARM64-dts-sun50i-h616-Blueberry.patch new file mode 100644 index 0000000..e756066 --- /dev/null +++ b/SF/ArmDebian/New/ARM64-dts-sun50i-h616-Blueberry.patch @@ -0,0 +1,448 @@ +From: Aixiao +Subject: [PATCH] Add Blueberry support + +This patch adds the DTS and DTSI files for Blueberry and updates the Makefile. + +--- + arch/arm64/boot/dts/allwinner/Makefile | 1 + + arch/arm64/boot/dts/allwinner//sun50i-h616-blueberry-sd.dts | 35 ++ + arch/arm64/boot/dts/allwinner/sun50i-h616-blueberry.dtsi | 377 +++++++++++++++++++++ + + +diff --git a/arch/arm64/boot/dts/allwinner/Makefile b/arch/arm64/boot/dts/allwinner/Makefile +index 1234567..89abcdef 100644 +--- a/arch/arm64/boot/dts/allwinner/Makefile ++++ b/arch/arm64/boot/dts/allwinner/Makefile +@@ -57,6 +57,7 @@ dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-bigtreetech-cb1-emmc.dtb + dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-bigtreetech-cb1-manta.dtb + dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-bigtreetech-cb1-sd.dtb + dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-bigtreetech-pi.dtb ++dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-blueberry-sd.dtb + dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-orangepi-zero2.dtb + dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h616-x96-mate.dtb + dtb-$(CONFIG_ARCH_SUNXI) += sun50i-h618-bananapi-m4-berry.dtb + +diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h616-blueberry-sd.dts b/arch/arm64/boot/dts/allwinner/sun50i-h616-blueberry-sd.dts +new file mode 100644 +index 0000000..abcdefg +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/sun50i-h616-blueberry-sd.dts +@@ -0,0 +1,35 @@ ++// SPDX-License-Identifier: (GPL-2.0+ or MIT) ++/* ++ * Copyright (C) 2023 Alan.Ma . ++ */ ++ ++/dts-v1/; ++ ++#include "sun50i-h616-blueberry.dtsi" ++ ++&ws2812 { ++ gpios = <&pio 2 14 GPIO_ACTIVE_LOW>; /* PC14 */ ++}; ++ ++&i2c_gpio { ++ gpios = <&pio 2 12 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>, /* SDA PC12 */ ++ <&pio 2 10 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; /* SCL PC10 */ ++}; ++ ++&can0_pin_irq { ++ pins = "PC9"; ++}; ++ ++&can { ++ interrupts = <2 9 0x08>; /* PC9 IRQ_TYPE_LEVEL_LOW */ ++}; ++ ++&tft_35 { ++ dc-gpios = <&pio 2 14 GPIO_ACTIVE_HIGH>; /* PC14 */ ++}; ++ ++&spi1 { ++ cs-gpios = <&pio 2 11 GPIO_ACTIVE_HIGH>, /* PC11 */ ++ <&pio 2 7 GPIO_ACTIVE_HIGH>, /* PC7 */ ++ <&pio 2 13 GPIO_ACTIVE_HIGH>; /* PC13 */ ++}; +diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h616-blueberry.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-h616-blueberry.dtsi +new file mode 100644 +index 0000000..abcdefg +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/sun50i-h616-blueberry.dtsi +@@ -0,0 +1,377 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (C) 2023 Martin Botka . ++ * Copyright (C) 2023 Alan.Ma . ++ */ ++ ++/dts-v1/; ++ ++#include "sun50i-h616.dtsi" ++#include "sun50i-h616-cpu-opp.dtsi" ++ ++#include ++#include ++#include ++ ++/ { ++ model = "Blueberry BLB"; ++ compatible = "blueberry,blb", "allwinner,sun50i-h616"; ++ ++ aliases { ++ ethernet0 = &emac1; ++ serial0 = &uart0; ++ }; ++ ++ chosen { ++ stdout-path = "serial0:115200n8"; ++ }; ++ ++ connector { ++ compatible = "hdmi-connector"; ++ type = "d"; ++ ++ port { ++ hdmi_con_in: endpoint { ++ remote-endpoint = <&hdmi_out_con>; ++ }; ++ }; ++ }; ++ ++ leds { ++ compatible = "gpio-leds"; ++ ++ act_led: led-0 { ++ gpios = <&pio 7 5 GPIO_ACTIVE_LOW>; /* PH5 */ ++ linux,default-trigger = "heartbeat"; ++ }; ++ ++ gpio_1 { ++ function = "wifi_power"; ++ gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 */ ++ default-state = "on"; ++ }; ++ ++ gpio_2 { ++ function = "wifi_wake"; ++ gpios = <&pio 6 15 GPIO_ACTIVE_HIGH>; /* PG15 */ ++ default-state = "on"; ++ }; ++ }; ++ ++ reg_vcc5v: regulator-vcc5v { ++ /* board wide 5V supply directly from the USB-C socket */ ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc-5v"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ regulator-always-on; ++ }; ++ ++ reg_usb1_vbus: regulator-usb1-vbus { ++ compatible = "regulator-fixed"; ++ regulator-name = "usb1-vbus"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ vin-supply = <®_vcc5v>; ++ enable-active-high; ++ }; ++ ++ reg_vcc33_wifi: vcc33-wifi { ++ /* Always on 3.3V regulator for WiFi and BT */ ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc33-wifi"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ vin-supply = <®_vcc5v>; ++ }; ++ ++ reg_vcc_wifi_io: vcc-wifi-io { ++ /* Always on 1.8V/300mA regulator for WiFi and BT IO */ ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc-wifi-io"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-always-on; ++ vin-supply = <®_vcc33_wifi>; ++ }; ++ ++ wifi_pwrseq: wifi-pwrseq { ++ compatible = "mmc-pwrseq-simple"; ++ clocks = <&rtc 1>; ++ clock-names = "osc32k-out"; ++ reset-gpios = <&pio 6 18 GPIO_ACTIVE_LOW>; /* PG18 */ ++ post-power-on-delay-ms = <200>; ++ }; ++ ++ ws2812: ws2812 { ++ compatible = "rgb-ws2812"; ++ pinctrl-names = "default"; ++ rgb_cnt = <2>; ++ rgb_value = <0x000001 0x010000>; ++ status = "disabled"; ++ }; ++ ++ i2c_gpio: i2c-gpio { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ compatible = "i2c-gpio"; ++ status = "disabled"; ++ ++ i2c-gpio,delay-us = <3>; /* 100 kHz */ ++ ++ tft_tp: ns2009@48 { ++ compatible = "ti,tsc2007"; ++ reg = <0x48>; ++ status = "disabled"; ++ ti,x-plate-ohms = <660>; ++ ti,y-plate-ohms = <660>; ++ ti,rt-thr = <3000>; ++ ti,fuzzx = <32>; ++ ti,fuzzy = <16>; ++ i2c,ignore-nak = <1>; ++ }; ++ ++ light: bh1750@5c { ++ compatible = "rohm,bh1750"; ++ reg = <0x5c>; ++ status = "disabled"; ++ }; ++ }; ++ ++ mcp2515_clock: mcp2515_clock { ++ compatible = "fixed-clock"; ++ #clock-cells = <0>; ++ clock-frequency = <12000000>; ++ }; ++}; ++ ++&cpu0 { ++ cpu-supply = <®_dcdc2>; ++}; ++ ++&emac1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&rmii_pins>; ++ phy-mode = "rmii"; ++ phy-handle = <&rmii_phy>; ++ phy-supply = <®_dldo1>; ++ allwinner,rx-delay-ps = <3100>; ++ allwinner,tx-delay-ps = <700>; ++ status = "okay"; ++}; ++ ++&mdio1 { ++ rmii_phy: ethernet-phy@1 { ++ compatible = "ethernet-phy-ieee802.3-c22"; ++ reg = <1>; ++ }; ++}; ++ ++&mmc0 { ++ vmmc-supply = <®_dldo1>; ++ broken-cd; ++ bus-width = <4>; ++ max-frequency = <50000000>; ++ status = "okay"; ++}; ++ ++&mmc1 { ++ vmmc-supply = <®_vcc33_wifi>; ++ vqmmc-supply = <®_vcc_wifi_io>; ++ mmc-pwrseq = <&wifi_pwrseq>; ++ bus-width = <4>; ++ max-frequency = <25000000>; ++ non-removable; ++ mmc-ddr-1_8v; ++ status = "okay"; ++}; ++ ++&pio { ++ can0_pin_irq: can0_pin_irq { ++ function = "irq"; ++ bias-pull-up; ++ }; ++}; ++ ++&spi1 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ status = "disabled"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi1_pins>; ++ ++ can: mcp2515@0 { ++ status = "disabled"; ++ compatible = "microchip,mcp2515"; ++ reg = <0x0>; ++ clocks = <&mcp2515_clock>; ++ spi-max-frequency = <12500000>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&can0_pin_irq>; ++ interrupt-parent = <&pio>; ++ vdd-supply = <®_vcc33_wifi>; ++ xceiver-supply = <®_vcc33_wifi>; ++ }; ++ ++ tft_35: st7789v@1 { ++ status = "disabled"; ++ compatible = "sitronix,st7796s"; ++ reg = <1>; ++ spi-max-frequency =<12500000>; ++ fps =<60>; ++ buswidth = <8>; ++ rotate =<0>; ++ width = <480>; ++ height = <320>; ++ bpp = <24>; ++ bgr; ++ regwidth = <8>; ++ debug = <0x00>; //0x20 show fps ++ txbuflen = <307200>; ++ spi-cpol; ++ spi-cpha; ++ }; ++}; ++ ++&r_i2c { ++ status = "okay"; ++ ++ axp313a: pmic@36 { ++ compatible = "x-powers,axp313a"; ++ reg = <0x36>; ++ wakeup-source; ++ ++ regulators { ++ reg_dcdc1: dcdc1 { ++ regulator-name = "vdd-gpu-sys"; ++ regulator-min-microvolt = <500000>; ++ regulator-max-microvolt = <3400000>; ++ regulator-step-delay-us = <25>; ++ regulator-final-delay-us = <50>; ++ regulator-always-on; ++ }; ++ ++ reg_dcdc2: dcdc2 { ++ regulator-name = "vdd-cpu"; ++ regulator-min-microvolt = <500000>; ++ regulator-max-microvolt = <1540000>; ++ regulator-step-delay-us = <25>; ++ regulator-final-delay-us = <50>; ++ regulator-ramp-delay = <200>; ++ regulator-always-on; ++ }; ++ ++ reg_dcdc3: dcdc3 { ++ regulator-name = "vcc-dram"; ++ regulator-min-microvolt = <500000>; ++ regulator-max-microvolt = <1840000>; ++ regulator-step-delay-us = <25>; ++ regulator-final-delay-us = <50>; ++ regulator-always-on; ++ }; ++ ++ reg_aldo1: aldo1 { ++ regulator-name = "vcc-1v8-pll"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-step-delay-us = <25>; ++ regulator-final-delay-us = <50>; ++ regulator-always-on; ++ }; ++ ++ reg_dldo1: dldo1 { ++ regulator-name = "vcc-3v3-io"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-step-delay-us = <25>; ++ regulator-final-delay-us = <50>; ++ regulator-always-on; ++ }; ++ }; ++ }; ++}; ++ ++&de { ++ status = "okay"; ++}; ++ ++&hdmi { ++ hvcc-supply = <®_aldo1>; ++ status = "okay"; ++}; ++ ++&hdmi_out { ++ hdmi_out_con: endpoint { ++ remote-endpoint = <&hdmi_con_in>; ++ }; ++}; ++ ++&cpu0 { ++ cpu-supply = <®_dcdc2>; ++ status = "okay"; ++}; ++ ++&gpu { ++ mali-supply = <®_dcdc3>; ++ status = "okay"; ++}; ++ ++&uart0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart0_ph_pins>; ++ status = "okay"; ++}; ++ ++&usbphy { ++ usb1_vbus-supply = <®_usb1_vbus>; ++ status = "okay"; ++}; ++ ++&ehci0 { ++ status = "okay"; ++}; ++ ++&ohci0 { ++ status = "okay"; ++}; ++ ++&ehci1 { ++ status = "okay"; ++}; ++ ++&ohci1 { ++ status = "okay"; ++}; ++ ++&ehci2 { ++ status = "okay"; ++}; ++ ++&ohci2 { ++ status = "okay"; ++}; ++ ++&ehci3 { ++ status = "okay"; ++}; ++ ++&ohci3 { ++ status = "okay"; ++}; ++ ++&usbotg { ++ /* ++ * PHY0 pins are connected to a USB-C socket, but a role switch ++ * is not implemented: both CC pins are pulled to GND. ++ * The VBUS pins power the device, so a fixed peripheral mode ++ * is the best choice. ++ * The board can be powered via GPIOs, in this case port0 *can* ++ * act as a host (with a cable/adapter ignoring CC), as VBUS is ++ * then provided by the GPIOs. Any user of this setup would ++ * need to adjust the DT accordingly: dr_mode set to "host", ++ * enabling OHCI0 and EHCI0. ++ */ ++ dr_mode = "peripheral"; ++ status = "okay"; ++}; diff --git a/SF/ArmDebian/New/ArmDebian.sh b/SF/ArmDebian/New/ArmDebian.sh new file mode 100644 index 0000000..1fbf6b6 --- /dev/null +++ b/SF/ArmDebian/New/ArmDebian.sh @@ -0,0 +1,187 @@ + + + +# 克隆构建工具 +git clone https://github.com/armbian/build.git build-blueberry + + +# 安装 docker binfmt 支持 +sudo docker run --rm --privileged tonistiigi/binfmt --install all + +# 添加自己的开发板 +cd build-blueberry +mkdir -p userpatches/config/boards + +# 智能判断内核版本 +KERNEL_TARGET=$(grep KERNEL_TARGET ~/blueberry.conf | cut -d'=' -f2 | tr -d '"') +IFS=',' read -r -a KERNEL_ARRAY <<< "$KERNEL_TARGET" +for k in "${KERNEL_ARRAY[@]}"; do + echo "$k" +done +echo "${KERNEL_ARRAY[0]}" + +FAMILY="sunxi64" +TARGET="${KERNEL_ARRAY[0]}" + +FILE=$(find config/sources/families/include -name "${FAMILY}_common.inc" | head -n1) + +KERNEL_VERSION=$(awk -F'"' -v t="$TARGET" ' +$0 ~ t ")" {f=1; next} +f && /KERNEL_MAJOR_MINOR/ {print $2; exit} +' "$FILE") + +echo "$KERNEL_VERSION" +ls patch/kernel/archive/sunxi-"$KERNEL_VERSION" + + +FILE="patch/kernel/archive/sunxi-${KERNEL_VERSION}/series.conf" +LINE=$'\tpatches.armbian/ARM64-dts-sun50i-h616-Blueberry.patch' +grep -qxF "$LINE" "$FILE" || printf "%s\n" "$LINE" >> "$FILE" + +# 复制本地补丁文件 +cp ~/blueberry.conf userpatches/config/boards +mkdir -p userpatches/u-boot/u-boot-sunxi +cp ~/0001-add-blueberry-board.patch userpatches/u-boot/u-boot-sunxi +cp ~/ARM64-dts-sun50i-h616-Blueberry.patch patch/kernel/archive/sunxi-"$KERNEL_VERSION"/patches.armbian + +#git apply ~/series.conf.patch + +# 复用 bigtreetech-cb1 补丁 +cp -rf patch/u-boot/u-boot-sunxi/board_bigtreetech-cb1 patch/u-boot/u-boot-sunxi/board_blueberry + +# 构建 +./compile.sh build BOARD=blueberry BRANCH=current BUILD_DESKTOP=no BUILD_MINIMAL=no KERNEL_CONFIGURE=yes RELEASE=trixie + + + + + + + +exit 0 + +# Ubuntu 版本 +root@aixiao:/home/aixiao# hostnamectl + Static hostname: aixiao + Icon name: computer-vm + Chassis: vm + Machine ID: 30f4af3f441a47f4ad8df049a9162b05 + Boot ID: 9952ae442b4340dfb8a86d92c4f468e0 + Virtualization: vmware +Operating System: Ubuntu 22.04.5 LTS + Kernel: Linux 5.15.0-174-generic + Architecture: x86-64 + Hardware Vendor: VMware, Inc. + Hardware Model: VMware Virtual Platform +root@aixiao:/home/aixiao# + +# 安装 Docker +# Add Docker's official GPG key: +sudo apt update +sudo apt install ca-certificates curl +sudo install -m 0755 -d /etc/apt/keyrings +sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc +sudo chmod a+r /etc/apt/keyrings/docker.asc + +# Add the repository to Apt sources: +sudo tee /etc/apt/sources.list.d/docker.sources < mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + valid_lft forever preferred_lft forever + inet6 ::1/128 scope host noprefixroute + valid_lft forever preferred_lft forever +2: end0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 + link/ether e2:75:ba:34:42:cf brd ff:ff:ff:ff:ff:ff + altname enxe275ba3442cf + inet 192.168.9.170/24 brd 192.168.9.255 scope global dynamic noprefixroute end0 + valid_lft 42791sec preferred_lft 42791sec + inet6 fd1e:8b41:92d2::d6a/128 scope global dynamic noprefixroute + valid_lft 42791sec preferred_lft 42791sec + inet6 2409:8a48:213:f974::d6a/128 scope global dynamic noprefixroute + valid_lft 4991sec preferred_lft 2291sec + inet6 2409:8a48:213:f974:2e6:e340:8b33:151c/64 scope global dynamic noprefixroute + valid_lft 5080sec preferred_lft 2380sec + inet6 fd1e:8b41:92d2:0:a1a6:9cdd:dc5a:9355/64 scope global dynamic noprefixroute + valid_lft 5080sec preferred_lft 2380sec + inet6 fe80::a97c:e673:f279:c00d/64 scope link noprefixroute + valid_lft forever preferred_lft forever +3: wlan0: mtu 1500 qdisc mq state UP group default qlen 1000 + link/ether 30:95:87:45:da:0e brd ff:ff:ff:ff:ff:ff + altname wlx30958745da0e + inet 192.168.9.177/24 brd 192.168.9.255 scope global dynamic noprefixroute wlan0 + valid_lft 43198sec preferred_lft 43198sec + inet6 fd1e:8b41:92d2::885/128 scope global tentative dynamic noprefixroute + valid_lft 43199sec preferred_lft 43199sec + inet6 2409:8a48:213:f974::885/128 scope global dynamic noprefixroute + valid_lft 5399sec preferred_lft 2699sec + inet6 2409:8a48:213:f974:32af:255f:b12d:4516/64 scope global dynamic noprefixroute + valid_lft 5399sec preferred_lft 2699sec + inet6 fd1e:8b41:92d2:0:3499:15e3:6813:e6c7/64 scope global tentative dynamic noprefixroute + valid_lft 5399sec preferred_lft 2699sec + inet6 fe80::7a70:452a:c0a0:1610/64 scope link noprefixroute + valid_lft forever preferred_lft forever +4: wlan1: mtu 1500 qdisc mq state DOWN group default qlen 1000 + link/ether 32:95:87:45:d8:0e brd ff:ff:ff:ff:ff:ff + altname wlx32958745d80e +root@blueberry:~# diff --git a/SF/ArmDebian/New/blueberry.conf b/SF/ArmDebian/New/blueberry.conf new file mode 100644 index 0000000..2969801 --- /dev/null +++ b/SF/ArmDebian/New/blueberry.conf @@ -0,0 +1,14 @@ +# Allwinner H616 quad core 2GB RAM SoC WiFi +BOARD_NAME="Blueberry" +BOARDFAMILY="sun50iw9" +BOARD_MAINTAINER="aixiao@aixiao.me" +BOOTCONFIG="blueberry_defconfig" +SERIALCON="ttyS0" +KERNEL_TARGET="current,edge" +KERNEL_TEST_TARGET="current" +FORCE_BOOTSCRIPT_UPDATE="yes" +BOOTFS_TYPE="fat" +BOOT_FS_LABEL="BOOT" +OVERLAY_PREFIX="sun50i-h616" +BOOT_FDT_FILE="allwinner/sun50i-h616-blueberry-sd.dtb" + diff --git a/SF/ArmDebian/New/series.conf.patch b/SF/ArmDebian/New/series.conf.patch new file mode 100644 index 0000000..5dd1069 --- /dev/null +++ b/SF/ArmDebian/New/series.conf.patch @@ -0,0 +1,9 @@ +diff --git a/patch/kernel/archive/sunxi-6.18/series.conf b/patch/kernel/archive/sunxi-6.18/series.conf +index 760eac49b..61f19fbb0 100644 +--- a/patch/kernel/archive/sunxi-6.18/series.conf ++++ b/patch/kernel/archive/sunxi-6.18/series.conf +@@ -558,3 +558,4 @@ + patches.armbian/drv-usb-gadget-composite-rename-serial-manufacturer.patch + patches.armbian/drv-video-st7796s-fb-tft-driver.patch + patches.armbian/include-uapi-drm_fourcc-add-ARM-tiled-format-modifier.patch ++ patches.armbian/ARM64-dts-sun50i-h616-Blueberry.patch