6、RK3399J Linux nfs挂载rootfs启动buildroot固件

1、介绍

Buildroot 编译完成之后生成的 rootfs.tar.gz,可以解压之后放到 NFS 服务器上作为 NFS ROOT 文件
系统供开发板使用。使用 NFS 文件系统,便于程序的开发调试。所谓 NFS 服务器,就是我们在 VMWare上运行的 Ubuntu。
使用 NFS 文件系统时,我们一般还会在 u-boot 使用 tftpboot 命令从 ubuntu 中下载内核文件 zImage,
所以 ubuntu 上既要配置 NFS 服务,也要配置 TFTP 服务。

2、安装 TFTP 服务端:

在 ubuntu 中执行以下命令安装 TFTP 服务:
book@100ask:~$ sudo apt-get install tftp-hpa tftpd-hpa
然后,创建 TFTP 服务器工作目录,并打开 TFTP 服务配置文件,如下:

book@100ask:~$ mkdir -p /home/book/tftpboot
book@100ask:~$ chmod 777 /home/book/tftpboot
book@100ask:~$ sudo vim /etc/default/tftpd-hpa

在配置文件/etc/default/tftpd-hpa 中,添加以下字段:

TFTP_DIRECTORY="/home/book/tftpboot"
TFTP_OPTIONS="-l -c -s"

最后,重启 TFTP 服务:

book@100ask:~$ sudo service tftpd-hpa restart

3、 安装 安装 NFS 服务: :

NFS 即网络文件系统,允许开发板直接通过网络挂载 PC 机中的文件夹。下面介绍在 ubuntu 上的 NFS
服务安装和配置。
首先,执行以下命令安装 NFS 服务:

book@100ask:~$ sudo apt-get install nfs-kernel-server

然后编辑/etc/exports 文件,添加 NFS 服务导出的工作目录:

book@100ask:~$ sudo vim /etc/exports

添加 NFS 目录:下面以/home/book/nfs_rootfs 为例,将其添加到/etc/exports 文件中, 如下:

/home/book/nfs_rootfs *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)

最后,重启 NFS 服务:

book@100ask:~$ sudo service nfs-kernel-server restart

如果一切正常,可以在ubuntu 中测试 NFS 服务:

book@100ask:~$ sudo mount -t nfs 127.0.0.1:/home/book/nfs_rootfs /mnt

4、在ubuntu 中准备好文件

可以通过 tftpboot 命令从 ubuntu 中下载内核文件 zImage和rk3399-firefly-aio.dtb ,可以设置内核的启动参数让单板启动后通过NFS 挂载 ubuntu 中的某个目录作为根文件系统。

注意:所谓根文件系统就是类似 Windows 的 C 盘,里面存放有必须的APP、库文件、配置文件。通过 NFS 可以把 Ubuntu的某个目录,当作板子的“C 盘”──Linux 中称之为根文件系统。

在操作单板之前,需要在 ubuntu 上准备好这些内容:zImage、rk3399-firefly-aio.dtb 、nfs_rootfs 文件夹。

(1)、拷贝内核和设备树文件到 tftp 目录:
将出厂镜像或者自行编译的 zImage 和设备树文件 rk3399-firefly-aio.dtb ,拷贝到 ubuntu 的
/home/book/tftpboot 目录。
(2)、把根文件系统压缩包解压到 NFS 目录:
把使用 buildroot 构建得到的根文件系统 nfs_rootfs/rootfs.tar.gz,复制、解压到 ubuntu 的/etc/exports
文件中指定的目录里:

book@100ask:~/100ask_roc-rk3399-pc/buildroot2018.02/output/images$ cp -rf nfs_rootfs/ ~
book@100ask:~/100ask_roc-rk3399-pc/buildroot2018.02/output/images$ cd ~/nfs_rootfs
book@100ask:~/nfs_rootfs$ sudo tar -zxvf rootfs.tar.gz

5、在uboot 中通过网络启动单板

既然要使用网络启动单板,那么双方(开发板、ubuntu)就要确保网络是联通的,假设 ubuntu 的 IP 为
192.168.1.132,开发板的 IP 为 192.168.1.112。
首先,在 U-boot 中设置开发板 IP 为 192.168.1.112, 如下:

=> setenv ipaddr 192.168.1.112

然后,在 U-boot 中使用 ping 命令测试开发板与NFS 服务器是否连通(出现“alive”就表示联通):

=> ping 192.168.1.111 

最后,在 U-Boot 控制台以下命令启动单板:

=> setenv serverip 192.168.1.132
=> setenv ipaddr 192.168.1.112
=> tftpboot 0x01f00000  rk3399-firefly-aio.dtb; tftpboot 0x02080000 Image; setenv bootargs root=/dev/nfs
nfsroot=192.168.1.132:/home/book/rootfs,vers=3 rw ip=192.168.1.120; booti 0x02080000 - 0x01f00000

等待网络开始下载相应的文件并启动内核,挂载文件系统

猜你喜欢

转载自blog.csdn.net/qq_18077275/article/details/108903342