小時的速度

sans6324發表於2020-11-06

8.1 傳輸檔案的多種方法
在嵌入式開發中,涉及交叉編譯:在 PC 上編譯,在開發板上執行。所以就涉及 PC 和開發板之間的檔案
傳輸,方法有多種:網路傳輸、串列埠傳輸、USB 傳輸,當然,還有最笨的方法:U 盤拷貝。

一般的日常開發流程為:

a. 在 Windows 上閱讀修改程式碼,然後通過 FileZilla 把程式碼傳到 VMWare 中的 Ubuntu;
b. 在 Ubuntu 上編譯程式;
c. 把程式下載到開發板上,執行驗證,
d. 在 Windows 下通過串列埠操作開發板。

所以在 Windows、Ubuntu、開發板三者間,兩兩之間都存在檔案的傳輸。

當然,有人不喜歡 Windows,PC 只用純 Linux,這些高手已經熟練掌握各種 Linux 命令,不再存在檔案傳輸的障礙。

總之,各種需求都存在,比如某些筆記本沒有網口,那可以使用 USB 線連線開發板,開發板模擬出網路卡;在工地上網口、USB 口統統沒有,那我們還可以使用串列埠。

我們會一一列舉,作為初學者,不需要驗證全部章節,選擇合適你的即可。

8.2 在 Windows 上通過串列埠和開發板傳輸檔案
如果只是偶爾傳輸小檔案,可以直接使用串列埠。
注意:在開發過程中,使用 NFS 是最方便的。

8.2.1 用 MobaXterm 開啟串列埠、啟動開發板
這不用介紹了吧。

8.2.2 使用 rz 命令通過串列埠下載 Windows 檔案到開發板上
可以在開發板上使用 rz 命令,將 PC 上的檔案傳輸到開發板。

請參考《5.3.2 使用rz命令通過串列埠下載Windows檔案到開發板上》

8.2.3 使用 sz 命令讓開發板向 PC 傳送檔案
可以在開發板上使用 sz 命令,將開發板的檔案上傳給PC。
請參考《5.3.3 使用 sz 命令通過串列埠把開發板檔案上傳給 PC》。

8.3 通過 USB 給開發板傳檔案
尚未實現。

8.4 安裝網路服務
在嵌入式開發中,網路服務帶來了很多便利,特別是 Ubuntu 上的 NFS 服務。使用 NFS 服務,開發板可以掛載 Ubuntu 上的某個目錄,假設開發板把 Ubuntu 上的/home/book 目錄掛載到自己的/mnt 目錄,那麼在開發過程中,可以如此操作:

a. 在 Ubuntu 上的/home/book/abc 目錄中編譯程式
b. 開發板可以直接執行/mnt/abc 下的程式

在 Ubuntu 上編譯程式,開發板可以立刻執行程式,免去了上傳、下載等等繁瑣的操作。

Windows 推出了 WSL 子系統(Windows Subsystem for Linux),這確實是個很牛的產品。可惜它不支援NFS 服務,否則我們早就捨棄 Ubuntu 而採用 WSL 了。

當然,網路服務不僅僅有 NFS,還有 TFTP、SSH 等服務。如果只是傳輸檔案,可以使用 TFTP、SSH 等服務,比如:

a. 在 Ubuntu 啟動 TFTP 服務,開發板通過 tftp 命令和 Ubuntu 互傳檔案;
b. 在 Windows 啟動 TFTP 服務,開發板通過 tftp 命令和 Windows 互傳檔案;
c. 在開發板上啟動 SSH 服務,Windows 通過 FileZilla 登入開發板,互傳檔案。

上述場景各有其存在的道理:
如果開發板沒安裝 SSH 服務,那麼就可以通過 tftp 命令使用 Ubuntu 或 Windows 的 TFTP 服務。
如果開發板安裝了 SSH 服務,那麼使用 FileZilla 傳輸檔案時是完全的 GUI 操作,非常方便。
開發、除錯過程使用 Ubuntu 的 NFS 服務,這是最方便的。

