? 在上一章節中,我們已經成功完成了內核和 busybox 環境的配置。為了進一步提高開發效率,我們可以使用 NFS(Network File System)來掛載根目錄。NFS 允許我們將本地文件系統通過網絡共享給虛擬機使用,這樣在開發過程中,我們對本地文件系統所做的修改可以實時反映到虛擬機中,無需頻繁地重新構建和燒錄根文件系統,從而顯著提高開發效率。
1. Ubuntu網橋配置
1.1 編輯 Netplan 配置文件
在 Ubuntu 20.04 中,Netplan 是默認的網絡配置工具。我們需要編輯 Netplan 配置文件,該文件通常位于 /etc/netplan/
目錄下,文件名可能類似于 00-installer-config.yaml
。使用以下命令打開文件進行編輯:
sudo nano /etc/netplan/00-installer-config.yaml
示例配置如下,假設你的物理網卡名為 ens33
,網橋名為 br0
:
network:version: 2renderer: networkdethernets:ens33:dhcp4: nodhcp6: nobridges:br0:interfaces: [ens33]dhcp4: yesdhcp6: no
以上配置的含義為:
ens33
:將物理網卡ens33
的 DHCPv4 和 DHCPv6 功能關閉。br0
:創建一個名為br0
的網橋,將ens33
添加到網橋中,并開啟網橋的 DHCPv4 獲取 IP 地址功能。
1.2 應用 Netplan 配置
保存文件后,使用以下命令應用 Netplan 配置,使網橋配置生效:
sudo netplan apply
1.3 驗證網橋配置
使用 brctl show
命令查看網橋是否創建成功:
brctl show
若輸出包含類似如下內容,則表示網橋創建成功:
bridge name bridge id STP enabled interfaces
br0 8000.001122334455 no ens33
2. NFS 環境搭建
2.1 安裝 NFS 服務器
sudo apt-get install nfs-kernel-server
2.2 創建 NFS 共享目錄
sudo mkdir -p /nfsroot
sudo chmod 777 /nfsroot
2.3 復制根文件系統到 NFS 共享目錄
將之前已經配置好的根文件系統在 ~/rootfs
目錄下,將其復制到 NFS 共享目錄:
cp -r ~/rootfs/* /nfsroot/
2.4 配置 NFS 共享
編輯 /etc/exports
文件,添加以下內容:
/nfsroot *(rw,sync,no_subtree_check,no_root_squash)
重新導出 NFS 共享并重啟 NFS 服務:
sudo exportfs -a
sudo systemctl restart nfs-kernel-server
驗證NFS環境 sudo exportfs -v
3. QEMU 啟動命令詳解
以下是一個啟動 QEMU 模擬 vexpress-a9 開發板并使用 NFS 根文件系統的示例命令:
sudo qemu-system-arm \
-M vexpress-a9 \
-m 512M \
-kernel linux-5.15.18/arch/arm/boot/zImage \
-dtb linux-5.15.18/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \
-nographic \
-net bridge,br=br0 \
-net nic,model=lan9118 \
-append "root=/dev/nfs rw nfsroot=192.168.3.32:/home/jiuri/linux/nfs,tcp,nfsvers=3 ip=192.168.3.100::192.168.3.32:255.255.255.0::eth0:none console=ttyAMA0 earlyprintk"
命令參數詳解:
-
-M vexpress-a9
:指定模擬的開發板型號為 vexpress-a9。 -
-m 512M
:分配 512MB 的內存給虛擬機。 -
-kernel linux-5.15.18/arch/arm/boot/zImage
:指定 Linux 內核鏡像文件的路徑。 -
-dtb linux-5.15.18/arch/arm/boot/dts/vexpress-v2p-ca9.dtb
:指定設備樹二進制文件的路徑。 -
-append "root=/dev/nfs rw nfsroot=192.168.3.32:/home/jiuri/linux/nfs,tcp,nfsvers=3 ip=192.168.3.100::192.168.3.32:255.255.255.0::eth0:none console=ttyAMA0 earlyprintk"
:內核啟動參數,具體解釋如下:
root=/dev/nfs
:指定根文件系統使用 NFS。rw
:以讀寫模式掛載根文件系統。nfsroot=192.168.3.32:/home/jiuri/linux/nfs,tcp,nfsvers=3
:指定 NFS 服務器的 IP 地址、共享目錄,使用 TCP 協議,NFS 版本為 3。ip=192.168.3.100::192.168.3.32:255.255.255.0::eth0:none
:指定虛擬機的 IP 地址、網關、子網掩碼等網絡配置。console=ttyAMA0 earlyprintk
:指定控制臺設備并啟用早期打印功能。
-
-net bridge,br=br0
:使用橋接網絡,指定網橋名為br0
。 -
-net nic,model=lan9118
:配置網絡網卡,型號為lan9118
。
測試驗證
在虛擬機中創建test文件夾,在ubuntu中進行了顯示