zoukankan      html  css  js  c++  java
  • [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可以查看到以下信息:

  • 相关阅读:
    awk如何替换一个字符串的第n个字符?
    开启停止wifi热点bat脚本
    启停无线网卡bat脚本
    批量查找ip地址归属地脚本
    测试域名ping延迟脚本
    多线程FTP下载日志脚本
    社交网站好友储存设计和实现(PHP+MySQL)
    Python强化训练笔记(二)——元组元素的命名
    Python强化训练笔记(一)——在列表,字典,集合中筛选数据
    Android Studio安装配置
  • 原文地址:https://www.cnblogs.com/wan0807/p/14456007.html
Copyright © 2011-2022 走看看