NFS、TFTP、SSH 等服務,都是基於網路的。開發板可以使用網線和電腦相連,也可以使用 USB OTG 線與電腦相連,後者通過虛擬的 USB 網路卡使用網路。

使用網線,還是使用 USB OTG 線?有網路卡、有網線就用網線,沒有再選擇 USB OTG 線。

下面章節講解怎麼安裝、配置各種服務,作為初學者建議先使用 NFS,其他的先不管。

8.4.1 在 Ubuntu 中安裝、配置 NFS
如果你使用的是我們提供的 Ubuntu,那麼已經安裝好了 NFS 服務。檢視一下/etc/export 的內容,就知道開發板可以掛載哪一個目錄。如果該檔案中沒有指定目錄,請繼續往下看。

如果你的 Ubuntu 未安裝 NFS 服務,那麼在確保 Ubuntu 可以上網的前提下,執行以下命令:

sudo apt-get install nfs-kernel-server
1
注意:如果 Ubuntu 無法上網,使用 VMware 橋接網路時請參考《1.3 VMware 橋接網路設定》,使用 VMware NAT 網路或 Docker 時請參考《第四章 使用 NAT 配置 Ubuntu 網路》和《第五章 安裝軟體及開發示例》。

然後,還得修改/etc/exports,新增類似以下的內容,下面的例子裡允許開發板通過 NFS 訪問 Ubuntu的/home/book 目錄:

/home/book *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
1
最後,重啟 NFS 服務,在 Ubuntu 上執行以下命令:

sudo /etc/init.d/nfs-kernel-server restart
1
可以在 Ubuntu 上通過 NFS 掛載自己,驗證一下 NFS 可用:

sudo mount -t nfs -o nolock,vers=3 127.0.0.1:/home/book /mntls /mnt
1
再次重申:NFS 是一種網路服務,開發板可以通過網線連線 Ubuntu 來使用 NFS 服務;甚至也可以通過USB OTG 線連線 Ubuntu,通過虛擬的 USB 網路卡使用 NFS 服務。

8.4.2 Ubuntu 安裝 TFTP 服務
注意:使用 VMware NAT 網路或 Docker 時,不需要在 Ubuntu 中安裝 TFTP 服務,而是在 Windows 執行tftpd64 程式。

在 Ubuntu 中執行以下命令安裝 TFTP 服務:

book@100ask:~$ sudo apt-get install tftp-hpa tftpd-hpa
1
然後,建立 TFTP 伺服器工作目錄,並開啟 TFTP 服務配置檔案,如下:

book@100ask:~$ mkdir -p /home/book/tftpboot
book@100ask:~$ sudo chmod 777 /home/book/tftpboot
book@100ask:~$ sudo vim /etc/default/tftpd-hpa
1
2
3
在配置檔案/etc/default/tftpd-hpa 中,新增以下欄位:

TFTP_DIRECTORY="/home/book/tftpboot"
TFTP_OPTIONS="-l -c -s"
1
2
最後,重啟 TFTP 服務:

book@100ask:~$ sudo service tftpd-hpa restart
1
檢視 tftp 服務是否在執行,執行如下命令,即可檢視是否在後臺執行。

book@100ask:~$ ps –aux | grep “tftp”
1
在這裡插入圖片描述

8.4.3 在 Windows 安裝 TFTP 服務
Windows 上的 TFTP 服務由一個應用程式 tftpd64 提供,下載後雙擊執行,再做些設定即可。tftpd64 的前身是 tftpd32,它是 32 位的程式。對於 64 位電腦,請使用 tftpd64。

tftpd64 的官網為:http://tftpd32.jounin.net/,建議下載“portable edition”版本,無需安裝直接執行。官網不好開啟的話,直接百度搜“tftpd64”即可,它是免費軟體。

把“網盤配套資料\01_Tools (工具)\01_Tools.zip”解壓後,也有此工具。

tftpd64 的使用非常簡單,執行後只需要設定 3 步:

a. 選擇目錄(開發板將從這個目錄讀、寫檔案)
b. 通過 IP 選擇網路卡

