经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Linux/Shell » 查看文章
uboot通过NFS挂载ubuntu根文件系统
来源:cnblogs  作者:浇筑菜鸟  时间:2021/5/31 9:02:17  对本文有异议

由于工作需要,在做app开发或系统移植时,经常需要编辑系统后重新烧写异常麻烦。通过NFS挂载根文件系统就不需要每次更改系统后再进行编译和烧写,等开发完成后一次烧写即可完成。

一、准备材料

可以根据自己的需要准备相应材料,以下是我自己使用的
开发环境:VMware
操作系统:ubuntu
开发版:100dsk_imx6ull

二、环境配置

需要在ubuntu系统上安装配置NFS和TFTP,具体教程看我之前的笔记连接如下,也可以在百度上直接搜索NFS和TFTP的安装教程。
TFTP安装配置https://www.cnblogs.com/jzcn/p/14809035.html
NFS安装配置https://www.cnblogs.com/jzcn/p/14808681.html

三、制作根文件系统

1.创建根文件系统存放目录

  1. cd /home
  2. sudo mkdir -p image/ubuntu16.04.4
  3. cd image/ubuntu16.04.4

创建完成后需要将路径“/home/image/ubuntu16.04.4”添加至NFS的共享路径,别忘记更改路径的权限

  1. sudo chmod 777 ubuntu16.04.4 -R

2.下载根文件系统

ubuntu官网根文件系统下载地址 http://cdimage.ubuntu.com ,根据需要下载自己所需的版本。
进入ubuntu-base/releases/16.04.4/release 路径,然后下载 ubuntu-base-16.04.4-base-armhf.tar.gz 。
将文件拷贝到之前创建的 /homeimage/ubuntu16.04.4 文件下进行解压,命令如下:

  1. sudo tar zxf ubuntu-base-16.04.4-base-armhf.tar.gz

3.安装qemu-user-static工具

  1. sudo apt-get install qemu-user-static

安装完成后拷贝“/usr/bin/qemu-arm-static”到刚刚解压文件的“/usr/bin”路径下。

  1. sudo cp /usr/bin/qemu-arm-static ./usr/bin/

4.网络配置

修改根文件系统的软件源

  1. sudo vim ./etc/apt/sources.list

添加ubuntu arm源,我选择的是中科大的源,在打开文件的最后填入如下内容:

  1. deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
  2. deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
  3. deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe
  4. deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
  5. deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe
  6. deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
  7. deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
  8. deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe
  9. deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
  10. deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe

为了制作成功的根文件系统能够联网,可以直接拷贝本机的dns配置文件到根文件系统的相应位置。

  1. sudo cp /etc/resolv.conf ./etc/resolv.conf

4.挂在根文件系统并chroot

首先在本机挂载刚刚下载好的文件系统,联网完成相应的配置,然后载烧录到开发板上,需要挂载proc, sys, dev, dev/pts等文件系统。
为了操作简单,所以创建一个bash脚本来完成挂载和卸载操作,首先回到上一级目录“/home/image”,并创建ms.sh文件

  1. cd ..
  2. vim ms.sh

创建ms.sh文件的内容如下:

  1. #!/bin/bash
  2. mnt ()
  3. {
  4. echo "MOUNTING"
  5. sudo mount -t proc /proc ${2}proc
  6. sudo mount -t sysfs /sys ${2}sys
  7. sudo mount -o bind /dev ${2}dev
  8. sudo mount -o bind /dev/pts ${2}dev/pts
  9. sudo chroot ${2}
  10. }
  11. umnt ()
  12. {
  13. echo "UNMOUNTING"
  14. sudo umount ${2}proc
  15. sudo umount ${2}sys
  16. sudo umount ${2}dev/pts
  17. sudo umount ${2}dev
  18. }
  19. if [ "$1" = "-m" ] && [ -n "$2" ];
  20. then
  21. mnt $1 $2
  22. echo "mnt -m pwd"
  23. elif [ "$1" = "-u" ] && [ -n "$2" ];
  24. then
  25. umnt $1 $2
  26. echo "mnt -u pwd"
  27. else
  28. echo ""
  29. echo "Either 1'st, 2'nd or bothparameters were missing"
  30. echo ""
  31. echo "1'st parameter can be one ofthese: -m(mount) OR -u(umount)"
  32. echo "2'nd parameter is the full pathof rootfs directory(with trailing '/')"
  33. echo ""
  34. echo "For example: ch-mount -m/media/sdcard/"
  35. echo ""
  36. echo 1st parameter : ${1}
  37. echo 2nd parameter : ${2}
  38. fi

