Armbian适配西瓜皮v3

 

简单适配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 首先要添加设备适配Armbian首先需要创建一个开发板配置文件,然后若此设备dts不在主线内核源码中需自行添加,最后看是用其他开发板的U-Boot配置还是新增补丁和配置为其单独适配U-Boot

# 获取Armbian系统的构建框架,当前是 25.11.0 版本,我这里采取最简方法适配,U-Boot用其他主线U-Boot源码中已支持开发板的,其他请自测
git clone --depth=1 https://github.com/armbian/build

# 拷贝鲁班猫的配置后修改为西瓜皮v3的就行了,它用的是 U-Boot 2025.04,具体修改在这行后面
cp build/config/boards/lubancat2.csc build/config/boards/nlnet-xiguapi.csc

# Rockchip RK3568 quad core 4-32GB SoC 1GBe eMMC USB3 # 这行会在menuconfig中显示,即 [配置文件名 无扩展名] (csc) [这行 # 后面的内容]
BOARD_NAME="Nlnet Xiguapi V3" # 开发板名称
BOARDFAMILY="rk35xx" # 在 config/sources/families/rk35xx.conf 里面有该架构详细配置
BOARD_FIRMWARE_INSTALL="-full" # 安装闭源固件驱动最全版本
BOARD_MAINTAINER="leux" # 开发板维护者
BOOTCONFIG="radxa-zero-3-rk3566_defconfig" # 使用的U-Boot的配置文件,有的配置文件会导致卡在u-boot启动时
KERNEL_TARGET="edge" # 内核支持哪些版本:vendor,current,edge
FULL_DESKTOP="yes"
BOOT_LOGO="desktop"
BOOT_FDT_FILE="rockchip/rk3568-xiguapi-v3.dtb" # 这里指定在 armbianEnv.txt 中要加载的设备树文件
BOOT_SCENARIO="spl-blobs"
IMAGE_PARTITION_TABLE="gpt" # 镜像只分一个区,若后面有 BOOTFS_TYPE="fat" 行则分两区存放rootfs与boot


# 获取西瓜皮v3的设备树到指定目录,这个目录里的设备树文件会自动拷贝到内核源码目录的 arch/arm64/boot/dts/rockchip/ 中编译
cd ~/build/patch/kernel/archive/rockchip64-6.17/dt/
wget https://github.com/coolsnowwolf/lede/raw/master/target/linux/rockchip/files/arch/arm64/boot/dts/rockchip/rk3568-xiguapi-v3.dts


# 关于小屏幕的驱动,先修改上面DTS里spi3中的 compatible = "galaxycore,gc9307" 为 compatible = "sitronix,st7789v"
# 再将如下适配小屏幕的内核补丁添加到:~/build/patch/kernel/archive/rockchip64-6.17/999-Add-GC9307.patch
--- a/drivers/staging/fbtft/fb_st7789v.c
+++ b/drivers/staging/fbtft/fb_st7789v.c
@@ -28,7 +28,7 @@
"D0 05 0A 09 08 05 2E 44 45 0F 17 16 2B 33\n" \
"D0 05 0A 09 08 05 2E 43 45 0F 16 16 2B 33"

-#define HSD20_IPS 1
+#define HSD20_IPS 0

