由于工作需要,在做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. Day16_94_IO_读取文件字节流read()方法(三)

    读取文件字节流read()方法(三) int read(byte[] bytes) 返回值为int类型, 该int类型数据表示每一次读取到的有效字节数,也就是读取到了几个字节, 一个都没读取到返回-1 ...

  2. 哈工大LTP基本使用-分词、词性标注、依存句法分析、命名实体识别、角色标注

    代码 import os from pprint import pprint from pyltp import Segmentor, Postagger, Parser, NamedEntityRe ...

  3. MySQL UDF提权执行系统命令

    目录 UDF UDF提权步骤 UDF提权复现(php环境) UDF UDF (user defined function),即用户自定义函数.是通过添加新函数,对MySQL的功能进行扩充,其实就像使用 ...

  4. Vip视频解析端口

    ------------恢复内容开始------------ 本教程仅供学习交流使用,请不要用于商业用途,支持正版,人人有责 我们怎么免费看VIP视频呢?一个简单的方法,就是通过解析接口 VIP视频解 ...

  5. web技术培训(二)-Flask后端框架初识

    web网站发展至今,特别是服务器端,涉及到的知识.内容,非常广泛.这对程序员的要求会越来越高.如果采用成熟,稳健的框架,那么一些基础的工作,比如,安全性,数据流控制等都可以让框架来处理,那么程序开发人 ...

  6. 修改linux默认文件创建权限-umask命令解析

    umask值用于设置用户在创建文件时的默认权限,当我们在系统中创建目录或文件时,目录或文件所具有的默认权限就是由umask值决定的. 对于root用户,系统默认的umask值是0022:对于普通用户, ...

  7. PHP 通用格式化调试函数

    /** * 打印调试函数 * @param $content * @param $is_die */function pre($content, $is_die = true){ header('Co ...

  8. Java筑基 - JNI到底是个啥

    在前面介绍Unsafe的文章中,简单的提到了java中的本地方法(Native Method),它可以通过JNI(Java Native Interface)调用其他语言中的函数来实现一些相对底层的功 ...

  9. 19.Quick QML-GroupBox自定义

    GroupBox用来将子类的部件显示在其边框内部,并且一般默认左上有一个标题.GroupBox不提供自己的布局.所以需要我们自己通过ColumnLayout或者其他布局方式来进行布局.GroupBox ...

  10. Java 给Word添加数字签名

    本文以Java程序代码为例,介绍如何给Word文档添加数字签名. 程序运行环境 IntedliJ IDEA JDK 1.8.0 Jar包:spire.doc.jar 4.5.1 Word文档:.doc ...