客戶在使用啟揚(yáng)板卡的過(guò)程中提出要求開(kāi)發(fā)板支持網(wǎng)口熱插拔自動(dòng)獲取ip地址的需求。
啟揚(yáng)工程師了解到需求后快速確定了解決思路:
通過(guò)ifplugd工具監(jiān)聽(tīng)網(wǎng)口熱插拔信息,并且執(zhí)行指定腳本,腳本中使用udhcpc工具自動(dòng)獲取ip地址。
接下來(lái)將對(duì)操作過(guò)程進(jìn)行介紹與分析。
編譯環(huán)境準(zhǔn)備?
QIYANG
主機(jī):ubuntu16.04
編譯器:arm-linux-gnueabihf-gcc,版本4.7
開(kāi)發(fā)板環(huán)境:ARM32
1
移植libdaemon
因?yàn)閕fplugd依賴libdaemon庫(kù),所以我們需要先編譯daemon。
筆者這里選擇daemon的版本是官方git下來(lái)的版本,git鏈接如下:
git clone git://git.0pointer.de/libdaemon
git下來(lái)之后先執(zhí)行./bootstrap.sh腳本,此腳本會(huì)根據(jù)配置環(huán)境自動(dòng)生成configure等編譯相關(guān)文件,生成之后配置
./configure--host=arm-linux-gnueabihf--prefix=/home/ylook/Tools/libdaemon/build,
腳本執(zhí)行完成之后會(huì)檢查配置等,這里會(huì)出現(xiàn)一個(gè)報(bào)錯(cuò):
checking whether setpgrp takes no argument... configure: error: cannot check setpgrp when cross compiling
遇到這個(gè)報(bào)錯(cuò)可以在之前配置的configure中加入ac_cv_func_setpgrp_void=yes,即可解決。
最后通過(guò)make && make install會(huì)將所需的lib以及include文件生成到build文件夾下。
注意:最后用file命令檢查一下文件架構(gòu),防止誤用X86的庫(kù)。
2
移植ifplugd
本次使用的編譯器是4.7版本,因?yàn)榘姹据^低,所以ifplugd選擇的也是老版本——ifplugd-0.14.tar.gz。
編譯過(guò)程需要daemon的庫(kù)和頭文件,筆者為了方便直接將庫(kù)和頭文件放到編譯器的頭文件與庫(kù)中,準(zhǔn)備完畢后直接解壓文件,
隨后配置./configure --host=arm-linux-gnueabihf --prefix=/home/ylook/Tools/ifplugd-0.14/build
這里會(huì)報(bào)lynx的錯(cuò)誤,可直接在原先配置的configuer后添加“--disable-lynx”,就可解決,
即修改為./configure--host=arm-linux-gnueabihf--prefix=/home/ylook/Tools/ifplugd-0.14/build/ --disable-lynx,;
此外還會(huì)報(bào)“ undefined reference to rpl_malloc”錯(cuò)誤,解決方式是修改config.h.in,去掉其中的malloc。
配置完成后make && make install,同樣會(huì)在build目錄下生成我們需要的二進(jìn)制文件。
注意:為了避免錯(cuò)誤,最后依舊是用file命令檢查文件架構(gòu),確認(rèn)采用的是否為arm架構(gòu)。
3
配置相關(guān)環(huán)境
配置環(huán)境過(guò)程中,啟揚(yáng)開(kāi)發(fā)板需要daemon的庫(kù)文件以及編譯出來(lái)的ifplugd二進(jìn)制文件。我們將daemon庫(kù)文件拷貝到/usr/lib下,二進(jìn)制文件拷貝到/usr/sbin下,輸入ifplugd -h命令可以看到成功運(yùn)行。
根據(jù)help信息,我們可以用以下兩個(gè)命令監(jiān)聽(tīng)兩個(gè)網(wǎng)口:
ifplugd -i eth0 -r /etc/network/if.sh
ifplugd -i eth1-r /etc/network/if.sh
監(jiān)聽(tīng)兩個(gè)網(wǎng)口并且執(zhí)行后面的腳本文件,如果你的文件系統(tǒng)里有/etc/network/interface文件,需要將里面的auto改為allow-hotplug。
而if.sh里面的內(nèi)容就是簡(jiǎn)單的檢測(cè)并且dhcp。
最后我們可以將上面兩個(gè)命令設(shè)置開(kāi)機(jī)自啟動(dòng),這樣就會(huì)自動(dòng)up兩個(gè)網(wǎng)口,哪怕沒(méi)有插網(wǎng)線也是準(zhǔn)備狀態(tài),當(dāng)插入網(wǎng)線后就會(huì)自動(dòng)獲取ip地址。
注意可能會(huì)出現(xiàn)延遲,可以稍等一下查看。
-
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5682瀏覽量
104818
發(fā)布評(píng)論請(qǐng)先 登錄
【HZ-T536開(kāi)發(fā)板免費(fèi)體驗(yàn)】開(kāi)箱評(píng)測(cè)
熱插拔算力集群
如何選擇可靠的熱插拔?連接器熱插拔防護(hù)等級(jí)詳解
【ELF 2學(xué)習(xí)板試用】ELF 2開(kāi)發(fā)板的鏡像燒錄與網(wǎng)線連接配置
怎么綁定IP地址和MAC地址
android如何獲取本機(jī)ip地址及ip歸屬地
PCIe熱插拔機(jī)制介紹

熱插拔是什么意思
穩(wěn)健的熱插拔設(shè)計(jì)

熱插拔電源是什么意思
熱插拔電源接口定義是什么
面向熱插拔應(yīng)用的MOSFET

IP地址與NAT技術(shù)的結(jié)合與應(yīng)用

評(píng)論