有些電腦有多個網路卡,選擇哪個網路卡?使用 VMware 橋接網路時請參考《1.3 VMware 橋接網路設定》,使用 VMware NAT 網路或 Docker 時請參考《第四章 使用 NAT 配置 Ubuntu 網路》和《第五章 安裝軟體及開
發示例》。
在這裡插入圖片描述
c. 設定防火牆,直接關閉防火牆;或是允許 tftpsever 使用網路:

對於 Windows 10 可以按下圖操作,對於其他作業系統,請自行百度:
在這裡插入圖片描述

8.5 沒有網路卡時可以使用 OTG 虛擬 USB 網路卡
如果你的電腦有網路卡,請使用真實網路卡。
如果你的電腦沒有網路卡,那麼用 USB 線連線 PC 和開發板的 USB OTG 口,開發板可以模擬出一個 USB 網路卡。Windows 使用這個 USB 網路卡比較複雜,我們一般是在 VMWare 中把它連線到 Ubuntu,讓開發板和 Ubuntu通過該虛擬網路卡來互動。

8.5.1 安裝、設定虛擬 USB 網路卡
再次宣告:電腦有真實網路卡,建議使用真實網路卡,那就不需要看本節內容。

開發板的 USB OTG 口通過 USB 線接到 Ubunut 時,開發板是 USB 從裝置,開發板可以模擬 U 盤、USB 串列埠、USB 網路卡;Ubuntu 看到的就是一個 U 盤、USB 串列埠或是 USB 網路卡。Ubuntu 可以通過這樣的 USB 網路卡跟
開發板進行網路通訊,反過來開發板當然也就可以通過這個 USB 網路卡掛載 Ubunut 的 NFS 目錄。

開發板要安裝 USB 驅動程式以模擬 USB 網路卡,Ubuntu 要安裝 USB 網路卡驅動程式。幸運的是,Ubuntu 中自帶該 USB 網路卡的驅動程式,並且會自動安裝驅動程式。

所以,我們要做的事情不多:

a. 在開發板上安裝 USB 驅動程式,它會在開發板裡虛擬出網路卡 usb0,需要設定 IP
b. 在 VMWare 上把虛擬網路卡連線到 Ubuntu,在 Ubuntu 中設定 IP

8.5.1.1 在開發板上安裝 USB OTG 網路卡模組驅動程式並設定 IP
如下所示,我們需要先在開發板終端上執行“modprobe -f g_ether”來安裝驅動模組程式,安裝成功的示意圖如下所示。

[root@imx6ull:~]# modprobe -f g_ether
1
在這裡插入圖片描述
該驅動會給開發板模擬出網路卡 usb0,使用以下命令設定其 IP,我們取 IP 為 10.10.70.1:

[root@imx6ull:~]# ifconfig usb0 10.10.70.1
1
sd
在安裝 g_ether 驅動時,開發板就已經模擬出了一個 USB 網路卡。一旦連線開發板的 USB OTG 口到電腦,就相當於給電腦插上了一個 USB 網路卡,裝置管理器會自動識別到新的裝置。

8.5.1.2 在 VMWare 中連線虛擬網路卡裝置至 Ubuntu 並設定 IP
如下圖所示,在開發板上安裝 g_ether 驅動並連線 USB OTG 線到 PC 上後,PC 會發現一個新的網路卡。

我們需要讓 VMWare 把這個網路卡連線到 Ubuntu 上,依次點選“虛擬機器”–>“可移動裝置”–>“Netchip RNDIS/Ethernet Gadget”–> “連線(斷開與主機的連線)©”,如下圖所示:
在這裡插入圖片描述
成功後,Ubuntu 系統下會多出一個新網路卡,執行“ifconfig -a”命令檢視網路卡名,如下圖所示,新網路卡名為“ens35u1”。

注意:不同系統上新網路卡的名字可能不同,再次接插 USB OTG 線時 Ubuntu 中新網路卡名也會變化。
在這裡插入圖片描述
使用以下命令設定其 IP,我們取 IP 為 10.10.70.2:

