當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 嵌入式客棧
[導(dǎo)讀]在做一個(gè)ZYNQ項(xiàng)目時(shí),需要實(shí)現(xiàn)嵌入式Linux與Windows電腦直連??赡軙?huì)有盆友會(huì)遇到類(lèi)似的需求,所以整理分享一下。

[導(dǎo)讀] 在做一個(gè)ZYNQ項(xiàng)目時(shí),需要實(shí)現(xiàn)嵌入式Linux與Windows電腦直連??赡軙?huì)有盆友會(huì)遇到類(lèi)似的需求,所以整理分享一下。

問(wèn)題描述

基于ZYNQ芯片設(shè)計(jì)的一塊嵌入式板子,板上運(yùn)行Linux需要將大量的數(shù)據(jù)通過(guò)網(wǎng)口傳輸給電腦。這里借用黑金AX7010開(kāi)發(fā)板示例,事實(shí)上也是這樣做實(shí)驗(yàn)的。最開(kāi)始系統(tǒng)是這樣工作的:

板子連以及電腦網(wǎng)口都連接在路由器的LAN口,路由器自動(dòng)給電腦與板子分配IP地址,板子與電腦在同一個(gè)子網(wǎng)里。從而實(shí)現(xiàn)了數(shù)據(jù)通信。這樣用是能用,就是設(shè)備總是需要帶一個(gè)路由器,這樣很不方便。有沒(méi)有辦法直連呢?就像下面這樣:

這樣就需要配置板子與電腦的IP地址在同一個(gè)網(wǎng)段內(nèi),有沒(méi)有什么辦法能夠自動(dòng)分配IP地址給板子以及電腦呢?經(jīng)過(guò)一些搜索,發(fā)現(xiàn)了這么一個(gè)非常棒的開(kāi)源組件Avahi。下面就來(lái)分享一下Avahi。

何為Avahi?

Avahi is a system which facilitates service discovery on a local network via the mDNS/DNS-SD protocol suite. This enables you to plug your laptop or computer into a network and instantly be able to view other people who you can chat with, find printers to print to or find files being shared. Compatible technology is found in Apple MacOS X (branded "Bonjour" and sometimes "Zeroconf").
Avahi is primarily targetted at Linux systems and ships by default in most distributions. It is not ported to Windows at this stage, but will run on many other BSD-like systems. The primary API is D-Bus and is required for usage of most of Avahi, however services can be published using an XML service definition placed in /etc/avahi/services.
翻譯一下:
Avahi 是一個(gè)通過(guò) mDNS/DNS-SD 協(xié)議實(shí)現(xiàn)在局域網(wǎng)發(fā)現(xiàn)服務(wù)的系統(tǒng)。從而使您能夠?qū)⒐P記本電腦或計(jì)算機(jī)連接到網(wǎng)絡(luò),并立即能夠查看可以與之會(huì)話的其他機(jī)器、查找局域網(wǎng)打印機(jī)或查找正在共享的文件。在 Apple MacOS X中存在與之兼容的技術(shù)(品牌為 “Bonjour”,也稱(chēng)為“Zeroconf” 零配置)。
Avahi 主要針對(duì) Linux 系統(tǒng),并在大多數(shù)發(fā)行版中默認(rèn)提供。目前還不支持Windows,但可以在許多其他類(lèi)似 BSD 的系統(tǒng)上運(yùn)行。主要 API 基于D-Bus實(shí)現(xiàn),并可以在/etc/avahi/services 中的 XML 文件中定義發(fā)布服務(wù)。
那么什么是mDNS/DNS-SD呢?什么又是零配置呢?

mDNS協(xié)議

