我們寫過很多ping問題的解決方法文章,但是最近我們發現之前用的橋接模式太複雜:需要開發板,Windows,ubuntu三者都ping通,步驟太多,很繁瑣。最近我們研究出VMware 設置成NAT模式,然後進行端口映射,只要開發板和windows能一邊ping通(比如開發板能PINGWindows或windows能PING開發板),開發板就能掛載ubuntu的文件,是怎麼做到的呢?下面將系統講解…
Windows下有很多虛擬機軟件,目前市面上流行的有VMware和VirtualBox。VMware分爲收費專業版Workstation Pro和非商用免費版Workstation Player,推薦使用Workstation Player。
首先從VMware官網(http://www.vmware.com)下載Workstation Player安裝包,或者使用我們提供的安裝包。在“網盤BSP包\01_Tools (工具)\01_Tools.zip”中。VMWare安裝軟件是:VMware-workstation-full-15.1.0-13591040.exe。
安裝方法見下圖:
VMWare安裝完成後,有兩個軟件,它們都可以使用,建議使用第2個:
① Vmware Workstation Pro:這是收費的,可以試用30天。
② Vmware Workstation 15 Player:這是免費的。
1.使用虛擬機打開Ubuntu
解壓“網盤BSP包\01_Tools (工具)\100ask-vmware_Ubuntu18.04.7z”,它是Ubuntu映像文件。
注意:
100ask-vmware_Ubuntu18.04不支持win7 32位和Windows xp電腦系統,有疑問請聯繫技術支持。
① 以管理員身份打開Vmware Workstation 15 player:如下圖所示:
② 解壓Ubuntu映像文件,然後點擊“打開虛擬機”打開前面解壓後的ubuntu文件“Ubuntu 18.04_x64.vmx”
如下圖所示:
③ 打開並點擊“播放虛擬機”啓動:
如下圖所示:
④ 第一次啓動Ubuntu時,選擇默認的“我已複製該虛擬機”,啓動後輸入密碼“123456”回車即可登錄::
注意:虛擬機默認沒有開啓小鍵盤,如果使用小鍵盤輸入,請先開啓小鍵盤。如下圖所示:
- 打開終端
我們要輸入各種命令,需要先打開終端。
點擊Ubuntu桌面左上角圖標,輸入“term”可以得到圖中藍框中的“Terminal”程序,運行它,如下圖所示。
然後就可以在裏面執行各種命令了。
- 配置網絡
重點來了,以前我們在VMware中使用橋接,這需要保證Windows、Ubuntu、開發板三者互通,而很多人的電腦有多個網卡,這涉及的網絡設置太複雜了。
現在我們使用NAT方式,這樣會簡單很多。
a. 設置Ubuntu使用NAT網絡
先關閉VMware中的Ubuntu,在VMware界面設置Ubuntu使用NAT,如下圖:
然後啓動Ubuntu,打開終端,執行ifconfig命令,確定網卡IP,如下圖所示,記住這個IP(192.168.75.128,也許你的跟它不一樣),後面要用:
b. 設置NAT網絡的端口映射
在NAT網絡下,外面的設備無法看到Ubuntu,要想開發板能訪問到Ubuntu,需要進行端口映射。
先關閉Ubuntu,再關閉VMware,才能設置。
我們需要映射這幾個端口:22(ssh端口)、111(rpc端口)、2049(nfs端口)、9999(mountd端口)。這樣,開發板訪問Windows的這些端口時,纔可以訪問到Ubuntu。
先使用管理員身份運行“虛擬網絡編輯器”,如下圖所示:
注意:如果按上述方法找不到虛擬網絡編輯器,請按如下方法打開:
如果還是找不到,請覈實是否用的是和我們一樣版本的虛擬機軟件。
然後,如下圖設置端口映射:
設置好後,啓動VMware、啓動Ubuntu,可以再打開終端,測試網絡,如下圖所示:
c. 修改Ubuntu的mountd端口
在NAT網絡下,要想開發板能通過NFS掛載Ubuntu,需要修改mountd端口爲9999
如果你還不會用vi命令,可以在Ubuntu桌面啓動終端,執行以下命令,用GUI工具修改:
sudo gedit /etc/services
命令解釋:
① 修改/etc/services:
添加2行:
mountd 9999/tcp
mountd 9999/udp
如下圖操作:
② NFS重啓:
sudo /etc/init.d/nfs-kernel-server restart
③ 查看端口:
sudo rpcinfo -p
如下圖操作:
- 配置Ubuntu
確保Ubuntu能上網之後,使用下面命令一鍵配置/初始化開發環境((其實就是安裝tftp,nfs,vim等軟件(欲知更多請閱讀腳本Configuring_ubuntu.sh),此腳本只支持Ubuntu-16.04 /Ubuntu-18.04):
book@100ask: ~ $ wget --no-check-certificate -O Configuring_ubuntu.sh https://weidongshan.coding.net/p/DevelopmentEnvConf/d/DevelopmentEnvConf/git/raw/master/Configuring_ubuntu.sh && sudo chmod +x Configuring_ubuntu.sh && sudo ./Configuring_ubuntu.sh
然後輸入book密碼和選擇對應的系統,如下圖所示:
可能會出錯:
執行命令sudo apt-get update(輸入book密碼123456後回車)解決報錯繼續安裝,再執行即可安裝成功:
book@100ask: ~ $ wget --no-check-certificate -O Configuring_ubuntu.sh https://weidongshan.coding.net/p/DevelopmentEnvConf/d/DevelopmentEnvConf/git/raw/master/Configuring_ubuntu.sh && sudo chmod +x Configuring_ubuntu.sh && sudo ./Configuring_ubuntu.sh
配置成功如下圖:
注意:如果Ubuntu無法上網,請參考後面《 配置網絡》進行設置。
- 默認不能使用root用戶登錄
我在開發過程中從沒用過root用戶,要使用root權限時可以在命令前加上“sudo”,比如“sudo ps -a”。
如果你就是喜歡用root用戶,可以按下圖操作,先給root用戶設置密碼,以後就可以用root用戶登錄了:
- 在BIOS上啓動虛擬化(virtualization )
因爲100ask-vmware_Ubuntu18.04用到了Virtualization Technology(VT)技術
大部分電腦的BIOS已經啓動了虛擬化,可以打開設備管理器確認這點,如下圖:
如果上圖中虛擬化沒有顯示爲“已啓動”,需要重啓電腦進入BIOS啓動虛擬化。各個電腦的BIOS設置界面可能不一樣,下面的步驟只是示例。
① 進入BIOS
開機或重啓電腦過程中,在自檢畫面處反覆按F2鍵(注:部分機型使用Fn+F2)進入BIOS Setup設置界面。
② 找到虛擬化菜單
用鍵盤的右方向鍵選中 “Configuration”菜單,然後使用下方向鍵選中“Intel Virtual Technology”選項並回車,如下圖所示:
③ 使能虛擬化
在彈出的菜單中,選擇“enable”並回車,如下圖所示:
④ 保存
最後按鍵盤的F10熱鍵(注:部分機型需要配合Fn+F10)調出保存對話框,選擇“Yes”保存退出並自動重啓電腦,如下圖所示:
- 關閉防火牆
步驟如下圖所示:
- 常見問題
如果Windows無法遠程登錄Ubuntu,使用Filezilla無法連接Ubuntu、開發板無法通過NFS掛載Ubuntu,那麼很可能是防火牆的問題,或是端口被佔用了。
端口被佔用時,很可能是VMware的NAT服務,可以如下關閉:
使用Ubuntu:遠程登錄、傳文件、NFS
如果照着本節操作不成功,請確認:
① 在VMware裏是否設置Ubuntu使用了NAT網絡;
② 是否使用“虛擬網絡編輯器”設置了端口映射。
③ 開發板能否PING通Windows,或是Windows能否PING通開發板,只要有一邊通就可以。
- 驗證網絡
①. 幾個概念
IP地址127.0.0.1表示的是“本機”,在Windows上使用127.0.0.1表示的是Windows機器;在開發板上使用127.0.0.1表示的是開發板;在Ubuntu裏使用127.0.0.1表示的是Ubuntu。ping 127.0.0.1是永遠成功的,它不涉及具體網卡。
Ubuntu的網絡都是使用NAT(Network Address Translation,網絡地址轉換)。
NAT是什麼意思?
舉個例子,在NAT裏,Windows就是一個愛護孩子的父親,Ubuntu就是受保護的小孩。小孩要買東西,都由他父親代勞,別人根本不知道這小孩的存在;親戚想跟小孩談話,也要經過父親中轉,親戚不能直接跟小孩接觸。
在NAT裏,Ubuntu要主動發起網絡訪問,需要經過Windows代勞,外面的設備只看到Windows發出的網絡數據;Windows收到數據的再轉發給Ubuntu。
在NAT裏,外面的設備比如開發板要訪問Ubuntu,也只能通過Windows代勞:開發板是看不到Ubuntu的,開發板是ping不通Ubuntu的。
問題來了,開發板有時候是想訪問Windows,有時候是想讓Windows代勞去訪問Ubuntu,Windows怎麼區分?通過端口映射!
比如把Windows的22端口映射到Ubuntu的22端口,當開發板通過端口22(這是SSH端口)訪問Windows的IP時,Windows就知道:哦,這22端口數據不是發給我的,是要我轉發給Ubuntu的。於是Windows就把數據轉發給Ubuntu。這樣開發板就可以通過22端口訪問Ubuntu了。
再舉一個例子,在Windows裏通過22端口訪問127.0.0.1,就是通過22端口訪問Windows自己。但是22端口被映射到Ubuntu去了,所以實際上訪問Ubuntu的22端口。
②. 驗證Ubuntu的網絡
使用NAT時,不需要我們去設置Ubuntu的網絡,它會自動獲得IP。只要你的Windows電腦可以上網,Ubuntu就可以訪問外網。
你可以在Ubuntu中執行“ping news.qq.com”,肯定可以看到有數據返回,同時按鍵盤“ctrl+c”退出ping命令,如下圖。
③. 驗證Windows和Ubuntu之間的網絡
使用VMware時,在Windows命令行可以ping通Ubuntu的IP;Ubuntu也可以ping通Windows的IP。
只要有一個方向能ping通,那證明Windows和Ubuntu之間的網絡是通的。
a. Ubuntu ping Windows:
以Ubuntu ping Windows爲例,先確定Windows IP,再在Ubuntu中ping Windows(如果Windows開了防火牆,可以無法ping通Windows,這沒關係):
怎麼確定Windows的IP?在Powershell命令行或Windows命令行中執行ipconfig,如下圖:
這時就可以在Ubuntu命令行中ping windows了,如下:
b. Windows ping Ubuntu:
如果Windows開了防火牆,Ubuntu也無法ping通Windows,但是沒關係,只要Ubuntu能ping通外網就表示網絡沒問題。
先確定Ubuntu的IP,打開終端,執行ifconfig命令,確定網卡IP,如下圖所示,記住這個IP(192.168.75.128,也許你的跟它不一樣),後面要用:
啓動Windows命令行,ping Ubuntu的IP即可,如下圖:
④ . 開發板網絡驗證
以前VMware使用橋接網絡時,Windows和Ubuntu是同等的地位,要保證Windows、Ubuntu、開發板三者互通,設置比較複雜。
現在VMware使用NAT,或是使用Docker,只需要保證Windows和開發板二者互通。複雜的情況在於有些Windows電腦有多個網卡,開發板要跟哪一個網卡互PING?列圖如下:
a. 開發板網線直接連接Windows的有線網卡,或是通過路由器連接到Windows的有線網卡:
注意:非常不建議開發板網線直連Windows。
在上圖的連接中,開發板的IP、Windows有線網卡的IP,要處於同一網段。如果開發板、Windows有線網卡無法自動獲得IP,需要自己去設置。
b. 不使用電腦的有線網卡:在下圖的連接中,開發板IP、Windows WIFI網卡的IP,要處於同一網段
驗證開發板的網絡時:
1).首先根據上面2個圖確定開發板要跟Windows的哪一個網卡互通,這個Windows網卡稱爲網卡A。
- 然後確認一下開發板IP、Windows網卡A IP是否自動獲得。如果沒有自動獲得IP,就需要手工設置IP。
3) 最後再執行ping命令驗證:只要有一方能PING通另一方就可以了,不需要兩個方向都通。
如果Windows、開發板沒有自動獲得IP,需要手工設置IP。
怎麼手工設置Windows、開發板的IP?
① Windows有多網卡時IP設置原則:
Windows的多個網卡,不能設置爲同一網段。
Windows下可能有多個網卡:有線網卡、WIFI網卡。Windows使用WIFI網卡上網時,它的IP一般是自動獲得的,我們不能去設置。
如果我們的開發板要跟Windows有線網卡互通,這時要注意:手工設置Windows有線網卡IP時,它不能跟WIFI網卡處於同一網段。比如WIFI網卡是http://192.168.1.xxx,有線網卡的IP就應該設置爲192.168.2.yy。
② 手工設置Windows IP:
如果在Windows命令行下執行ipconfig,發現網卡A沒有IP,如下圖手工設置:
③ 手工設置開發板IP:
開發板的IP設置方法很簡單,打開串口連接開發板,啓動開發板進入Linux,執行如下命令即可:
ifconfig eth0 192.168.1.123 // 假設設置開發板IP爲192.168.1.123
注意:這樣手工設置的開發板IP在下次重啓後無效,又需要再次設置。
設置好後,就可以在Windows命令行ping開發板的IP;或是在開發板串口裏ping Windows網卡A的IP。只有有一個方向通,就表示沒問題了。
④ 遠程登錄Ubuntu
安裝、運行MobaXterm,如下建立Session:
按上圖操作後,在MobaXterm左側就可以看到這項,雙擊它就可以登錄Ubuntu,然後就可以執行各種Linux命令了:
⑤ Windows和Ubuntu傳文件
雙擊打開FileZilla後,按下圖操作:
在Filezilla中,左邊是Windows文件,右邊是Ubuntu的文件,如下圖:
⑥ 開發板掛載Ubuntu目錄
首先要找出Windows的IP,假設是192.168.1.17(確定IP的方法見後面);然後還要確保開發板能ping通Windows,最後在開發板上就可以執行以下命令掛載NFS了:
mount -t nfs -o nolock,vers=3,port=2049,mountport=9999 192.168.1.17:/home/book/nfs_rootfs /mnt
注意:必須指定port爲2049,mountport爲9999。
注意:作爲初學者,可能你連串口怎麼接都還不會,所以這個命令可以先不測試。
怎麼確定Windows的IP?在Powershell命令行Window命令行中執行ipconfig,如下圖:
**加運營小助手微信:13163769879 可加入微信羣與韋東山老師交流