挂载根文件系统,-m表示挂载,-u表示卸载,后面的路径为解压获得的根文件系统所在的路径

  1. sudo sh ms.sh -m /home/image/ubuntu16.04.4

挂载成功后输入ls即可看到如下信息

  1. root@****:/# ls
  2. bin dev home media opt root sbin sys ubuntu-base-16.04.4-base-armhf.tar.gz var
  3. boot etc lib mnt proc run srv tmp usr

5.安装软件

首先更新源

  1. apt update

更新完成,安装必要软件,如有需要根据自己需求安装所需的软件即可,以下是我使用时需要的软件:

  1. apt install sudo
  2. apt install ssh
  3. apt install vim

6.用户配置

设置root密码

  1. passwd root

创建用户

  1. adduser imx6ull

设置主机名称和本机IP

  1. echo "imx6ulll" > /etc/hostname
  2. echo "127.0.0.1 localhost" >> /etc/hosts
  3. echo "127.0.1.1 imx6ulll" >> /etc/hosts

7.配置串口和网络dhcp

通过nfs挂载根文件系统启动时,需要将打印的信息转到物理串口上才能看到系统系统的信息,所以需要生成一下链接:

  1. ln -s /lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@ttymxc0.service

配置DHCP,也可以等下载到开发板之后在配置,但启动时会很慢。

  1. echo auto eth0 > /etc/network/interfaces.d/eth0
  2. echo iface eth0 inet dhcp >> /etc/network/interfaces.d/eth0
  3. /etc/init.d/networking restart

退出并卸载根文件系统

  1. exit
  2. sudo sh ms.sh -u /home/image/ubrfs16.04.4/

操作到这里根文件系统已经制作完成。

三、配置启动文件放入TFTP服务器

需要将“100ask_imx6ull-14x14.dtb”和“zImage”放入到TFTP服务器。每个开发版的启动文件不同,去找相应的开发资料即可找到,当然会移植系统的小伙伴也可以自己编译生成相应的文件。

四、配置uboot

打开开发版进入uboot配置nfs、TFTP、网络即可实现uboot通过nfs挂载根文件系统,uboot具体配置如下:

  1. setenv ipaddr 192.168.1.99
  2. setenv serverip 192.168.1.66
  3. setenv nfsroot /home/image/ubuntu16.04.4
  4. setenv image zImage

配置完成后可以通过pri查看设置,将配置进行保存并运行。

  1. saveenv
  2. run netboot

到这里任务已经完成,如果有什么理解不对的地方希望小伙伴支出。

问题处理

1.挂载后用户无写入权限
挂载登录后可能出现无写入权限,如图所示

出现此问题只需要通过开发环境挂载根文件系统,然后在 “/etc/fstab” 文件添加如下内容并重启开发版即可

  1. sudo sh ms.sh -m /home/image/ubuntu16.04.4
  2. sudo vim /etc/fstab

  1. # stock fstab - you probably want to override this with a machine specific one
  2. /dev/root / auto defaults 1 1
  3. proc /proc proc defaults 0 0
  4. devpts /dev/pts devpts mode=0620,gid=5 0 0
  5. tmpfs /run tmpfs mode=0755,nodev,nosuid,strictatime 0 0
  6. tmpfs /var/volatile tmpfs defaults 0 0
  7. # uncomment this if your device has a SD/MMC/Transflash slot
  8. #/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0

参考

其中根文件系统的制作是根据这边文献进行整理的 https://blog.csdn.net/sinat_37141443/article/details/80882219

原文链接:http://www.cnblogs.com/jzcn/p/14809800.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号