[LS1046][挂载根文件系统]
飞凌OK1046挂载根文件系统注意事项
1、如何设置bootargs?
大多数的方法:开发板上电,按任意键进入bootloader,在bootloader中输入命令setenv bootargs ...。这种方法是普适的,但对于飞凌的OK1046需要注意的是:我们在bootloader中输入命令setenv bootargs ...,然后输入boot命令启动内核的过程中,设备会额外执行一个启动脚本:/boot/ls1046ardb_boot.scr。
该脚本位于/dev/mmcblk0p2中的/boot目录下,该脚本在执行过程中会重写bootargs环境变量,这样导致之前用户自己设置的bootargs会被覆盖掉,系统将不能从用户自定义的位置去挂载根文件系统。
ls1046ardb_boot.scr是一个二进制的程序,其中:
源文件位于:flexbuild/configs/board/ls1046ardb/manifest
编译生成的.scr文件位于:flexbuild/build/firmware/u-boot/ls1046ardb/ls1046ardb_boot.scr
编译命令为:flex-builder -i mkdistroscr -a arm64 -m ls1046ardb
其中源文件mainfest中与启动设置bootargs相关的是:
distroboot='part uuid $devtype $devnum:3 partuuid3; setenv bootargs console=ttyS0,115200 earlycon=uart8250,mmio,0x21c0500 root=PARTUUID=$partuuid3 rw rootwait board_name=$board_name serdes1=$serdes1 $othbootargs; if load $devtype $devnum:2 $load_addr /boot/uEnv.txt; then echo Importing environment from uEnv.txt ...; env import -t $load_addr $filesize; fi; load $devtype $devnum:2 $kernel_addr_r /boot/Image;load $devtype $devnum:2 $fdt_addr_r /boot/fsl-ls1046a-rdb-sdk-$serdes1-5a59.dtb; env exists secureboot && echo validating secureboot && run secureboot_validate;booti $kernel_addr_r - $fdt_addr_r'
我们可以将上述语句中的setenv bootargs删除,然后重新编译生成.scr程序,并将其更新到emmc的分区2(设备为:/dev/mmcblk0p2)的boot目录下。这样以后我们在uboot中设置的命令就不会被重写了。
2、nfs挂载根文件系统失败?之网卡名fm1-macx???
想设置nfs挂载根文件系统,参考网上的做法,设置启动参数为:
setenv bootargs 'console=ttyS0,115200 earlycon=uart8250,mmio,0x21c0500 rootfstype=nfsroot root=/dev/nfs nfsroot=192.168.8.10:/home/forlinx/nfs/rootfs ip=192.168.8.46:192.168.8.10:192.168.8.1:255.255.255.0::fm1-mac6:off board_name=$board_name serdes1=$serdes1 $othbootargs'
上电重启设备,设备未能成功挂载根文件系统。
多方查证,怀疑过Host主机ubuntu18.04的nfs版本问题,怀疑过tcp的问题,再次修改启动参数如下:
setenv bootargs 'console=ttyS0,115200 earlycon=uart8250,mmio,0x21c0500 rootfstype=nfsroot root=/dev/nfs nfsroot=192.168.8.10:/home/forlinx/nfs/rootfs,proto=tcp,nfsvers=3,nolock ip=192.168.8.46:192.168.8.10:192.168.8.1:255.255.255.0::fm1-mac6:off board_name=$board_name serdes1=$serdes1 $othbootargs'
仍旧失败。
且此时板子将根文件系统挂载在emmc进入系统后,手动挂载nfs成功!
无可奈何之下,在Host主机上安装了wireshark进行抓包,捕捉设备启动过程中有无和Host进行通信。然一包数据都未抓到(此处备注一下,ubuntu下使用wireshark需要在命令行输入sudo wireshark来启动,不然找不到网卡)。
于是怀疑bootargs中的ip=192.168.8.46:192.168.8.10:192.168.8.1:255.255.255.0::fm1-mac6:off设置是否有问题。干脆将其改为ip=192.168.8.46,然后输入boot命令。
此时发现了让人熟悉的字眼:
然后接下来就成功挂载了!
原来虽然进入系统后对应的网卡为fm1-mac6,而内核在启动过程中的网卡名并非fm1-mac6,而是eth4,fm1-mac6应该是NXP在系统启动后重新改名了。输入命令dmesg可以查看到以下信息: