2025/12/11大约 6 分钟嵌入式
编译内核 orange-pi-6.1-sun50iw9
对于/linux-orangepi/branch/orange-pi-6.1-sun50iw9/.../sun50i-h618-orangepi-zero2w.dts
orangepizero2w.conf
git switch orange-pi-6.1-sun50iw9
export ARCH=arm64
export CROSS_COMPILE=aarch64-none-linux-gnu-
export O=out
cp arch/arm64/configs/linux_sunxi64_defconfig out/.config
make menuconfig# 确保选中
> Platform selection
[*] Allwinner sunxi 64-bit SoC Family
# 编译sunxi-ephy.c的依赖sunxi-ac200.c for pwm-clock
> Device Drivers > Multifunction device drivers
[*] X-Powers AC200
# 启用对板载WIFI芯片20U5622的支持
> Networking support > Wireless
<M> cfg80211 - wireless configuration API
[*] enable powersave by default
[*] cfg80211 wireless extensions compatibility
> Device Drivers > Network device support > Wireless LAN
[*] Unisoc wireless Support
<M> UWE5622 Wi-Fi Driver
<M> SPRD Next Generation Wireless LAN Support
[*] Unisoc Wi-Fi Power Save Support
<M> Spard TTY Overy SDIO Driver
> Device Drivers > Network device support > Wireless LAN > UNISOC WCN Device Drivers(for new chip...)
[ ] buildin bsp driver for unisoc chip
Search (RFKILL) > Networking support
<*> RF switch subsystem support --->
<*> GPIO RFKILL driver
Search (MMC_SUNXI) > MMC/SD/SDIO card support
<*> Allwinner sunxi SD/MMC Host Controller support
# to fix errors
Search (CONFIG_ARM_ALLWINNER_SUN50I_CPUFREQ_NVMEM) > CPU Frequency scaling
< > Allwinner nvmem based SUN50I CPUFreq driver
Search (CONFIG_THERMAL) > Device Drivers
[ ] Thermal drivers ----root@DESKTOP-J2QM63T:~/linux-orangepi# make -j4
root@DESKTOP-J2QM63T:~/linux-orangepi# ls ./arch/arm64/boot/ -l | grep Image
-rw-r--r-- 1 root root 21997576 Jan 11 04:18 Image
-rw-r--r-- 1 root root 9177061 Jan 11 04:18 Image.gz
root@DESKTOP-J2QM63T:~/linux-orangepi# export INSTALL_MOD_PATH=_install
root@DESKTOP-J2QM63T:~/linux-orangepi# make modules_install
INSTALL _install/lib/modules/6.1.31+/kernel/drivers/net/wireless/uwe5622/tty-sdio/sprdbt_tty.ko
INSTALL _install/lib/modules/6.1.31+/kernel/drivers/net/wireless/uwe5622/unisocwcn/uwe5622_bsp_sdio.ko
INSTALL _install/lib/modules/6.1.31+/kernel/drivers/net/wireless/uwe5622/unisocwifi/sprdwl_ng.ko
INSTALL _install/lib/modules/6.1.31+/kernel/net/wireless/cfg80211.koroot@DESKTOP-J2QM63T:~/linux-orangepi# find ./drivers/ ./net/ -name "*.ko"
./drivers/net/wireless/uwe5622/tty-sdio/sprdbt_tty.ko
./drivers/net/wireless/uwe5622/unisocwifi/sprdwl_ng.ko
./drivers/net/wireless/uwe5622/unisocwcn/uwe5622_bsp_sdio.ko
./net/wireless/cfg80211.ko
root@DESKTOP-J2QM63T:~/linux-orangepi# mkdir ../busybox-1.37.0/_install/lib/modules/6.1.31+
root@DESKTOP-J2QM63T:~/linux-orangepi# cp -a $(find ./drivers/ ./net/ -name "*.ko") ../busybox-1.37.0/_install/lib/modules/6.1.31+
root@DESKTOP-J2QM63T:~/linux-orangepi# ls ../busybox-1.37.0/_install/lib/modules/6.1.31+ -al
total 1576
drwxr-xr-x 2 root root 4096 Jan 11 05:07 .
drwxr-xr-x 3 root root 4096 Jan 11 05:07 ..
-rw-r--r-- 1 root root 608680 Jan 11 04:18 cfg80211.ko
-rw-r--r-- 1 root root 49392 Jan 10 02:05 sprdbt_tty.ko
-rw-r--r-- 1 root root 560176 Jan 11 04:18 sprdwl_ng.ko
-rw-r--r-- 1 root root 380312 Jan 10 02:05 uwe5622_bsp_sdio.ko注:关于为什么是/lib/firmware/wcnmodem.bin wifi_2355b001_1ant.ini,需参考驱动源代码:
// linux-orangepi/drivers/net/wireless/uwe5622/unisocwcn/platform/wcn_boot.c
static char *wcn_fw_path[WCN_FW_MAX_PATH_NUM] = {
UNISOC_FW_PATH_DEFAULT, /* most of projects */
"/lib/firmware/" /* allwinner r328... */
};
#define WCN_FW_NAME "wcnmodem.bin"// linux-orangepi/drivers/net/wireless/uwe5622/unisocwifi/rf_marlin3.c
#define WIFI_BOARD_CFG_PATH "/lib/firmware"
strcpy(path_buf, WIFI_BOARD_CFG_PATH);
sprintf(conf_name, "wifi_%8x_%dant.ini", chipid, ant);
strcat(path_buf, conf_name);下载编译安装cfg80211驱动的固件regulatory.db
root@DESKTOP-J2QM63T:~# cd
root@DESKTOP-J2QM63T:~# wget https://mirrors.edge.kernel.org/pub/software/network/wireless-regdb/wireless-regdb-2025.10.07.tar.xz
root@DESKTOP-J2QM63T:~# tar -xvf wireless-regdb-2025.10.07.tar.xz
root@DESKTOP-J2QM63T:~# find ./wireless-regdb-2025.10.07/ -name regulatory*
./wireless-regdb-2025.10.07/regulatory.db.5
./wireless-regdb-2025.10.07/regulatory.db
./wireless-regdb-2025.10.07/regulatory.bin.5
./wireless-regdb-2025.10.07/regulatory.bin
./wireless-regdb-2025.10.07/regulatory.db.p7s
root@DESKTOP-J2QM63T:~# cp $(find ../wireless-regdb-2025.10.07/ -name regulatory*) ./busybox-1.37.0/_install/lib/firmware/在linux-orangepi/orange-pi-5.4-sun50iw9 为orangepi-zero-2w编译内核的尝试
结果:失败;原因:没有官方的dts设备树文件,尝试在
sun50i-h6-orangepi.dtsi的基础上修改,最后在编写设备树节点时发现内核没有电源管理芯片axp313a的驱动。
git clone https://github.com/orangepi-xunlong/linux-orangepi.git
git fetch origin orange-pi-5.4-sun50iw9:orange-pi-5.4-sun50iw9
git switch orange-pi-5.4-sun50iw9
git reset --hard 9ab7a75814root@DESKTOP-KCS3FHC:../orange-pi-5.4-sun50iw9/#
export CROSS_COMPILE=aarch64-none-linux-gnu-
export ARCH=arm64
export INSTALL_MOD_PATH=_install
cd ~/u-boot-2026.01-rc4/
export PATH=$PATH:$(pwd)/tools
cd ../orange-pi-5.4-sun50iw9/
# cp arch/arm64/configs/sun50iw9p1smp_h618_android_defconfig .config
cp arch/arm64/configs/defconfig .config
# 加快编译速度:将 .config 中所有`=m`全部替换为 '=n'
make menuconfig > Platform selection
[*] Allwinner sunxi 64-bit SoC Family
> Search (sun50iw9) > Select the wafer with arch sun50i
(X) Allwinner SUN50IW9 SoCs
Search (PINCTRL_SUN50IW9) > Allwinner SOC PINCTRL DRIVER
<*> Support for the Allwinner sun50iw9 PIO
<*> Support for the Allwinner sun50iw9 R-PIO
> Search (SUN50IW9) > Clock support for Allwinner SoCs
<*> Support for the Allwinner SUN50IW9 CCU
<*> Support for the Allwinner SUN50IW9 PRCM CCU
> Search (SERIAL_SUNXI_EARLYCON) > Serial drivers
<*> Enable sunxi earlycon.
> Search (CONFIG_MMC_SUNXI) > MMC/SD/SDIO card support
<*> Allwinner sunxi SD/MMC Host Controller support --->
[*] V4P1X sunxi SD/MMC Host Controller support
[*] V4P00X sunxi SD/MMC Host Controller support
[ ] V4P10X sunxi SD/MMC Host Controller support
[*] V4P5X sunxi SD/MMC Host Controller support
[*] V5P3X sunxi SD/MMC Host Controller support
> Search (SUNXI_RFKILL) > Misc devices
<M> Allwinner rfkill driver
> Search (RFKILL) > Networking support
<M> RF switch subsystem support --->
<M> GPIO RFKILL driver
# Wifi config API
> Search (cfg80211) > Wireless
<M> cfg80211 - wireless configuration API
[*] enable powersave by default (NEW)
[*] cfg80211 wireless extensions compatibility
# for UWE5622 Wifi Driver
> Search (Unisoc) > Unisoc wireless Support
[*] Unisoc wireless Support
<M> UWE5622 Wi-Fi Driver
<M> SPRD Next Generation Wireless LAN Support
[*] Unisoc Wi-Fi Power Save Support
<M> Spard TTY Overy SDIO Driver
CONFIG_BCMDHD=n
# for AC200 TV module Support
# Search (MFD_ACX00) > Multifunction device drivers
# [*] Support Allwinnertech ACX00
# Search (AC200) > Video support for sunxi
# <*> DISP Driver Support(sunxi-disp2)
# <*> AC200 TV module Support(sunxi-disp2)
# Search (EXTCON) > Device Drivers > External Connector Class (extcon) support
# [*] sunxi extcon supportroot@DESKTOP-KCS3FHC:~/linux-orangepi# make -j10
...
...
...
OBJCOPY arch/arm64/boot/Image
GZIP arch/arm64/boot/Image.gz
CC [M] drivers/net/wireless/uwe5622/tty-sdio/sprdbt_tty.mod.o
LD [M] drivers/net/wireless/uwe5622/unisocwcn/uwe5622_bsp_sdio.ko
CC [M] drivers/net/wireless/uwe5622/unisocwifi/sprdwl_ng.mod.o
LD [M] drivers/net/wireless/uwe5622/unisocwifi/sprdwl_ng.ko
LD [M] drivers/net/wireless/uwe5622/tty-sdio/sprdbt_tty.ko
root@DESKTOP-J2QM63T:~/linux-orangepi# find ./net ./drivers/ -name *.ko
./net/wireless/cfg80211.ko
./drivers/net/wireless/uwe5622/tty-sdio/sprdbt_tty.ko
./drivers/net/wireless/uwe5622/unisocwifi/sprdwl_ng.ko
./drivers/net/wireless/uwe5622/unisocwcn/uwe5622_bsp_sdio.ko
root@DESKTOP-J2QM63T:~/linux-orangepi# dd if=arch/arm64/boot/Image.gz of=/dev/sde bs=512 seek=2048
963+1 records in
963+1 records out
7891315 bytes (7.9 MB, 7.5 MiB) copied, 0.949805 s, 8.3 MB/s
root@DESKTOP-J2QM63T:~/linux-orangepi# dd if=arch/arm64/boot/dts/sunxi/sun50i-h616-orangepi-zero3.dts of=/dev/sde bs=512 seek=38912
154+1 records in
154+1 records out
79089 bytes (79 kB, 77 KiB) copied, 0.327267 s, 242 kB/s
root@DESKTOP-J2QM63T:~/linux-orangepi# mkdir ../busybox-1.37.0/_install/lib/modules/5.4.125-g9ab7a758149d/ -p
root@DESKTOP-J2QM63T:~/linux-orangepi# cp -a $(find ./net ./drivers/ -name *.ko) ../busybox-1.37.0/_install/lib/modules/5.4.125-g9ab7a758149d/
root@DESKTOP-KCS3FHC:~/linux-orangepi# make modules_install
INSTALL drivers/net/wireless/uwe5622/tty-sdio/sprdbt_tty.ko
INSTALL drivers/net/wireless/uwe5622/unisocwcn/uwe5622_bsp_sdio.ko
INSTALL drivers/net/wireless/uwe5622/unisocwifi/sprdwl_ng.ko
DEPMOD 5.4.125-g9ab7a758149d
root@DESKTOP-KCS3FHC:~/linux-orangepi# cat include/config/kernel.release
5.4.125-g9ab7a758149d
root@DESKTOP-KCS3FHC:~/linux-orangepi# tree ./_install/lib/modules/5.4.125-g9ab7a758149d/kernel/
./_install/lib/modules/5.4.125-g9ab7a758149d/kernel/
└── drivers
└── net
└── wireless
└── uwe5622
├── tty-sdio
│ └── sprdbt_tty.ko
├── unisocwcn
│ └── uwe5622_bsp_sdio.ko
└── unisocwifi
└── sprdwl_ng.ko
# 查看驱动文件
root@DESKTOP-KCS3FHC:~/linux-orangepi# find ./_install/ -name *.ko
./_install/lib/modules/5.4.125-g9ab7a758149d/kernel/drivers/net/wireless/uwe5622/tty-sdio/sprdbt_tty.ko
./_install/lib/modules/5.4.125-g9ab7a758149d/kernel/drivers/net/wireless/uwe5622/unisocwifi/sprdwl_ng.ko
./_install/lib/modules/5.4.125-g9ab7a758149d/kernel/drivers/net/wireless/uwe5622/unisocwcn/uwe5622_bsp_sdio.ko
# 然后此时其实可以直接使用命令 `cp $(find ./_install/ -name *.ko) ../busybox-1.37.0/_install/lib/modules/5.4.125-g9ab7a758149d/` 完成安装
# 删除软连接文件,不要写成 `rm ./xxx/xxx/ -rf`
root@DESKTOP-KCS3FHC:~/linux-orangepi# rm ./_install/lib/modules/5.4.125-g9ab7a758149d/build
root@DESKTOP-KCS3FHC:~/linux-orangepi# rm ./_install/lib/modules/5.4.125-g9ab7a758149d/source
root@DESKTOP-KCS3FHC:~/linux-orangepi# rm ./_install/lib/modules/5.4.125-g9ab7a758149d/modules.*
# 然后此时其实可以直接使用命令 `cp -a ./_install/lib/modules/5.4.125-g9ab7a758149d ../busybox-1.37.0/_install/lib/modules/` 完成安装
# 保持目录结构 安装到rootfs/lib/modules
root@DESKTOP-KCS3FHC:~/linux-orangepi# mkdir ../busybox-1.37.0/_install/lib/modules/5.4.125-g9ab7a758149d/kernel/ -p
root@DESKTOP-KCS3FHC:~/linux-orangepi# cp -a ./_install/lib/modules/5.4.125-g9ab7a758149d/kernel/* ../busybox-1.37.0/_install/lib/modules/5.4.125-g9ab7a758149d/kernel/
root@DESKTOP-KCS3FHC:~/linux-orangepi# tree ../busybox-1.37.0/_install/lib/modules/5.4.125-g9ab7a758149d/kernel/
../busybox-1.37.0/_install/lib/modules/5.4.125-g9ab7a758149d/kernel/
└── drivers
└── net
└── wireless
└── uwe5622
├── tty-sdio
│ └── sprdbt_tty.ko
├── unisocwcn
│ └── uwe5622_bsp_sdio.ko
└── unisocwifi
└── sprdwl_ng.ko
# 创建软连接
cd ~/busybox-1.37.0/_install/lib/modules/5.4.125-g9ab7a758149d
ln -s ./kernel/drivers/net/wireless/uwe5622/tty-sdio/sprdbt_tty.ko sprdbt_tty.ko
ln -s ./kernel/drivers/net/wireless/uwe5622/unisocwcn/uwe5622_bsp_sdio.ko uwe5622_bsp_sdio.ko
ln -s ./kernel/drivers/net/wireless/uwe5622/unisocwifi/sprdwl_ng.ko sprdwl_ng.ko
root@DESKTOP-KCS3FHC:~/busybox-1.37.0/_install/lib/modules/5.4.125-g9ab7a758149d# ls -al
total 24
drwxr-xr-x 3 root root 4096 Jan 9 17:35 .
drwxr-xr-x 3 root root 4096 Jan 9 17:25 ..
drwxr-xr-x 3 root root 4096 Jan 9 17:25 kernel
lrwxrwxrwx 1 root root 60 Jan 9 17:34 sprdbt_tty.ko -> ./kernel/drivers/net/wireless/uwe5622/tty-sdio/sprdbt_tty.ko
lrwxrwxrwx 1 root root 61 Jan 9 17:35 sprdwl_ng.ko -> ./kernel/drivers/net/wireless/uwe5622/unisocwifi/sprdwl_ng.ko
lrwxrwxrwx 1 root root 67 Jan 9 17:34 uwe5622_bsp_sdio.ko -> ./kernel/drivers/net/wireless/uwe5622/unisocwcn/uwe5622_bsp_sdio.ko# MBR分区 分区起始位置100MB(100*2048=204800扇区)
root@DESKTOP-J2QM63T:~/orange-pi-5.4-sun50iw9# fdisk /dev/loop1
Welcome to fdisk (util-linux 2.37.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): o
Created a new DOS disklabel with disk identifier 0x3bbb7e68.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-1048575, default 2048): 204800
Last sector, +/-sectors or +/-size{K,M,G,T,P} (204800-1048575, default 1048575):
Created a new partition 1 of type 'Linux' and of size 412 MiB.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
root@DESKTOP-J2QM63T:~# dd if=./u-boot-2026.01-rc4/u-boot-sunxi-with-spl.bin of=/dev/loop2 bs=8k seek=1
106+1 records in
106+1 records out
872641 bytes (873 kB, 852 KiB) copied, 0.00265384 s, 329 MB/s
root@DESKTOP-J2QM63T:~# dd if=./orange-pi-5.4-sun50iw9/uImage.2 of=/dev/loop2 bs=512 seek=2048
54492+1 records in
54492+1 records out
27899976 bytes (28 MB, 27 MiB) copied, 0.340367 s, 82.0 MB/s
root@DESKTOP-J2QM63T:~# dd if=./orange-pi-5.4-sun50iw9/arch/arm64/boot/dts/sunxi/sun50i-h616-orangepi-zero3.dtb of=/dev/loop2 bs=1M seek=90
0+1 records in
0+1 records out
262144 bytes (262 kB, 256 KiB) copied, 0.0173748 s, 15.1 MB/s
root@DESKTOP-J2QM63T:~# dd if=./busybox-1.37.0/rootfs.ext4 of=/dev/loop2p1 bs=1M seek=0
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 1.30543 s, 80.3 MB/s参考
参考官方文件:orangepizero2w.conf
- BOARDFAMILY="sun50iw9"
- KERNEL_TARGET="current,next"
- MODULES="uwe5622_bsp_sdio sprdwl_ng sprdbt_tty"
# https://github.com/orangepi-xunlong/orangepi-build/blob/next/external/config/boards/orangepizero2w.conf
# Allwinner H618 quad core 1GB/1.5GB/2GB/4GB RAM
BOARD_NAME="OPI Zero2W"
BOARDFAMILY="sun50iw9"
......
KERNEL_TARGET="current,next"
MODULES_LEGACY="uwe5622_bsp_sdio sprdwl_ng sprdbt_tty"
MODULES_CURRENT="uwe5622_bsp_sdio sprdwl_ng sprdbt_tty"
MODULES_NEXT="uwe5622_bsp_sdio sprdwl_ng sprdbt_tty"
......参考官方文件:linux-sun50iw9-current.config
- sun50iw9-current=>
5.4.125
# https://github.com/orangepi-xunlong/orangepi-build/blob/next/external/config/kernel/linux-sun50iw9-current.config
#
# Automatically generated file; DO NOT EDIT.
# Linux/arm64 5.4.125 Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="aarch64-linux-gnu-gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
CONFIG_CC_IS_GCC=y
CONFIG_GCC_VERSION=110400
CONFIG_CLANG_VERSION=0
CONFIG_LLD_VERSION=0
CONFIG_CC_CAN_LINK=y
CONFIG_CC_HAS_ASM_GOTO=y
CONFIG_CC_HAS_ASM_INLINE=y
CONFIG_IRQ_WORK=y
CONFIG_BUILDTIME_EXTABLE_SORT=y
CONFIG_THREAD_INFO_IN_TASK=y
......
......
#
# UNISOC WCN Device Drivers(for new chip...)
#
# CONFIG_SC23XX is not set
# CONFIG_WCN_BSP_DRIVER_BUILDIN is not set
# CONFIG_RK_WIFI_DEVICE_UWE5621 is not set
# CONFIG_RK_WIFI_DEVICE_UWE5622 is not set
CONFIG_AW_WIFI_DEVICE_UWE5622=y
CONFIG_AW_BIND_VERIFY=y
# end of UNISOC WCN Device Drivers(for new chip...)
CONFIG_WLAN_UWE5622=m
CONFIG_SPRDWL_NG=m
CONFIG_UNISOC_WIFI_PS=y
CONFIG_TTY_OVERY_SDIO=m
# CONFIG_BCMDHD is not set
CONFIG_AIC_WLAN_SUPPORT=y
CONFIG_AIC8800_WLAN_SUPPORT=m
CONFIG_AIC8800_BTLPM_SUPPORT=m
# CONFIG_MAC80211_HWSIM is not set
# CONFIG_USB_NET_RNDIS_WLAN is not set
# CONFIG_VIRT_WIFI is not set
......