一、设置uboot启动命令
在uboot console中使用printenv查看环境变量。
其中下面的几项是关于启动的命令:
distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
boot_targets=mmc1 mmc0 usb0 pxe dhcp sf0
bootcmd_mmc0=devnum=0; run mmc_boot
bootcmd_mmc1=devnum=1; run mmc_boot
参照bootcmd_mmc0增加nfs启动项:
setenv boot_targets 'nfs mmc1 mmc0 usb0 pxe dhcp sf0'
setenv bootcmd_nfs 'tftp 0x2080000 Image;tftp 0x1f00000 rk3399-orangepi-4-lts.dtb;booti 0x2080000 - 0x1f00000'
saveenv
增加uboot启动参数:
setenv bootargs 'console=ttyS2,1500000 root=/dev/nfs nfsroot=192.168.2.9:/home/frank/data/top/fs_opi,proto=tcp rw ip=192.168.2.88:192.168.2.9:192.168.2.1:255.255.255.0::eth0:off'
saveenv
经过上面的设置之后,uboot启动时就会通过tftp加载kernel和dtb,并通过nfs挂载文件系统了。
注:uboot和主机之间的ip设置参考网上的教程。
二、将文件系统解压到nfs共享目录
uboot中我们看到nfs共享目录在/home/frank/data/top/fs_opi,这个目录需要加到nfs配置中,步骤网上有很多教程,这里就不赘述了。
这里我们将orangepi的Orangepi4-lts_3.0.8_ubuntu_focal_minimal_linux5.10.43.img解压到nfs共享目录中。当然你也可以使用busybox编译一个rootfs,同样可以挂载。使用orangepi编译的img是因为它的功能更完善。
1、挂载 img 镜像
frank@debian:~$ sudo losetup -f
/dev/loop0
把文件虚拟成块设备
frank@debian:~$ sudo losetup -f --show Orangepi4-lts_3.0.8_ubuntu_focal_minimal_linux5.10.43.img
/dev/loop0
接着同步该分区 sudo kpartx -av /dev/loopX
frank@debian:~$ sudo kpartx -av /dev/loop0
add map loop0p1 (254:0): 0 2035712 linear 7:0 61440
接下来根据kpartx同步分区的信息把分区进行挂载
sudo mount /dev/mapper/loop0p1 /mnt
frank@debian:~$ ls /mnt/
bin boot dev etc home lib lost+found media mnt opt proc root run sbin selinux srv sys tmp usr var
2、将/mnt中的文件系统拷贝到nfs共享目录
cp /mnt/* /home/frank/data/top/fs_opi -raf
3、开启kernel中nfs和net相关选项
orangepi 4lts内核中有线网卡是以module的方式加载,需要改成内核启动加载,否则nfs加载的时候没有网络。
编译img的时候,开启内核配置选项:
Device Drivers --->
[*] Network device support --->
-*- PHY Device support and infrastructure --->
<*> Motorcomm PHYs
内核中添加nfs对根文件系统的支持:
File systems --->
[*] Network File Systems --->
[*] Root file system on NFS
配置后编译内核。
启动orangepi,nfs挂载成功:
......
[ 6.210209] VFS: Mounted root (nfs filesystem) on device 0:18.
[ 6.236549] devtmpfs: mounted
[ 6.247257] Freeing unused kernel memory: 6592K
[ 6.252741] Run /sbin/init as init process
......
Orange Pi 3.0.8 Focal ttyS2
orangepi4-lts login: orangepi
Password:
___ ____ ___ _ _ _ _____ ____
/ _ \| _ \_ _| | || | | | |_ _/ ___|
| | | | |_) | | | || |_ | | | | \___ \
| |_| | __/| | |__ _| | |___| | ___) |
\___/|_| |___| |_| |_____|_| |____/
Welcome to Orange Pi 3.0.8 Focal with Linux 5.10.43
System load: 23% Up time: 1 min
Memory usage: 4% of 3.77G IP: 192.168.2.88
CPU temp: 60°C Usage of /: 67% of 916G
[ 52 security updates available, 87 updates total: apt upgrade ]
Last check: 2024-03-31 03:58
Last login: Sun Mar 31 02:51:49 UTC 2024 from 192.168.2.9 on pts/0
orangepi@orangepi4-lts:~$ mount
192.168.2.9:/home/frank/data/top/fs_opi on / type nfs (rw,relatime,vers=2,rsize=4096,wsize=4096,namlen=255,hard,nolock,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.2.9,mountvers=1,mountproto=tcp,local_lock=all,addr=192.168.2.
9)
......
orangepi@orangepi4-lts:~$ uname -a
Linux orangepi4-lts 5.10.43 #3.0.8 SMP Sun Mar 31 10:53:44 CST 2024 aarch64 aarch64 aarch64 GNU/Linux