由于工作需要,在做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.创建根文件系统存放目录

cd /home
sudo mkdir -p image/ubuntu16.04.4
cd image/ubuntu16.04.4

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

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 文件下进行解压,命令如下:

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

3.安装qemu-user-static工具

sudo apt-get install qemu-user-static

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

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

4.网络配置

修改根文件系统的软件源

sudo vim ./etc/apt/sources.list

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

deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe

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

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

4.挂在根文件系统并chroot

首先在本机挂载刚刚下载好的文件系统,联网完成相应的配置,然后载烧录到开发板上,需要挂载proc, sys, dev, dev/pts等文件系统。

为了操作简单,所以创建一个bash脚本来完成挂载和卸载操作,首先回到上一级目录“/home/image”,并创建ms.sh文件

cd ..
vim ms.sh

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

#!/bin/bash
mnt ()
{
echo "MOUNTING"
sudo mount -t proc /proc ${2}proc
sudo mount -t sysfs /sys ${2}sys
sudo mount -o bind /dev ${2}dev
sudo mount -o bind /dev/pts ${2}dev/pts
sudo chroot ${2}
}
umnt ()
{
echo "UNMOUNTING"
sudo umount ${2}proc
sudo umount ${2}sys
sudo umount ${2}dev/pts
sudo umount ${2}dev
} if [ "$1" = "-m" ] && [ -n "$2" ];
then
mnt $1 $2
echo "mnt -m pwd"
elif [ "$1" = "-u" ] && [ -n "$2" ];
then
umnt $1 $2
echo "mnt -u pwd"
else
echo ""
echo "Either 1'st, 2'nd or bothparameters were missing"
echo ""
echo "1'st parameter can be one ofthese: -m(mount) OR -u(umount)"
echo "2'nd parameter is the full pathof rootfs directory(with trailing '/')"
echo ""
echo "For example: ch-mount -m/media/sdcard/"
echo ""
echo 1st parameter : ${1}
echo 2nd parameter : ${2}
fi

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

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

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

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

5.安装软件

首先更新源

apt update

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

apt install sudo
apt install ssh
apt install vim

6.用户配置

设置root密码

passwd root

创建用户

adduser imx6ull

设置主机名称和本机IP

echo "imx6ulll" > /etc/hostname
echo "127.0.0.1 localhost" >> /etc/hosts
echo "127.0.1.1 imx6ulll" >> /etc/hosts

7.配置串口和网络dhcp

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

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

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

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

退出并卸载根文件系统

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

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

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

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

四、配置uboot

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

setenv ipaddr 192.168.1.99
setenv serverip 192.168.1.66
setenv nfsroot /home/image/ubuntu16.04.4
setenv image zImage

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

saveenv
run netboot

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

问题处理

1.挂载后用户无写入权限

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



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

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

# stock fstab - you probably want to override this with a machine specific one

/dev/root            /                    auto       defaults              1  1
proc /proc proc defaults 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
tmpfs /run tmpfs mode=0755,nodev,nosuid,strictatime 0 0
tmpfs /var/volatile tmpfs defaults 0 0 # uncomment this if your device has a SD/MMC/Transflash slot
#/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0

参考

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

