1. 程式人生 > 其它 >開發板 uboot 設定通過 NFS 掛載主機上的根檔案系統

開發板 uboot 設定通過 NFS 掛載主機上的根檔案系統

//##############################################################################
// uboot 裡面的 bootargs 環境變數會設定“root”的值,所以我們將 root 的值改為 NFS 掛載即可。
// 在 Linux 核心原始碼裡面有相應的文件講解如何設定,文件為 Documentation/filesystems/nfs/nfsroot.txt,格式如下:
root=/dev/nfs nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>

// <server-ip> :伺服器 IP 地址(即 Ubuntu 主機的 IP 地址),我的是 192.168.31.172。
// <root-dir> :根檔案系統的存放路徑,比如我的就是 /home/book/nfs_rootfs 。
// <nfs-options>:NFS 的其他可選選項,一般不設定。
// <client-ip> :客戶端 IP 地址(即開發板的 IP 地址),我的是 192.168.31.173。
// <server-ip> :伺服器 IP 地址,同前面。
// <gw-ip> :閘道器地址,我的是 192.168.31.1。


// <netmask> :子網掩碼,我的是 255.255.255.0。
// <hostname> :客戶機的名字,一般不設定,可以空著。
// <device> :裝置名,也就是網絡卡名,一般是 eth0,eth1….,看你實際插哪個。
// <autoconf> :自動配置,一般不使用,所以設定為 off。
// <dns0-ip> :DNS0 伺服器 IP 地址,不使用。
// <dns1-ip> :DNS1 伺服器 IP 地址,不使用。

// 根據上面的格式 bootargs 環境變數的 root 值如下:
root=/dev/nfs nfsroot=192.168.31.172:/home/book/nfs_rootfs,proto=tcp rw ip=192.168.31.173:192.168.31.172:192.168.31.1:255.255.255.0::eth0:off

// “proto=tcp”表示使用 TCP 協議,“rw”表示 nfs 掛載的根檔案系統為可讀可寫。


//##############################################################################
// 【NFS掛載】示例
//// 1) 修改 Ubuntu 的 nfs 版本配置
// Ubuntu18 的 nfs 預設只支援 3 和 4 版本的 nfs,uboot 預設使用的是版本 2,所以直接需要修改 Ubuntu18 的 nfs 配置,
// 開啟 Ubuntu 下的/etc/default/nfs-kernel-server 檔案,然後在最後面新增下面這一行:
RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"
// 然後重啟服務
sudo /etc/init.d/nfs-kernel-server restart

//// 2) bootargs 環境變數設定
setenv bootargs 'console=ttySTM0,115200 root=/dev/nfs nfsroot=192.168.31.172:/home/book/nfs_rootfs,proto=tcp rw ip=192.168.31.173:192.168.31.172:192.168.31.1:255.255.255.0::eth0:off'
saveenv

//############################################################################## 3)、4)可選 ##
//// 3)bootcmd 設定(這裡是設定從 tftp 伺服器下載核心映象和裝置樹到開發板記憶體上)
setenv bootcmd 'tftp c2000000 uImage;tftp c4000000 stm32mp157c-100ask-512d-lcd-v1.dtb;bootm c2000000 - c4000000'
saveenv
// 這裡是設定從開發板外存上載入核心映象和裝置樹到記憶體上執行,例如:
setenv bootcmd 'ext4load mmc 1:2 c2000000 uImage;ext4load mmc 1:2 c4000000 stm32mp157c-100ask-512d-lcd-v1.dtb;bootm c2000000 - c4000000'
saveenv

//// 4) 執行 bootcmd
run bootcmd