book@100ask:~$ sudo ifconfig ens35u1 10.10.70.2
1
在這裡插入圖片描述

8.5.1.3 測試網路並使用 NFS 服務
分配完 IP 地址後,我們就可以通過 ping 命令來測試 Ubuntu 和開發板系統是否可以互通,測試命令如下所示。

在開發板 ping Ubuntu 的 IP:

[root@imx6ull:~]# ping -I usb0 10.10.70.2
1
在這裡插入圖片描述
確認開發板和 Ubuntu 網路互通後,就可以在開發板上掛載 Ubuntu 的 NFS 目錄來互傳檔案了:
在這裡插入圖片描述

8.5.1.4 常見問題
有時候你會發現開發板和 Ubuntu 無法 ping 通對方,多試幾次就可以:

a. 試試重新拔插 USB OTG 線
b. 試試在開發板上先禁止網路卡,再啟用網路卡,比如:

[root@imx6ull:~]# ifconfig usb0 down
[root@imx6ull:~]# ifconfig usb0 10.10.70.1
1
2
c. 試試在 Ubuntu 上先禁止網路卡,再啟用網路卡,假設虛擬網路卡名為 ens35u1,可以試試這樣的命令:

book@100ask:~$ sudo ifconfig ens35u1 down
book@100ask:~$ sudo ifconfig ens35u1 10.10.70.2
1
2
注意:Ubuntu 上的虛擬網路卡名不一定是 ens35u1,需要執行“ifconfig -a”命令確認。

8.6 使用網路服務傳輸檔案
8.6.1 開發板掛載 Ubuntu 的 NFS 目錄
開發板和 Ubuntu 之間網路互通之後,就可以在兩者之間傳輸檔案了。

開發板上不一定安裝有 FTP 服務、SSH 等服務,所以不一定能使用 FTP 等工具登入開發板。

但是開發板的系統一般都自帶 mount 命令,並且支援 NFS 檔案系統。所以可以在開發板上執行 mount 命令掛載 Ubuntu 的某個目錄。這樣就可以在開發板和 Ubuntu 之間傳檔案了。

開發板使用 NFS 掛載 Ubuntu 的前提是:Ubuntu 中已經安裝了 NFS 服務,並且在/etc/exports 中配置了某個目錄供掛載。

使用 NAT 網路時,確保開發板可以 ping 通 Windows 後,就可以通過 NFS 掛載 Ubuntu 中的某個目錄。

使用橋接網路時,確保開發板可以 ping 通 Ubuntu 後,就可以通過 NFS 掛載 Ubuntu 中的某個目錄。

哪些目錄呢?請檢視 Ubuntu 的/etc/exports 檔案。

如果你使用的是VMware NAT方式,或是使用docker,假設Windows IP為192.168.1.100,在開發板上執行以下命令(注意:必須指定port為2049、mountport為9999):

[root@imx6ull:~]# mount -t nfs -o nolock,vers=3,port=2049,mountport=9999 192.168.1.100:/home/book/nfs_rootfs /mnt
[root@imx6ull:~]# cp /mnt/hello ./hello
1
2
如果你使用的是VMware橋接方式,假設Ubuntu IP為192.168.1.100,在開發板上執行以下命令:

[root@imx6ull:~]# mount -t nfs -o nolock,vers=3 192.168.1.100:/home/book/nfs_rootfs /mnt
[root@imx6ull:~]# cp /mnt/hello ./hello
1
2
如果一切正常,你可以在 Ubuntu 上把檔案放到/home/book/nfs_rootfs 目錄中,在開發板上可以從/mnt目錄中訪問該檔案。

8.6.2 開發板通過 tftp 傳輸 Ubuntu 檔案
注意:使用 VMware NAT 網路或 Docker,無法使用 tftp 命令訪問 Ubuntu,本節針對使用 VMware 橋接網路。

