搜尋此網誌

網頁

2010年4月11日 星期日

Linux Network Device Driver

1. 透過TCP/IP做I/O傳輸(使用到network-subsystem)的裝置(ex:USB to USB傳輸線)就可定義為Network device ,並非限制一定要是網路卡。

2. network device 不一定等於網路卡裝置。

3. network subsystem提供TCP/IP Stack給device 使用。

4. TCP/IP 的實作分為4層: BSD Socket 、 inet Sockeet 、TCP、IP,凡透過這條路徑傳遞Data均符合network device的定義。

5. 奇怪的應用: lcd panel 改走tcp/ip傳輸,遠端主機將data丟至lcd panel所對應的ip addr就會在lcd panel上顯示圖片。

6. 學習如何使用API在User application來利用TCP/IP傳輸資料。

7. Socket Programing : http://cs.baylor.edu/~donahoo/practical/CSockets/

8. 2.4.14 kernel ::bonding.c 為一個頻寬合併的driver。

9. struct net_device中函數指標 hard_start_xmit(struct sk_buff *skb, struct netdevice* dev)
中變數skb 指向網路封包,dev指向device driver的net_device資料結構,當有資料傳送到這個裝置的ip addr或者是這個ip addr 有資料要送出去時,kernel會callback此函數指標所指的函數。

10. 函數指標 get_stats指向一個負責維護網路資訊的函數,driver的作者須自行維護,當有查詢命令過來kernel會callback此函數,將網路資訊(net_device_stat)return回去。

11. net_device結構中,name[IFNAMESIZ]存放的是裝置的名稱,啟動一個網路裝置: ifconfig lcd0 192.168.1.100 =>kernel會自動callback open 將裝置初始化。

12. 控制網路卡的driver為NIC。

13. 經由TCP/IP 做I/O是定義為由user space 到 kernel space,kernel space to hardware則未定義。

14. skbuff 指標指向網路封包資料的起始位址。

15. dev_queue_xmit 的實作在 /net/core/dev.c ,為上層為了傳送封包給下層時使用。

16. tx_timeout 的用途? 進行錯誤處理 <=講義(二)投影片p.80

17. 系統呼叫netif_stop_queue(),會將網路介面強制關閉,此外亦可使用tx_timeout來做關閉。

18. 被關閉後的網路介面需呼叫netif_wake_queue()來將介面重新啟動。

19. 接收封包分兩階段: (1). 從硬體拿/傳遞資料,depend on 硬體的實作是否有interrupt handler
ex: 按下按鈕之後啟動interrupt handler 將按鍵資料存入一個封包中,再將封包丟至IP層(上層),IP層會做處理,丟到User space process。 (2) 參考講義((二)投影片p.82

20. kernel目前約有110多個sub-system,目的只有處理I/O,觀察註冊含樹,fops...等等資訊來掌握sub-system架構也等同於掌握了kernel內部的架構。

21. IP層以下並沒有區分 TCP / UDP協定。

22. 在分層架構下,Driver 工程師並不需要了解tcp/ip的內部api實作,即可完成network device driver的撰寫。

沒有留言:

張貼留言