/**
* enum st7789v_command - ST7789V display controller commands
@@ -289,7 +289,7 @@
default:
return -EINVAL;
}
- write_reg(par, MIPI_DCS_SET_ADDRESS_MODE, madctl_par);
+ write_reg(par, MIPI_DCS_SET_ADDRESS_MODE, 0x38);
return 0;
}


# 生成Armbian系统,这里以生成Debian trixie的无桌面最小版系统为例
./compile.sh build BOARD=nlnet-xiguapi BRANCH=edge BUILD_DESKTOP=no BUILD_MINIMAL=yes KERNEL_CONFIGURE=no RELEASE=trixie

# 生成Armbian系统,这里以生成Debian trixie的xfce桌面系统为例
./compile.sh build BOARD=nlnet-xiguapi BRANCH=edge BUILD_DESKTOP=yes BUILD_MINIMAL=no KERNEL_CONFIGURE=no RELEASE=trixie \
DESKTOP_APPGROUPS_SELECTED= DESKTOP_ENVIRONMENT=xfce DESKTOP_ENVIRONMENT_CONFIG_NAME=config_base MAINLINE_MIRROR=nju REGIONAL_MIRROR=china

# 最后生成的系统镜像和内核及头文件包分别在:build/output/images/ build/output/debs/

另样适配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 除了上面那种适配构建框架来生成系统镜像外,也可以直接修改替换其他开发板官方系统镜像中的设备树来拥有可用的系统镜像

# 先下载同版本主线内核源码和配置来生成设备树文件,如下LEDE中的DTS只能用于主线内核,不适用vendor内核
wget https://mirrors.ustc.edu.cn/kernel.org/linux/kernel/v6.x/linux-6.17.tar.gz
tar -xzvf linux-6.17.tar.gz
cd linux-6.17/
wget -O .config https://github.com/armbian/build/raw/main/config/kernel/linux-rockchip64-edge.config
sed -i '181i dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-xiguapi-v3.dtb' arch/arm64/boot/dts/rockchip/Makefile
wget -O arch/arm64/boot/dts/rockchip/rk3568-xiguapi-v3.dts \
https://github.com/coolsnowwolf/lede/raw/master/target/linux/rockchip/files/arch/arm64/boot/dts/rockchip/rk3568-xiguapi-v3.dts

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- dtbs
# 如上将生成设备树文件:linux-6.17/arch/arm64/boot/dts/rockchip/rk3568-xiguapi-v3.dtb


# 这里以Armsom-sige3的Armbian官方系统镜像为例,修改替换设备树后直接刷入使用
sudo losetup -f -P Armbian_community_25.11.0-trunk.208_Armsom-sige3_bookworm_vendor_6.1.115_minimal.img
sudo mount -t ext4 /dev/loop0p1 /mnt/rootfs/
cd /mnt/rootfs/
sudo sed -i "s/rk3568-armsom-sige3/rk3568-xiguapi-v3/" boot/armbianEnv.txt
sudo cp ~/linux-6.17/arch/arm64/boot/dts/rockchip/rk3568-xiguapi-v3.dtb boot/dtb/rockchip/
sudo umount /dev/loop0p1
sudo losetup -D


# 如果你有要适配设备的U-Boot文件,可以刷入替换原来的,也可以保持不变用原来的。这里用这个提取出来的U-Boot为例,但它里面包含分区表及扇区信息需要跳过
wget https://github.com/unifreq/openwrt_packit/raw/master/files/rk3568/h68k/bootloader.bin
dd if=bootloader.bin of=/dev/loop0 conv=fsync,notrunc bs=512 skip=64 seek=64

# 这个编译出来的U-Boot则只需要写入镜像时跳过前32KB,bs参数默认是512字节,seek=64表示要跳过 512*64=32768 即从跳过前32KB写入
cp /home/leux/immortalwrt/staging_dir/target-aarch64_generic_musl/image/xgp-rk3568-u-boot-rockchip.bin ./
dd if=xgp-rk3568-u-boot-rockchip.bin of=Armbian_community_25.11.0-trunk.208_Armsom-sige3_bookworm_vendor_6.1.115_minimal.img seek=64 conv=notrunc

# skip=xxx 是在操作时对if 后面的输入部分也就是原文件跳过多少块再开始备份。seek=xxx 是在操作时对of 后面的输出部分也就是目标文件跳过多少块再开始写

更多说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 瑞芯微SOC几个内核版本的说明,后面的路径是该版本内核补丁之类的存放处
edge 最新的稳定版内核(当前为 v6.17),适用于想要测试最新功能和改进的用户,尽管稳定性较差 build/patch/kernel/archive/rockchip64-6.17
current 最新的长期版内核(当前为 v6.12),专为希望通过最新功能获得稳定体验的用户而设计 build/patch/kernel/archive/rockchip64-6.12
vendor 供应商提供或维护的特定内核(Rockchip BSP 6.1),为用该SOC的开发板提供更好的支持 build/patch/kernel/rk35xx-vendor-6.1
legacy 供应商提供或维护的特定内核(Rockchip BSP 5.10),为用该SOC的开发板提供更好的支持 build/patch/kernel/rk35xx-legacy

# 内核源码编译目录 build/cache/sources/linux-kernel-worktree/6.17__rockchip64__arm64/
# U-Boot 源码目录 build/cache/sources/u-boot-worktree/u-boot/next-dev-v2024.10/
# edge用的是这个内核配置 build/config/kernel/linux-rockchip64-edge.config

# config/sources/families/include/rockchip64_common.inc # 内有当前edge内核版本 KERNEL_MAJOR_MINOR="6.17"
# build/lib/functions/configuration/main-config.sh # 文件中定义了 REGIONAL_MIRROR=china 则自动使用如下配置
MAINLINE_MIRROR=tuna UBOOT_MIRROR=gitee GITHUB_MIRROR=ghproxy DOWNLOAD_MIRROR=china GHCR_MIRROR=nju

# 关于Armbian系统的构建框架其他命令可参考:https://docs.armbian.com/Developer-Guide_Build-Commands/
./compile.sh kernel BOARD=nanopi-r5c BRANCH=edge # 构建内核和设备树并将其放置在 output/debs/
./compile.sh kernel-config BOARD=nanopi-r5c BRANCH=edge # 进入内核的配置菜单 make menuconfig 来添加或删除模块及相关功能
./compile.sh dts-check BOARD=nanopi-r5c BRANCH=edge # 检查验证设备树文件并改进开发板和补丁相关
./compile.sh kernel-dtb BOARD=nanopi-r5c BRANCH=edge # 仅构建 DTB 并输出完整的预处理 dts 源