Qemu搭建ARM vexpress開發(fā)環(huán)境(三)----NFS網(wǎng)絡(luò)根文件系統(tǒng)
標(biāo)簽(空格分隔): Qemu ARM Linux
經(jīng)過上一篇《Qemu搭建ARM vexpress開發(fā)環(huán)境(二)----通過u-boot啟動(dòng)Linux內(nèi)核》刊侯,已經(jīng)實(shí)現(xiàn)了通過u-boot加載Kernel啟動(dòng)開發(fā)板痘括,并且掛載根文件系統(tǒng),本文講述通過NFS網(wǎng)絡(luò)掛載根文件系統(tǒng)滔吠。
通過NFS網(wǎng)絡(luò)根文件系統(tǒng)纲菌,可以實(shí)現(xiàn)開發(fā)板在通過u-boot啟動(dòng)內(nèi)核后,通過NFS網(wǎng)絡(luò)在別的PC主機(jī)上掛載根文件系統(tǒng)疮绷。對于開發(fā)調(diào)試階段的工作學(xué)習(xí)提供了很大的便利翰舌,可以直接在Linux主機(jī)上開發(fā)、編譯驅(qū)動(dòng)或者APP冬骚,并將目標(biāo)文件拷貝到NFS服務(wù)目錄中進(jìn)行使用(此時(shí)文件相當(dāng)于被拷貝到了開發(fā)板的根文件系統(tǒng)中)椅贱。也可以在主機(jī)端直接修改rootfs文件系統(tǒng)中別的文件懂算,等效于在開發(fā)板上直接修改。
本文來介紹NFS掛載網(wǎng)絡(luò)根文件系統(tǒng)的操作步驟庇麦,本方法不僅僅適用于Qemu搭建的ARM vexpress開發(fā)板環(huán)境计技,也適用于所有其他的開發(fā)板實(shí)體。
由于各個(gè)開發(fā)板的NFS網(wǎng)絡(luò)文件系統(tǒng)制作方法是相同的山橄,也可以參考Exynos4412和NanopiNEO開發(fā)板環(huán)境搭建中的NFS網(wǎng)絡(luò)文件系統(tǒng)制作方法部分內(nèi)容垮媒。
1. 環(huán)境配置
Linux主機(jī)支持NFS服務(wù)
修改bootargs啟動(dòng)參數(shù)
設(shè)置NFS為根文件系統(tǒng)
設(shè)置主機(jī)NFS文件系統(tǒng)地址
內(nèi)核支持NFS掛載文件系統(tǒng)
2. 安裝并配置NFS服務(wù)
2.1 Linux主機(jī)開啟NFS服務(wù)
安裝:
# 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 內(nèi)存和磁盤上的內(nèi)容保持同步
no_root_squash Linux主機(jī)不再將開發(fā)板設(shè)置為匿名用戶,可以操作文件讀寫
no_subtree_check 不檢查根文件系統(tǒng)子目錄文件
重啟NFS服務(wù):
sudo /etc/init.d/rpcbind restart
sudo /etc/init.d/nfs-kernel-server restart
或者:
# systemctl restart nfs-kernel-server
檢查NFS共享目錄是否創(chuàng)建:
# sudo showmount -e
Export list for mcy-VirtualBox:
/home/mcy/qemu/rootfs *
注:
使用NFS網(wǎng)絡(luò)文件系統(tǒng)時(shí)航棱,需要Linux主機(jī)關(guān)閉系統(tǒng)防火墻楔脯,否則朝群,系統(tǒng)在運(yùn)行時(shí)會(huì)出現(xiàn)異常婚苹。
2.2 開發(fā)板配置支持NFS網(wǎng)絡(luò)
修改u-boot中的啟動(dòng)參數(shù):
# 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'; \
配置內(nèi)核支持NFS掛載文件系統(tǒng)
完善NFS文件系統(tǒng)
重啟reboot命令
3. 制作根文件系統(tǒng)
編譯busybox
nfs
Linux System Utilities --->
[*] mount (30 kb)
[*] Support mounting NFS file systems on Linux < 2.6.23
創(chuàng)建rootfs目錄浪漠,并在rootfs目錄下創(chuàng)建文件:
# mkdir etc
# cd etc
# vim inittab
::sysinit:/etc/init.d/rcS // 執(zhí)行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 // 掛載根文件系統(tǒng) 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中修改或設(shè)置PS1
啟動(dòng)流程:
Linux內(nèi)核啟動(dòng)之后,掛載根文件系統(tǒng)
開啟init進(jìn)程朴艰,bootargs init=/linuxrc观蓄,啟動(dòng)第一個(gè)用戶進(jìn)程
在用戶進(jìn)程中讀取inittab腳本,
構(gòu)建其他目錄
其他的目錄可以是空目錄
# cd rootfs
# mkdir proc mnt tmp sys root