uboot通过NFS挂载ubuntu根文件系统的更多相关文章

  1. 关于UBOOT,LINUX内核编译,根文件系统的15个小问题

    (1)内核默认运行地址和加载地址在哪里设置? 由 arch/arm/kernel/vmlinux.lds.S 生成的 arch/armkernel/vmlinux.lds决定   (2)从FLASH什 ...

  2. tiny4412 busybox制作根文件系统rootfs nfs 挂载 ubuntu 14.04

    http://blog.csdn.net/liudijiang/article/details/50555429(转) 首先得要有制作好的uboot和linux内核镜像zImage,先烧录到sd卡里, ...

  3. 配置uboot指定nfs挂载根文件系统

    背景: 文件系统的调试也建议在 网络中进行. 概念: NFS是Network File System的缩写及网络文件系统. 要功能是通过局域网络让不同的主机系统之间可以共享文件或目录. NFS系统和W ...

  4. debian下为stm32f429i-discovery编译uboot、linux内核和根文件系统

    交叉编译器:arm-uclinuxeabi-2010q1 交叉编译器下载下来后解压,然后将其中bin文件夹路径加入到PATH变量中. 根据<debian下烧写stm32f429I discove ...

  5. 通过busybox制作根文件系统详细过程

    我在之前的uboot通过NFS挂载ubuntu根文件系统中也有实现过根文件系统的制作,那只是在ubuntu官网已经做好的根文件基础上安装一些自己所需的软解而已.而使用busybox制作根文件系统可以自 ...

  6. Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统

    Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统 标签(空格分隔): Qemu ARM Linux 经过上一篇<Qemu搭建ARM vexpress开发环境(二)- ...

  7. mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(四制作根文件系统及通过NFS挂载文件系统)

    http://blog.csdn.net/yinjiabin/article/details/7489563 根文件系统一般包括: 1)基本的文件系统结构,包含一些必须的目录,比如:/dev,/pro ...

  8. mini2440 uboot使用nfs方式引导内核,文件系统

    mini2440 uboot使用nfs方式引导内核,文件系统 成于坚持,败于止步 看了一段时间的u-boot了,到今天才真正完全实现u-boot引导内核和文件系统,顺利开机,在此记录完整过程 1.首先 ...

  9. 嵌入式linux加载引导内核和根文件系统的方法

    总体来说,嵌入式Linux内核和根文件的引导与PC机差不多.嵌入式linux内核和根文件系统可以存放在各种可能的存储设备中,一般情况下我 们将内核和根文件系统直接烧入到Flash中(包括NOR和NAN ...

随机推荐

  1. eks 使用案例 部署jenkins

    https://aws.amazon.com/cn/blogs/storage/deploying-jenkins-on-amazon-eks-with-amazon-efs/ 这个链接挺好的,包含了 ...

  2. 0704-使用GPU加速_cuda

    0704-使用GPU加速_cuda 目录 一.CPU 和 GPU 数据相互转换 二.使用 GPU 的注意事项 三.设置默认 GPU 四.GPU 之间的切换 pytorch完整教程目录:https:// ...

  3. 测试工具PerfDog的使用

    使用操作:https://www.jianshu.com/p/cc04c710e643下载地址:https://perfdog.qq.com/

  4. Thinkphp5之laypage分页插件的实现

    //一下是laypage所用到的 js <script type="text/javascript" src="__STATIC__/lib/laypage/1.2 ...

  5. hdu3986 spfa + 枚举最短路上的边

    题意: 删除一条边后,求最短路中最长的那个(敌人搞破坏). 思路: 如果你是敌人你肯定删除最短路上的边,删除别的边最短路的值是不会变的,所以直接枚举最短路上的边去删除,取得最大的就行了... #inc ...

  6. C++ 模板元编程简单小栗子

    最近看了看模板的元编程,感觉有点意思. 一些计算可以在编译过程就能够完成,榨干编译器的最后一点资源. stl中用的全是这些玩意. 当然,这增加了编译时长. 我记得貌似有"图灵完备" ...

  7. 【python】Leetcode每日一题-螺旋矩阵

    Leetcode每日一题-螺旋矩阵 [题目描述] 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 示例1: 输入:matrix = [[1,2,3], ...

  8. java8中的Optional

    Optional类主要解决空指针异常NullPointerException.Optional 类(java.util.Optional)是一个容器类,代表一个值存在或不存在,原来用 null 表示一 ...

  9. ppt技巧一四步法调整段落排版

    声明:本文所有截图来源于网易云课堂--<和秋叶一起学PPT>,仅作为个人复习之用,特此声明!

  10. 查看.class文件的工具

    1.JDK 提供的 javap -c javap -c  test.class 2.将test.class用idea打开.