瑞芯微Rockchip开发者社区
直播中

斯克迪亚

12年用户 415经验值
私信 关注
[问答]

如何去制作一个好的根文件系统呢

什么是网络启动呢?
如何去制作一个好的根文件系统呢?

回帖(1)

陈玉筠

2022-3-7 14:45:16
  网络启动,是用TFTP在服务器下载到内核、dtb文件到目标机的内存中,同时可以用NFS挂根文件系统加载目标机上,实现目标机的启动工作。
  准备启动工作:
  Firefly-RK3399板卡;
  路由器、网线;
  安装 NFS 和 TFTP 的服务器;
  一个制作好的根文件系统。
  注:中使用的是 Ubuntu 系统的 PC 机作为服务器,通过路由器和网线实现的连接。
  1 服务器设备与部署
  1、在服务器上参考部署 TFTP 服务:
  假设 TFTP 是 /
  tboot 。 2、在服务器上部署服务:
  的目录文件然后将好的网络系统复制到系统中,假设网络系统系统文件fs/root。
  2内核文件配置
  
  当前内核 git-commit:3710f06d1cc4e0a35d686d0806c42f0409084cdd
  如果要在内核中做挂根文件相关配置,并在 dd 中修改相关根系统文件的配置。
  首先进行内核配置,在挂载文件目录中执行 make menuconfig,选择相关配置:
  Networking support ---》
  Networking options ---》
  IP: kernel level autoconfiguration
  IP: DHCP support
  IP: BOOTP support
  IP: RARP support
  File systems ---》
  Network File Systems ---》
  Root file system on NFS
  注意:配置完成后要覆盖原来的config文件!否则编译的时候还是使用原来的config文件。
  修改 rk3399-linux.dtsi 配置,在 dts 文件中修改 chosen 节点下的 bootargs 参数,选择使用 NFS 挂载远程根文件系统,内容如下。
  源内容:
  chosen {
  bootargs = “earlycon=uart8250,mmio32,0xff1a0000 swiotlb=1 console=ttyFIQ0 ro root=PARTLABEL=rootfs rootfstype=ext4 rootwait overlayroot=device:dev=PARTLABEL=userdata,fstype=ext4,mkfs=1 coherent_pool=1m systemd.gpt_auto=0 cgroup_enable=memory swapaccount=1”;
  };
  修改后:
  chosen {
  bootargs = “earlycon=uart8250,mmio32,0xff1a0000 swiotlb=1 console=ttyFIQ0 rw root=/dev/nfs rootfstype=ext4 rootwait overlayroot=device:dev=PARTLABEL=userdata,fstype=ext4,mkfs=1 coherent_pool=1m systemd.gpt_auto=0 cgroup_enable=memory swapaccount=1”;
  };
  编译内核:
  make ARCH=arm64 rk3399-firefly.img -j12
  编译完成后,将编译好的内核文件 boot.img 和 rk3399-firefly.dtb 文件复制到 /tftpboot 目录中:
  cp boot.img /tftpboot
  cp arch/arm64/boot/dts/rockchip/rk3399-firefly.dtb /tftpboot
  详细说明可以参考内核目录中的 kernel/Documentation/filesystems/nfs/nfsroot.txt
  3 U-Boot设置
  请先确保目标机网线已插入,接入到服务器的局域网内。
  目标机启动进入 U-Boot 命令行模式,设置以下参数:
  #设置目标机 IP 地址
  =》 setenv ipaddr 192.168.31.101
  #设置 serverip 为服务器 IP 地址
  =》 setenv serverip 192.168.31.106
  #设置从 TFTP 下载内核和 dtb 文件到相应地址,用户请根据自己实际的目标机修改相应地址
  =》 setenv bootcmd tftpboot 0x0027f800 boot.img ; tftpboot 0x08300000 rk3399-firefly.dtb ; bootm 0x0027f800 - 0x08300000
  #设置挂载网络根文件系统,IP 参数依次为:目标机 IP:服务器 IP:网关:网络掩码:设备名:off,可以更简单的设置 ip=dhcp,通过 DHXP 自动分配 IP
  =》 setenv bootargs root=/dev/nfs rw nfsroot=192.168.31.106:/nfs/rootfs,v3 ip=192.168.31.101:192.168.31.106:192.168.31.1:255.255.255.0::eth0:off
  #启动目标机
  =》 boot
  ethernet@fe300000 Waiting for PHY auto negotiation to complete. done
  Speed: 100, full duplex
  Using ethernet@fe300000 device
  TFTP from server 192.168.31.106; our IP address is 192.168.31.101
  Filename ‘boot.img’。
  Load address: 0x27f800
  Loading: #################################################################
  #################################################################
  #################################################################
  #################################################################
  #################################################################
  ##################################################
  475.6 KiB/s
  done
  Bytes transferred = 20072448 (1324800 hex)
  Speed: 100, full duplex
  Using ethernet@fe300000 device
  TFTP from server 192.168.31.106; our IP address is 192.168.31.101
  Filename ‘rk3399-firefly.dtb’。
  Load address: 0x8300000
  Loading: #######
  645.5 KiB/s
  done
  Bytes transferred = 97212 (17bbc hex)
  ## Booting Android Image at 0x0027f800 。..
  Kernel load addr 0x00280000 size 19377 KiB
  ## Flattened Device Tree blob at 08300000
  Booting using the fdt blob at 0x8300000
  XIP Kernel Image 。.. OK
  Loading Device Tree to 0000000073edc000, end 0000000073ef6bbb 。.. OK
  Adding bank: 0x00200000 - 0x08400000 (size: 0x08200000)
  Adding bank: 0x0a200000 - 0x80000000 (size: 0x75e00000)
  Total: 912260.463 ms
  Starting kernel 。..
  。..
  在开机内核日志中可见:
  [ 12.146297] VFS: Mounted root (nfs filesystem) on device 0:16.
  说明已经挂载上了网络根文件系统。
  注意事项
  确保 TFTP 服务器、NFS 服务器可用;
  确保目标机先插入网线后在开机,且和服务器在同一局域网内,如果是直连目标机和服务器,请使用交叉网线;
  内核配置中,Root file system on NFS 依赖于 IP: kernel level autoconfiguration 选项,请先选择 IP: kernel level autoconfiguration,之后才可以找到 Root file system on NFS 选项;
  在 U-Boot 的 T 字地址提示中,请确认 boot.img 和 FTP 文件中的烧录地址。(boot.img 的文件结构中,有 2k 的头文件,然后是内核。所以下载内核目标,要下载到内核地址时0x0800的地址上);
  在挂载设置根文件系统时,远程挂载时出现挂载不成功的问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分