注意:使用 VMware NAT 網路或 Docker,可以使用 tftp 命令訪問 Windows,請參考《8.6.3 開發板通過 tftp 傳輸 Windows 檔案》。

8.6.2.1 在開發板上使用 tftp 命令下載檔案
首先確保你已經將要下載的檔案上傳至 Ubuntu 系統中 tftp 服務的目錄內,如下圖所示我的 tftp 服務目錄內有 zImage 100ask_imx6ull-14x14.dtb 兩個檔案,我的 Ubuntu 主機 IP 地址為 192.168.1.123。
在這裡插入圖片描述
比如我要下載 Ubuntu 伺服器下的 zImage 檔案,則在開發板上執行如下命令。

[root@imx6ull:~]# tftp -g -r zImage 192.168.1.123
1
下載後的檔案如下圖所示。
在這裡插入圖片描述

8.6.2.2 在開發板上使用 tftp 命令上傳檔案
比如我們現在開發板家目錄下建立一個 1.txt 的文字檔案,然後寫入 111111…. :
在這裡插入圖片描述
在這裡插入圖片描述
然後在開發板上執行如下命令上傳此檔案到 Ubuntu 伺服器的 tftp 服務目錄下。

[root@imx6ull:~]# tftp -p -l 1.txt 192.168.1.123
1
此時我們檢視 Ubuntu 伺服器的 tftp 服務目錄下,即可看到之前在開發板上建立的 1.txt 。
在這裡插入圖片描述

8.6.3 開發板通過 tftp 傳輸 Windows 檔案
在 Windows 的 TFTP 服務由軟體 tftpd64.exe 實現,它無需安裝,解壓就可執行。

重要的是:需要設定防火牆,請參考《8.4.3 在 Windows 安裝 TFTP 服務》。

首先啟動 tftpd64.exe,設定好檔案目錄,選擇 IP。假設該 IP 為 192.168.1.99。那麼開發板可以使用tftp 命令向該 IP 上傳檔案,或是下載檔案。

在這裡插入圖片描述

8.6.3.1 在開發板上使用 tftp 命令下載檔案
首先確保你已經將要下載的檔案放入 Windows 中上圖所選的目錄裡,比如 zImage。

然後可以在開發板上執行如下命令(假設 Windows Ip 是 192.168.1.99):

[root@imx6ull:~]# tftp -g -r zImage 192.168.1.99
1
這就會從 Windows 下載檔案,效果如下圖:
在這裡插入圖片描述
下載後的檔案儲存在開發板的當前目錄下,如下圖所示:
在這裡插入圖片描述

8.6.3.2 在開發板上使用 tftp 命令上傳檔案
比如我們想把/boot/zImage 檔案上傳到 Windows(假設 IP 為 192.168.1.99),可以在開發板上執行如下命令:

[root@imx6ull:~]# cd /boot
[root@imx6ull:/boot]# tftp -p -l zImage 192.168.1.99
1
2
效果如下圖:
在這裡插入圖片描述

8.6.4 在 Windows 上通過 FileZilla 和開發板傳輸檔案
Windows 和開發板之間可以通過 TFTP 服務,或是 SSH 服務傳輸檔案。前者需要在開發板上輸入 tftp 命令,後者可以在純 GUI 介面操作。

100ASK_IMX6ULL 自帶的 Linux 系統中,已經安裝並開啟了 SSH 服務,所以只要網路聯通,就可以通過FileZilla 和開發板傳輸檔案。

注意:在開發過程中,使用 NFS 是最方便的。

8.6.4.1 確保 Windows 和開發板之間網路聯通
假設 Windows 和開發板之間網路已經聯通,可以通過下列方法確認。

確定開發板 IP,假設為 192.168.1.100:
使用串列埠連線開發板,執行 ifconfig 命令檢視或是配置 IP,如下圖所示:
在這裡插入圖片描述
在 Windows 命令列 ping 開發板,確保網路聯通:
啟動 Windows 命令列,執行 ping 192.168.1.100,如果下圖所示:
在這裡插入圖片描述
8.6.4.2 啟動 FileZilla 連線開發板
在 FileZilla 中輸入開發板的 IP,輸入使用者名稱 root,輸入埠號 22,就可以回車連線開發板了,如下圖:
在這裡插入圖片描述
第一次連線開發板時,會有如下提示:
在這裡插入圖片描述
連線成功後,就可以直接拖動檔案進行傳輸了:
在這裡插入圖片描述

