1. 程式人生 > >Qemu搭建ARM vexpress開發環境(三)----NFS網路根檔案系統

Qemu搭建ARM vexpress開發環境(三)----NFS網路根檔案系統

Qemu搭建ARM vexpress開發環境(三)----NFS網路根檔案系統

標籤(空格分隔): Qemu ARM Linux


經過上一篇《Qemu搭建ARM vexpress開發環境(二)----通過u-boot啟動Linux核心》,已經實現了通過u-boot載入Kernel啟動開發板,並且掛載根檔案系統,本文講述通過NFS網路掛載根檔案系統。

通過NFS網路根檔案系統,可以實現開發板在通過u-boot啟動核心後,通過NFS網路在別的PC主機上掛載根檔案系統。對於開發除錯階段的工作學習提供了很大的便利,可以直接在Linux主機上開發、編譯驅動或者APP,並將目標檔案拷貝到NFS服務目錄中進行使用(此時檔案相當於被拷貝到了開發板的根檔案系統中)。也可以在主機端直接修改rootfs檔案系統中別的檔案,等效於在開發板上直接修改。

本文來介紹NFS掛載網路根檔案系統的操作步驟,本方法不僅僅適用於Qemu搭建的ARM vexpress開發板環境,也適用於所有其他的開發板實體。

由於各個開發板的NFS網路檔案系統製作方法是相同的,也可以參考Exynos4412和NanopiNEO開發板環境搭建中的NFS網路檔案系統製作方法部分內容。

1. 環境配置

Linux主機支援NFS服務
修改bootargs啟動引數
設定NFS為根檔案系統
設定主機NFS檔案系統地址
核心支援NFS掛載檔案系統

2. 安裝並配置NFS服務

2.1 Linux主機開啟NFS服務

安裝:

# sudo apt install nfs-kernel-server

配置NFS:

# vim /etc/exports
// 新增NFS共享目錄
/home/mcy/qemu/rootfs    *(rw, sync, no_root_squash, no_subtree_check)
    rw    可讀可寫操作
    sync    記憶體和磁碟上的內容保持同步
    no_root_squash    Linux主機不再將開發板設定為匿名使用者,可以操作檔案讀寫
    no_subtree_check    不檢查根檔案系統子目錄檔案

重啟NFS服務:

sudo /etc/init.d/rpcbind restart
sudo /etc/init.d/nfs-kernel-server restart

或者:

# systemctl restart nfs-kernel-server

檢查NFS共享目錄是否建立:

# sudo showmount -e
Export list for mcy-VirtualBox:
/home/mcy/qemu/rootfs *

注:
使用NFS網路檔案系統時,需要Linux主機關閉系統防火牆,否則,系統在執行時會出現異常。

2.2 開發板配置支援NFS網路

修改u-boot中的啟動引數:

# vim include/configs/
CONFIG_BOOTCOMMAND
    setenv bootargs 'root=/dev/nfs rw    \
    nfsroot=192.168.0.105:/home/mcy/qemu/rootfs init=/linuxrc    \
    ip=192.168.0.110 console=ttyAMA0';    \

配置核心支援NFS掛載檔案系統

完善NFS檔案系統
重啟reboot命令

3. 製作根檔案系統

編譯busybox

nfs
Linux System Utilities  --->
    [*] mount (30 kb)
        [*]   Support mounting NFS file systems on Linux < 2.6.23

建立rootfs目錄,並在rootfs目錄下建立檔案:

# mkdir etc
# cd etc
# vim inittab
::sysinit:/etc/init.d/rcS        // 執行rcS指令碼
#::respawn:-/bin/sh
#tty2::askfirst:-/bin/sh
#::ctrlaltdel:/bin/umount -a -r

console::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
# vim init.d/rcS
#! /bin/sh
PATH=/sbin:/bin:/user/sbin:/usr/bin
LD_LIBRARY_PATH=/lib
export PATH LD_LIBRARY_PATH

mount -a        // 掛載根檔案系統 fstab
mkdir -p /dev/pts
mount -t devpts devpts dev/pts
mdev -s
mkdir -p /var/lock

echo "......"
# vim fstab
proc    /proc    proc    defaults    0    0
tmpfs    /tmp    tmpfs    default    0    0
sysfs    /sys    sysfs    default    0    0
tmpfs    /dev    tmpfs    default    0    0
var    /dev    tmpfs    default    0    0
ramfs    /dev    ramfs    default    0    0
# vim profile
PS1='xiami@vexpress:\w #'
export PS1

也可以在~/.bashrc中修改或設定PS1

啟動流程:
Linux核心啟動之後,掛載根檔案系統
開啟init程序,bootargs init=/linuxrc,啟動第一個使用者程序
在使用者程序中讀取inittab指令碼,

構建其他目錄
其他的目錄可以是空目錄

# cd rootfs
# mkdir proc mnt tmp sys root