幸狐RV1106开发板从SD卡启动自己的busybox1.36.1根文件系统
uboot和linux内核都位于板载flash上,只有busybox根文件系统位于sd卡的第三分区上。
先按正常方法把幸狐RV1106原有的系统(uboot+linux内核+buildroot根文件系统)烧录到板载flash上,确保系统能正常启动。
按文章https://blog.csdn.net/ZLK1214/article/details/119917295所述的方法给SD卡分区。
我分的是三个区,第一个区1.5GB没有文件系统,第二个区是8GB的fat32文件系统,剩下的空间是ext4文件系统,里面放入busybox根文件系统。
~ # fdisk -l
Disk /dev/mmcblk1: 58 GB, 62534975488 bytes, 122138624 sectors
1908416 cylinders, 4 heads, 16 sectors/track
Units: sectors of 1 * 512 = 512 bytes
Device Boot StartCHS EndCHS StartLBA EndLBA Sectors Size Id Type
/dev/mmcblk1p1 0,1,1 195,13,12 63 3145790 3145728 1536M 83 Linux
/dev/mmcblk1p2 195,208,13 1023,254,63 3145791 19923006 16777216 8192M c Win95 FAT32 (LBA)
/dev/mmcblk1p3 1023,254,63 1023,254,63 19923007 122138623 102215617 48.7G 83 Linux
~ #
busybox根文件系统的制作方法见https://blog.csdn.net/ZLK1214/article/details/119960367。
fedora42系统下busybox-1.36.1 make menuconfig时提示Unable to find the ncurses libraries的解决方法:
修改scripts/kconfig/lxdialog/check-lxdialog.sh文件:
46 # Check if we can link to ncurses
47 check() {
48 $cc -x c - -o $tmp 2>/dev/null <<'EOF'
49 #include CURSES_LOC
50 main() {}
51 EOF
第50行改成int main() {}
修改uboot的命令行等待时间,由0秒改成5秒:
运行./build.sh编译幸狐镜像的时候,看下命令行输出的TARGET_UBOOT_CONFIG的值是什么defconfig。
============================================
TARGET_ARCH=arm
TARGET_UBOOT_CONFIG=luckfox_rv1106_uboot_defconfig rk-sfc.config
TARGET_SPL_CONFIG=
TARGET_KERNEL_CONFIG=luckfox_rv1106_linux_defconfig
TARGET_KERNEL_DTS=rv1106g-luckfox-pico-pro.dts
TARGET_RECOVERY_CONFIG=
TARGET_RAMBOOT_CONFIG=
============================================
因为TARGET_UBOOT_CONFIG=luckfox_rv1106_uboot_defconfig,
所以修改sysdrv/source/uboot/u-boot/configs/luckfox_rv1106_uboot_defconfig文件。
将里面的CONFIG_BOOTDELAY=0改成5。
运行./build.sh,重新开始编译,然后烧录到板子上。
插上sd卡,重启板子,串口提示Hit key to stop autoboot('CTRL+C'):时按下ctrl+c,进入uboot命令行,执行下面两条命令,临时将根文件系统的路径指向sd卡的第三分区。
setenv sys_bootargs root=/dev/mmcblk1p3 rw rootfstype=ext4 init=/linuxrc
boot
命令执行后会从板载flash启动内核,但使用的是sd卡中的busybox根文件系统。
串口打印[ 0.390894] usb 1-1: new high-speed USB device number 2 using xhci-hcd时,按下回车键,即可进入busybox命令行界面。
busybox系统下修改系统时间的命令:
设置为北京时间2025年6月19日 上午10点46分。
date -s "2025-06-19 02:46:45"
注意小时要减8小时。
busybox系统下查看系统时间的命令:
date
~ # date
Thu Jun 19 02:47:48 UTC 2025
【板子从板载flash中的luckfox根文件系统启动的方法】
不做任何处理,直接开机进内核。
【板子从sd卡第三分区上的busybox根文件系统启动的方法】
在uboot提示Hit key to stop autoboot('CTRL+C'):时按下ctrl+c键,运行下面的命令
setenv sys_bootargs root=/dev/mmcblk1p3 rw rootfstype=ext4 init=/linuxrc
boot
然后在串口打印[ 0.390894] usb 1-1: new high-speed USB device number 2 using xhci-hcd时,按下回车键。即可进入命令行界面。
可以saveenv保存环境变量,每次都从sd卡上的busybox系统启动。
旧环境变量值:
sys_bootargs= ubi.mtd=6 root=ubi0:rootfs rootfstype=ubifs rk_dma_heap_cma=66M
设置板子的系统时间为14:35:40:
(北京时间减8小时)
date -s "2025-06-19 06:35:40"
【板子:从luckfox根文件系统启动,复制之前编译好的wifi内核模块和配置文件】
https://blog.csdn.net/ZLK1214/article/details/147461755https://blog.csdn.net/ZLK1214/article/details/147461755
umount /dev/mmcblk1p3
umount /dev/mmcblk1p2
mount /dev/mmcblk1p3 /mnt/sdcard
mkdir /mnt/sdcard/root/wifi
cp /etc/wpa_supplicant.conf /mnt/sdcard/root/wifi
cp /oem/usr/ko/cfg80211.ko /oem/usr/ko/aic_load_fw.ko /oem/usr/ko/aic8800_fdrv.ko /mnt/sdcard/root/wifi
cp -r /oem/usr/ko/aic_fw /mnt/sdcard/root/wifi
umount /dev/mmcblk1p3
【电脑上的linux虚拟机:打包(arm官网下载的)交叉编译器里面的libc库】
cp -r ~/Downloads/arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-linux-gnueabihf/arm-none-linux-gnueabihf/libc ~/libc
cd ~/libc
sudo chown -R root:root *
tar cvf libc.tar *
mv libc.tar /var/www/html/oct1158
cd ~
sudo rm -rf ~/libc
【电脑上的linux虚拟机:交叉编译openssl、libnl和wpa_supplicant】
cd ~/Downloads
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1w.tar.gz
tar xf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./Configure linux-armv4 no-asm --cross-compile-prefix=~/Downloads/arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf- enable-ssl3 enable-ssl3-method enable-weak-ssl-ciphers shared
(考虑到后面板子上要跑apache服务器,也要用到openssl,为了让apache的https支持xp系统的ie6和ie8浏览器,所以在这里开启了ssl3.0协议和3des算法)
make
make install DESTDIR=$(pwd)/_install
cd _install
sudo chown -R root:root usr
tar cf openssl-1.1.1w-binary.tar usrcd ~/Downloads
wget https://github.com/thom311/libnl/releases/download/libnl3_11_0/libnl-3.11.0.tar.gz
tar xf libnl-3.11.0.tar.gz
cd libnl-3.11.0
export PATH=$PATH:/home/oct1158/Downloads/arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-linux-gnueabihf/bin
./configure --host=arm-none-linux-gnueabihf
make
make install DESTDIR=$(pwd)/_install
cd _install
sudo chown -R root:root usr
tar cf libnl-3.11.0-binary.tar usrcd ~/Downloads
wget https://w1.fi/releases/wpa_supplicant-2.11.tar.gz
tar xf wpa_supplicant-2.11.tar.gz
cd wpa_supplicant-2.11/wpa_supplicant
cp defconfig .config
修改.config文件,在顶部添加
CC=/home/oct1158/Downloads/arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-gcc
CFLAGS += -I/home/oct1158/Downloads/openssl-1.1.1w/_install/usr/local/include -I/home/oct1158/Downloads/libnl-3.11.0/_install/usr/local/include/libnl3 -I/home/oct1158/Downloads/libnl-3.11.0/include/linux-private
LIBS += -L/home/oct1158/Downloads/openssl-1.1.1w/_install/usr/local/lib -L/home/oct1158/Downloads/libnl-3.11.0/_install/usr/local/lib
(路径中不能使用~符号)
然后在文件中找到CONFIG_CTRL_IFACE_DBUS_NEW=y,在前面加上#。
make
make install DESTDIR=$(pwd)/_install
cd _install
sudo chown -R root:root usr
tar cf wpa_supplicant-2.11-binary.tar usrcp ~/Downloads/openssl-1.1.1w/_install/openssl-1.1.1w-binary.tar /var/www/html/oct1158
cp ~/Downloads/libnl-3.11.0/_install/libnl-3.11.0-binary.tar /var/www/html/oct1158
cp ~/Downloads/wpa_supplicant-2.11/wpa_supplicant/_install/wpa_supplicant-2.11-binary.tar /var/www/html/oct1158
【板子:从luckfox根文件系统启动,从电脑上下载交叉编译器里面的libc库并解压到sd卡第三分区上的busybox根文件系统中,使交叉编译器编译出来的程序能在busybox里面运行,不会提示not found错误】
umount /dev/mmcblk1p3
umount /dev/mmcblk1p2
mkdir /mnt/myfat
mount /dev/mmcblk1p2 /mnt/myfat
cd /mnt/myfat
wget http://192.168.2.142/oct1158/libc.tar
mount /dev/mmcblk1p3 /mnt/sdcard
tar xf libc.tar -C /mnt/sdcard
cd ..
umount /dev/mmcblk1p2
umount /dev/mmcblk1p3
【板子:从luckfox根文件系统启动,从电脑上下载刚才交叉编译的openssl库、libnl库和wpa_supplicant软件并解压到sd卡第三分区上的busybox根文件系统中】
umount /dev/mmcblk1p3
umount /dev/mmcblk1p2
mkdir /mnt/myfat
mount /dev/mmcblk1p2 /mnt/myfat
cd /mnt/myfat
wget http://192.168.2.142/oct1158/openssl-1.1.1w-binary.tar
wget http://192.168.2.142/oct1158/libnl-3.11.0-binary.tar
wget http://192.168.2.142/oct1158/wpa_supplicant-2.11-binary.tar
mount /dev/mmcblk1p3 /mnt/sdcard
tar xf openssl-1.1.1w-binary.tar -C /mnt/sdcard
tar xf libnl-3.11.0-binary.tar -C /mnt/sdcard
tar xf wpa_supplicant-2.11-binary.tar -C /mnt/sdcard
cd ..
umount /dev/mmcblk1p2
umount /dev/mmcblk1p3
修改/etc/profile文件:
在# no-op下添加
export PATH=/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin
执行exit命令再按回车键生效。
新建一个/etc/ld.so.conf文件,文件内容为/usr/local/lib。保存好文件后,执行ldconfig命令。
【板子:从sd卡第三分区上的busybox根文件系统启动,加载wifi内核模块并连接热点】
insmod /root/wifi/cfg80211.ko
(可忽略cfg80211: failed to load regulatory.db这个错误,没有影响)
insmod /root/wifi/aic_load_fw.ko aic_fw_path=/root/wifi/aic_fw
insmod /root/wifi/aic8800_fdrv.ko
mkdir /var/run
wpa_supplicant -B -i wlan0 -c /root/wifi/wpa_supplicant.conf
这个时候板子已经成功连上路由器了,但不会自动从路由器获取IP地址。
手工配置IP地址:
ifconfig wlan0 192.168.60.100 netmask 255.255.255.0
route add default gw 192.168.60.1
ping 8.8.8.8 -c 4
可以ping通。
这里面用到的libnl3.11.0和wpa_supplicant2.11是目前的最新版本。
arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-linux-gnueabihf是arm官网目前最新版本的交叉编译器。
https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads/14-2-rel1
x86_64 Linux hosted cross toolchains
AArch32 GNU/Linux target with hard float (arm-none-linux-gnueabihf)
【配置root用户的密码】
touch /etc/group
addgroup -g0 -S root
touch /etc/passwd
adduser -h/root -Groot -S -u0 -s/bin/sh root
passwd
(可设置root密码为luckfox)
【通过udhcpc自动获取IP地址】
参考资料:https://blog.csdn.net/ZLK1214/article/details/120089931
echo "luckfox-rv1106" > /etc/hostname
vi /etc/mdev.conf
sd[a-z][0-9]+ 0:0 660 */etc/hotplug.sh
vi /etc/hotplug.sh
#!/bin/sh
if [ "$ACTION" = "add" ]
thenmkdir -p /mnt/$MDEVmount /dev/$MDEV /mnt/$MDEV
elseumount /mnt/$MDEVrmdir /mnt/$MDEV
fi
chmod +x /etc/hotplug.sh
vi /etc/init.d/rcS
#! /bin/sh/bin/mount -a
/bin/hostname -F /etc/hostnamemkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -sifconfig lo up
insmod /root/wifi/cfg80211.ko
insmod /root/wifi/aic_load_fw.ko aic_fw_path=/root/wifi/aic_fw
insmod /root/wifi/aic8800_fdrv.kohttpd -h /var/www/html
tcpsvd 0 21 ftpd -w / &
telnetdwhile ! ifconfig wlan0 >/dev/null 2>/dev/null
doecho "wait for wlan0..."
done
/usr/local/sbin/wpa_supplicant -B -i wlan0 -c /root/wifi/wpa_supplicant.conf
udhcpc -i wlan0 -b -x hostname:$(hostname)
vi /etc/profile
在export PATH上方添加:
awktext="\$1==\"$USER\"{print \$6}"
export HOME=`awk -F: "$awktext" /etc/passwd`
export PS1="[\\u@\\h \\w]\\$ "
然后在命令行运行下面的命令:
mkdir -p /var/www/html
mkdir /usr/share/udhcpc
cd /usr/share/udhcpc
wget http://192.168.2.140/oct1158/simple.script(来自busybox压缩包里面的examples/udhcp/simple.script)
mv simple.script default.script
chmod +x default.script
(default.script必须要有执行权限,否则udhcpc能获取到IP地址但是无法将IP地址设置到wlan0网卡上)
重启板子后,就能自动连接wifi并从路由器获取ip地址,并且能ping通www.baidu.com。
用下面的命令可以证明刚才交叉编译的openssl支持SSL3.0:
openssl s_client -connect zh.purasbar.com:443 -ssl3
以及TLS1.0:
openssl s_client -connect zh.purasbar.com:443 -tls1
XP系统的IE6浏览器默认只支持SSL3.0,IE8默认支持TLS1.0。openssl1.1.1w在编译的时候如果没有正确配置的话是不支持SSL3.0的。
关于centos8自带的apache2.4开启https后,XP系统的IE6和IE8无法显示网页的问题:https://blog.csdn.net/ZLK1214/article/details/137521522
【开机自动从网络获取日期和时间】
在电脑linux虚拟机上交叉编译ntpdate。
参考资料:【教程】制作能在ARM板上直接运行的gcc本地编译器_armgcc编译器-CSDN博客
cd ~/Downloads
wget https://downloads.nwtime.org/ntp/ntp-4.2.8p18.tar.gz
tar xf ntp-4.2.8p18.tar.gz
cd ntp-4.2.8p18
export PATH=$PATH:/home/oct1158/Downloads/arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-linux-gnueabihf/bin
./configure --host=arm-none-linux-gnueabihf --with-yielding-select=yes --with-openssl-incdir=/home/oct1158/Downloads/openssl-1.1.1w/_install/usr/local/include --with-openssl-libdir=/home/oct1158/Downloads/openssl-1.1.1w/_install/usr/local/lib
make
make install DESTDIR=$(pwd)/_install
cd _install
sudo chown -R root:root usr
tar czf ntp-4.2.8p18-binary.tar.gz usr
cp ntp-4.2.8p18-binary.tar.gz /var/www/html/oct1158
fedora42编译ntp-4.2.8p18时,提示configure: error: could not locate pthread_detach()。
解决方案:
修改configure文件,找到第23134行的pthread_detach(NULL),改成pthread_detach(0)。
sntp/configure的第13735行也要做同样的修改。
板子上:
mount /dev/mmcblk1p2 /mnt
cd /mnt
wget https://192.168.2.140/oct1158/ntp-4.2.8p18-binary.tar.gz --no-check-certificate
(板子上自己编译的busybox的wget是支持https的,但幸狐的buildroot根文件系统的wget不支持https)
tar xzf ntp-4.2.8p18-binary.tar.gz -C /
(板子上自己编译的busybox的tar是支持gzip压缩格式的,但幸狐的buildroot根文件系统的tar不支持gzip格式)
cd ~
umount /dev/mmcblk1p2
测试命令:
[root@luckfox-rv1106 ~]# ntpdate cn.pool.ntp.org
20 Jun 06:05:55 ntpdate[595]: step time server 84.16.73.33 offset -28799.489413 sec
[root@luckfox-rv1106 ~]# date
Fri Jun 20 06:05:59 UTC 2025
[root@luckfox-rv1106 ~]#
可将/usr/local/sbin/ntpdate cn.pool.ntp.org &加入/etc/init.d/rcS,开机自动校对时间。
【开机自动挂载SD卡第二分区(FAT32文件系统)到/mnt/sdfat】
mkdir /mnt/sdfat
vi /etc/fstab
添加/dev/mmcblk1p2 /mnt/sdfat vfat defaults 0 0
(不用考虑空格或者tab,可以直接复制粘贴进去)
保存文件,然后reboot重启板子。
【在板子上添加新用户】
mkdir /home
adduser oct1158
(输入密码)
完成后会自动创建oct1158用户和oct1158组,以及/home/oct1158目录。
可以用telnet登录上去。
【板子开启2GB swap交换空间】
dd if=/dev/zero of=/root/swapfile bs=1024 count=2097152
mkswap /root/swapfile
swapon /root/swapfile
查看剩余内存:free -h
开机自动挂载fstab分区:/etc/init.d/rcS末尾添加swapon /root/swapfile。
(修改/etc/fstab文件的方法试了,不行。可能busybox不支持。)
在fedora42虚拟机上用arm-gnu-toolchain-14.2交叉编译器编译gcc14.2、gdb14.2和make4.4,得到gcc本地编译器,然后在幸狐rv1106开发板上运行:https://blog.csdn.net/ZLK1214/article/details/149076762
在幸狐RV1106板子上用gcc14.2本地编译安装apache2.4.63,开启http2和tls1.3,并且https支持XP系统的IE6-8浏览器:https://blog.csdn.net/ZLK1214/article/details/149077086
在幸狐RV1106板子上用gcc14.2本地编译安装php-8.4.8:https://blog.csdn.net/ZLK1214/article/details/149077324
在幸狐RV1106开发板上用gcc14.2本地编译安装postgresql17.5数据库:https://blog.csdn.net/ZLK1214/article/details/149030585