8.7 開發板使用 NFS 根檔案系統
注意:所謂根檔案系統就是類似 Windows 的 C 盤,裡面存放有必須的 APP、庫檔案、配置檔案。通過 NFS可以把 Ubuntu 的某個目錄,當作板子的“C 盤”──Linux 中稱之為根檔案系統。

Buildroot編譯完成之後生成的rootfs.tar.bz2,可以解壓之後放到NFS伺服器上作為NFS ROOT檔案系統供開發板使用。使用NFS檔案系統,便於程式的開發除錯。所謂NFS伺服器,就是我們在VMWare上執行的Ubuntu。

使用NFS根檔案檔案系統之前時,我們一般還會在u-boot使用tftpboot命令從Ubuntu或Windows中下載核心檔案zImage和裝置樹檔案,所以:

① 使用VMware橋接網路時:
Ubuntu上既要配置NFS服務,也要配置TFTP服務。

① 使用VMware NAT網路或Docker時:
Ubuntu上要配置NFS服務,Windows要執行tftpd64程式。

對於Ubuntu,如果你按照《5.2 安裝Ubuntu軟體》來安裝過Ubuntu的軟體,那麼NSF和TFTP服務都安裝好了。

也可以手工安裝這些服務,請參考《8.4.1 在Ubuntu中安裝、配置NFS》安裝NFS服務,參考《8.4.2 Ubuntu安裝TFTP服務》安裝TFTP服務。

8.7.1 準備好檔案
使用NFS根檔案系統時,涉及3個檔案:uImage、裝置樹(比如stm32mp157c-100ask-512d-lcd-v1.dtb)、rootfs.tar.bz2(解壓到Ubuntu某個目錄,比如/home/book/nfs_rootfs)。

在U-Boot中通過tftpboot命令從Ubuntu/Windows中下載核心檔案uImage、stm32mp157c-100ask-512dlcd-v1.dtb, 設定Uboot啟動引數使用Ubuntu的某個目錄(比如/home/book/nfs_rootfs)作為根檔案系統。

拷貝核心和裝置樹檔案到 tftp 目錄:
如果使用 VMware 橋接網路,將出廠映象或者自行編譯的 zImage 和裝置樹檔案 100ask_imx6ull-14x14.dtb,拷貝到 Ubuntu 的 /home/book/tftpboot 目錄。
如果使用 VMware NAT 網路或 Docker,需要把這些檔案複製到 Windows tftpd64 程式所指定的目錄。

把根檔案系統壓縮包解壓到 NFS 目錄:
把使用 buildroot 構建得到的根檔案系統 rootfs.tar.bz2(在 buildroot2019.02/output/images 目錄
下),複製、解壓到 Ubuntu 的/etc/exports 檔案中指定的目錄裡,即複製到/home/book/nfs_rootfs 目錄
下,並解壓(注意:解壓時要用 sudo):

book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x/output/images $ cp -rf rootfs.tar ~/nfs_rootfs/
book@100ask: ~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x/output/images$ cd ~/nfs_rootfs
book@100ask:~/nfs_rootfs$ sudo tar xjf rootfs.tar
1
2
3
8.7.2 進入 uboot 介面
使用 mobaxterm 工具開啟開發板串列埠,此時將開發板上電,在列印 u-boot 時按下任意鍵進入 uboot 介面。
在這裡插入圖片描述

8.7.2.1 測試開發板與 Ubuntu/Windows 是否聯通 (1) 如果使用 VMware 橋接網路
檢視 Ubuntu 系統 IP 地址,如下圖所示在 Ubuntu 系統終端裡使用 ifconfig 檢視所有網路裝置的資訊,獲取到當前網路卡裝置的 IP 地址為 192.168.1.15 (也就意味著改 IP 地址的網段是 192.168.1.1)

