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