mDNS是multicast DNS的縮寫(xiě),也即是多播DNS協(xié)議。
什么是DNS呢?簡(jiǎn)單打個(gè)比方就是相當(dāng)于電話簿,比如要給某人打電話,往往很難記住某個(gè)人的電話號(hào)碼,因此需要去電話簿查這個(gè)人的號(hào)碼,然后再撥過(guò)去。計(jì)算機(jī)間通信IP需要知道目標(biāo)機(jī)的IP地址,也是常常使用主機(jī)名或者某個(gè)站點(diǎn)的域名進(jìn)行訪問(wèn),但是就通信協(xié)議而言則是需要對(duì)應(yīng)機(jī)器的IP地址。因?yàn)镈NS系統(tǒng)就被設(shè)計(jì)出來(lái)了。
DNS(Domain Name Server) 是指域名系統(tǒng),是用于管理域名與IP間對(duì)應(yīng)關(guān)系的軟件系統(tǒng)。那么問(wèn)題來(lái)了,mDNS與常規(guī)的DNS又有何差異呢?
和DNS一樣,mDNS也是將域名解析為IP地址,不同的是mDNS在局域網(wǎng)級(jí)別運(yùn)行,這與全局級(jí)別運(yùn)行的常規(guī)DNS不同。它與零配置(Zeroconf)網(wǎng)絡(luò)中的DNS-SD(DNS-Service Discovery)協(xié)議結(jié)合使用。零配置網(wǎng)絡(luò)不需要手動(dòng)操作。此外,零配置網(wǎng)絡(luò)不依賴(lài)DNS服務(wù)器和DHCP服務(wù)器進(jìn)行操作。

DNS-SD協(xié)議

DNS-SD又是個(gè)什么東西呢?用來(lái)做什么的呢?DNS-SD允許客戶端獲取服務(wù)實(shí)例及其服務(wù)類(lèi)型的命名列表,并使用標(biāo)準(zhǔn)DNS查詢消息將這些服務(wù)解析為主機(jī)名。mDNS協(xié)議在RFC6762中定義,DNS-SD協(xié)議在RFC6763中定義。mDNS有多種實(shí)現(xiàn)版本,比如Bonjor,Avahi,Windows等。

怎么使能Avahi

對(duì)于ZYNQ系統(tǒng)使用petalinux-tools編譯構(gòu)建Linux內(nèi)核以及根文件系統(tǒng),使用起來(lái)非常方便。
  1. 首先在已經(jīng)建立的petalinux工程運(yùn)行根文件系統(tǒng)配置命令:
petalinux-config -c rootfs
這樣得到如下的配置界面:

2.選擇 Filesystem Packages進(jìn)入:

3.選擇network進(jìn)入下一級(jí)配置界面:

4.進(jìn)入avahi配置界面進(jìn)入:

如上圖這樣配置,保存退出,就完成avahi配置了。
5.編譯部署
petalinux-build
再運(yùn)行如下命令,生成部署鏡像文件:
petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --fpga xxxx.bit --u-boot --force
xxxx.bit是PL的FPGA所需要的bit文件。
6.運(yùn)行測(cè)試
將BOOT.BIN以及image.ub文件拷貝進(jìn)SD卡,將板子與電腦網(wǎng)口用網(wǎng)線直連,然后系統(tǒng)上電運(yùn)行,可見(jiàn)到如下類(lèi)似的內(nèi)核打印信息:
INIT: Entering runlevel: 5
Configuring network interfaces... IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
udhcpc: started, v1.29.2
run-parts: /etc/udhcpc.d/00avahi-autoipd: exit status 1
udhcpc: sending discover
random: app: uninitialized urandom read (4 bytes read)
Server is listening...
udhcpc: sending discover
macb e000b000.ethernet eth0: link up (1000/Full)
IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
udhcpc: sending discover
random: avahi-autoipd: uninitialized urandom read (4 bytes read)
"169.254.3.140"
broadcastDatagram
udhcpc: no lease, forking to background
done.
random: dbus-uuidgen: uninitialized urandom read (12 bytes read)
random: dbus-uuidgen: uninitialized urandom read (8 bytes read)
Starting system message bus: dbus.
Starting internet superserver: inetd.
Starting syslogd/klogd: done
* Starting Avahi mDNS/DNS-SD Daemon: avahi-daemon
...done.
* Starting Avahi Unicast DNS Configuration Daemon: avahi-dnsconfd
...done.
檢查板子的IP地址:
root@idaq:~# ifconfig
eth0  Link encap:Ethernet  HWaddr 00:0A:35:00:1E:53
inet6 addr: fe80::20a:35ff:fe00:1e53/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:39 errors:0 dropped:0 overruns:0 frame:0
TX packets:63 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4132 (4.0 KiB)  TX bytes:8953 (8.7 KiB)
Interrupt:27 Base address:0xb000
eth0:avahi Link encap:Ethernet  HWaddr 00:0A:35:00:1E:53
inet addr:169.254.3.140  Bcast:169.254.255.255  Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
Interrupt:27 Base address:0xb000
再檢查電腦的IP地址:

從而開(kāi)發(fā)板IP地址為169.254.3.140,電腦的IP為169.254.50.229,子網(wǎng)掩碼都是255.255.0.0,所以電腦與開(kāi)發(fā)板處于同一個(gè)子網(wǎng)中。剩下做應(yīng)用就是利用socket進(jìn)行TCP/UDP通信了。
這里對(duì)avahi的幾個(gè)配置項(xiàng)做個(gè)簡(jiǎn)要的介紹:
  • avahi-dbg:使能這個(gè)選項(xiàng)就將avahi相關(guān)的調(diào)試符號(hào)編譯進(jìn)去了。
  • libavahi-glib:將avahi引擎編譯成glib庫(kù)接口以支持GTK /GNOME
  • libavahi-client:編譯avahi client庫(kù)
  • libavahi-core:編譯avahi引擎編譯成庫(kù),將完整的 mDNS/DNS-SD棧嵌入到應(yīng)用軟件中的 API。這僅適用于嵌入式設(shè)備的開(kāi)發(fā)人員。
  • avahi-dev:多播/單播 DNS-SD框架
  • avahi-dnsconfd:mDNS/DNS-SD配置守護(hù)進(jìn)程的單播DNS服務(wù)器。avahi-dnsconfd 連接到正在運(yùn)行的avahi-daemon,并為本地 LAN 根據(jù)腳本 /etc/avahi/dnsconfd.action發(fā)送單播DNS服務(wù)。如此mDNS 就以類(lèi)似DHCP的方式配置單播 DNS 服務(wù)。
  • avahi-autoipd:avahi-autoipd 實(shí)現(xiàn)了 IPv4LL,即“IPv4 鏈路本地地址的動(dòng)態(tài)配置協(xié)議”(IETF RFC3927),是一種無(wú)需中央服務(wù)器即可從鏈路本地 169.254.0.0/16 范圍自動(dòng)配置 IP 地址的協(xié)議。主要用于缺少DHCP服務(wù)器的ad-hoc網(wǎng)絡(luò)。avahi-autoipd可以用作獨(dú)立的地址分配器或用作DHCP客戶端的插件,如果找不到DHCP服務(wù)器,它可以用作后備解決方案。
  • avahi-utils:該配置項(xiàng)將使能多個(gè)實(shí)用程序,可以使用這些命令行與Avahi守護(hù)程序交互,包括發(fā)布、瀏覽和發(fā)現(xiàn)服務(wù)。
  • libavahi-common:該配置項(xiàng)使能Avahi 通用庫(kù)。
  • avahi-daemon:Avahi mDNS/DNS-SD守護(hù)進(jìn)程實(shí)現(xiàn)了Zeroconf 架構(gòu)。該守護(hù)進(jìn)程使用mDNS/DNS-SD注冊(cè)本地 IP 地址和靜態(tài)服務(wù),并為本地程序提供兩個(gè)進(jìn)程間通信的API,以利用 avahi-daemon維護(hù)的 mDNS 記錄緩存。
    avahi-daemon 在系統(tǒng)啟動(dòng)時(shí)解釋其配置文件 /etc/avahi/avahi-daemon.conf 并從 /etc/avahi/services/*.service 讀取 XML ,這些信息可能被定義為靜態(tài) DNS-SD服務(wù)。如果在 avahi-daemon.conf 中啟用 publish-resolv-conf-dns-servers,文件 /etc/resolv.conf 也將被讀取。
  • libavahi-gobject:使能Avahi的GObject 接口庫(kù)。

總結(jié)一下

如果你使用buildroot進(jìn)行系統(tǒng)構(gòu)建,Buildroot也已經(jīng)內(nèi)置了Avahi的支持,配置也基本類(lèi)似。當(dāng)然你也可以直接下載源碼進(jìn)行交叉編譯,不過(guò)個(gè)人不建議這樣使用。
總之,利用Avahi可以方便實(shí)現(xiàn)零配置網(wǎng)絡(luò),實(shí)現(xiàn)嵌入式Linux與電腦直連,自動(dòng)分配IP地址給電腦只是一個(gè)比較簡(jiǎn)單實(shí)用的應(yīng)用,利用其庫(kù)還可以開(kāi)發(fā)出更為復(fù)雜的應(yīng)用。



本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