在這裡插入圖片描述
先在 u-boot 中設定開發板 IP 為 192.168.1.112,然後在 u-boot 中使用 ping 命令測試開發板與 Ubuntu系統是否連通(出現“alive”就表示聯通):命令如下:

=> setenv ipaddr 192.168.1.112
=> ping 192.168.1.158
1
2
如果提示 host is alive 就表示開發板和 Ubuntu 系統可以互通,截圖示例如下所示。
在這裡插入圖片描述
(2) 如果使用 VMware NAT 網路或 Docker
只需要確保開發板和 Windows 的網路是聯通的,在 Windows 命令列中執行“ipconfig”確定 Windows IP,然後在 Uboot 中 ping Windows IP。

可能由於防火牆或防毒軟體的原因導致 Uboot 無法 ping 通 Windows,那也沒關係,繼續往下走,有問題再說。

注意:板子正在執行 Uboot 時,Windows 是無法 ping 通開發板,因為 Uboot 的網路功能不完善。如果想通過 Windows ping 開發板來驗證網路,可以讓開發板啟動進入 Linux 後再去 ping 開發板。

如果有網路問題,請參考:
《第 2 篇 環境搭建、Linux 基本操作、工具使用》
《6.4 驗證開發板網路》

8.7.2.2 使用網路啟動檔案系統
注意:Uboot 只能使用 eth0,網線必須接入 eth0,如下:
在這裡插入圖片描述
(1) 對於使用 VMware NAT 網路或 Docker
先在 Windows 啟動 tftpd64,並在該程式所指定目錄裡放入 zImage 和裝置樹檔案。
再在 Ubuntu 的/home/book/nfs_rootfs 目錄下解壓好根檔案系統。
然後在 U-Boot 控制檯執行以下命令啟動單板,假設 Windows IP 是 192.168.1.100:

=> setenv serverip 192.168.1.100 //設定伺服器的 IP 地址,這裡指的是 Windows IP
=> setenv ipaddr 192.168.1.112 //設定開發板的 IP 地址。
=> tftpboot 0xc4000000 stm32mp157c-100ask-512d-lcd-v1.dtb; tftpboot c4100000 uImage; setenv
bootargs root=/dev/nfs
nfsroot=192.168.1.158:/home/book/nfs_rootfs,vers=3,tcp,port=2049,mountport=9999 rw ip=dhcp;
bootm c4100000 - 0xc4000000
1
2
3
4
5
6
要注意的是上面第 4 條命令,必須指定“port=2049,mountport=9999”,這樣才能訪問到 Ubuntu 的 NFS目錄。

(2) 對於使用 VMware 橋接網路
先在 Ubuntu 的 TFTP 目錄中放入 zImage 和裝置樹檔案,再在/home/book/nfs_rootfs 目錄下解壓好根檔案系統。

然後在 U-Boot 控制檯執行以下命令啟動單板,假設 Ubuntu IP 是 192.168.1.224:

=> setenv serverip 192.168.1.158 //設定伺服器的 IP 地址,這裡指的是 Ubuntu 主機 IP
=> setenv ipaddr 192.168.1.112 //設定開發板的 IP 地址。
=> tftpboot 0xc4000000 stm32mp157c-100ask-512d-lcd-v1.dtb; tftpboot c4100000 uImage; setenv
bootargs root=/dev/nfs nfsroot=192.168.1.158:/home/book/nfs_rootfs,vers=3 rw ip=dhcp; bootm
c4100000 - 0xc4000000
1
2
3
4
5
在這裡插入圖片描述

-end-

全文下載:
嵌入式Linux系統開發完全手冊 第二版

線上教學網站:
https://www.100ask.net/index

百問網開發板:
https://weidongshan.tmall.com/

技術交流群(鴻蒙開發/Linux/嵌入式/驅動/資料下載)
QQ群:869222007
友情贊助
http://www.gzlzygy.com/

相關文章