1、對一個設備驅(qū)動而言,主要從兩個方面進行著手,一個是控制流,一個是數(shù)據(jù)流。
專業(yè)從事網(wǎng)站設計、成都網(wǎng)站設計,高端網(wǎng)站制作設計,微信小程序定制開發(fā),網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術團隊竭力真誠服務,采用HTML5建站+CSS3前端渲染技術,響應式網(wǎng)站開發(fā),讓網(wǎng)站在手機、平板、PC、微信下都能呈現(xiàn)。建站過程建立專項小組,與您實時在線互動,隨時提供解決方案,暢聊想法和感受。控制流就是如何控制網(wǎng)絡設備,數(shù)據(jù)流則說的是報文的收發(fā)流程。
2、網(wǎng)絡設備可以是Linux服務器的網(wǎng)卡,也可以是嵌入式設備的cpu或者交換芯片。
3、控制流分為低端的串行總線,如SMI、UART、SPI、USB等,也可以是高速總線,如PCI、PCIE總線等。
4、數(shù)據(jù)流則包含接收報文、發(fā)送報文,關鍵的內(nèi)核數(shù)據(jù)結(jié)構(gòu)是skb.
1、 網(wǎng)絡設備的注冊
2、內(nèi)核怎么知道調(diào)用驅(qū)動哪個發(fā)送函數(shù)呢?
解答:在向內(nèi)核注冊網(wǎng)絡設備時,會把驅(qū)動的實際發(fā)送函數(shù)掛接在ndo_start_xmit這個函數(shù)指針。
1、接收報文的流程如下:
2、驅(qū)動收包任務的處理流程:
1、驅(qū)動發(fā)包處理。
發(fā)包時,不用任務,而是在內(nèi)核調(diào)用驅(qū)動的發(fā)包函數(shù)中直接發(fā)送。
實現(xiàn)思路是,將skb中的data字段和長度信息得到,然后掛在芯片的BD結(jié)構(gòu)體上,然后啟動發(fā)送,硬件就會發(fā)送出去。
1、總體思路:
軟硬件結(jié)合療效好,再結(jié)合指令cache,優(yōu)化收發(fā)流程處理、多核并發(fā)收發(fā)包(轉(zhuǎn)發(fā)核直接使用輪詢而不用中斷收發(fā)包)。
1、增、刪、改、查接口:
分配skb: struct sk_buff *dev_alloc_skb(unsigned int length)
釋放skb: void dev_kfree_skb_any(struct sk_buff *skb)
修改skb: 尾部增加內(nèi)容:skb_put
尾部減少內(nèi)容:skb_trim
頭部增加內(nèi)容:skb_push
頭部減少內(nèi)容:skb_pull
查找skb的頭部空間:skb_headroom
查找skb的尾部空間:skb_tailroom