uboot通過NFS掛載ubuntu根文件系統


由於工作需要,在做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

配置完成后可以通過printenv查看設置,將配置進行保存並運行。

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

2.UBoot不能默認通過nfs啟動
通過之前的配置方式,每次重啟時都需要進入UBoot通過指令啟動,將UBoot默認啟動方式配置為nfs啟動,具體配置如下:
設置bootargs

setenv bootargs 'console=ttymxc0,115200 rw root =/dev/nfs nfsroot=192.168.1.99:/home/xfg/linux/nfs_share/rootfs/busybox ip=192.168.1.89:192.168.1.99:192.168.1.1:255.255.255.0::eth1:off'

設置bootcmd

setenv bootcmd 'tftp 80800000 zImage;tftp 83000000 zImage-i2c6ulxbe.dtb;bootz 80800000 - 83000000;'

設置完成后保存並重啟

saveenv
boot

通過這樣的方式設置UBoot時,不用每次啟動都進入UBoot提高開發的效率。
注:在此備注一下湃兔bootcmd的默認配置,方便調試完成后通過emmc啟動系統,配置如下

setenv bootcmd 'if run loadbootscript; then run bootscript; fi'

參考

其中根文件系統的制作是根據這邊文獻進行整理的 https://blog.csdn.net/sinat_37141443/article/details/80882219


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM