1. 程式人生 > >Linux驅動-網路裝置(1)

Linux驅動-網路裝置(1)

1.Linux網路裝置驅動結構

Linux網路裝置驅動體系分為四層,從上往下依次為 網路協議介面層,網路裝置介面層,裝置驅動功能層,網路裝置與媒介層

這裡值得一提的是Linux網路裝置體系和TCP,IP協議棧之間的關係.下圖是TCP/IP結構圖

Linux網路驅動提供的是硬體介面,它服務與ARP(鏈路層)和Ip(網路層).

1.1網路協議介面層

網路協議介面層最主要的功能是給上層協議提供透明的資料包傳送和接收介面.當上層ARP或IP需要傳送資料包時,他將呼叫網路協議介面層的dev_queue_xmit()函式傳送資料包,接收資料時呼叫netif_rx()函式;

函式原型為:

     int dev_queue_xmit(struct sk_buff *skb);

     int netif_rx(struct sk_buff *skb);

1.1.1.sk_buff結構體

這裡的sk_buff(套接字緩衝區)結構體非常重要,其主要功能是用於在Linux網路裝置各層之間傳遞資料.

例如,當傳送資料包時,Linux核心的網路處理模組建立一個包含要傳輸資料的sk_buff,然後遞交給下層,各層新增不同的協議頭直至交給網路裝置傳送;反之,接收資料包就是一層層去掉協議頭.

1.2網路裝置介面層

網路裝置介面層的主要功能是為千變萬化的網路裝置定義統一,抽象的資料結構net_device結構體

,實現多種硬體在軟體層次的統一.

1.2.1 net_device結構體

1.3裝置驅動功能層

net_device結構體的成員(屬性和net_device_ops結構體中的函式指標)需要被裝置功能層賦予具體的數值和函式.

例如驅動功能函式:xxx_open(),xxx_stop()等;

由於網路資料包的接收可以由中斷觸發,因此裝置驅動功能層的另一個主體部分是中斷功能函式(讀取接收的資料包發給上層函式):xxx_interrupt(),xxx_rx()

相關推薦

Linux驅動-網路裝置(1)

1.Linux網路裝置驅動結構 Linux網路裝置驅動體系分為四層,從上往下依次為 網路協議介面層,網路裝置介面層,裝置驅動功能層,網路裝置與媒介層 這裡值得一提的是Linux網路裝置體系和TCP,IP協議棧之間的關係.下圖是TCP/IP結構圖 Linux網路驅

linux驅動基礎開發1——linux 裝置驅動基本概念

二、裝置型別 硬體是千變萬化的,沒有八千也有一萬了,就像世界上有三種人:男人、女人、女博士一樣,linux做了一個很偉大也很艱難的分類:把所有的硬體裝置分為三大類:字元裝置、塊裝置、網路裝置。 1)字元裝置:字元(char)裝置是個能夠像位元組流(類似檔案)一樣被訪問的裝置。     對字

Linux驅動開發(1)——最簡Linux驅動

#include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); MODULE_AUTHOR("TOPEET"); static int hello_init(v

linux驅動---字元裝置的註冊register_chrdev說

首先我們在註冊函式裡面呼叫了register_chrdev(MEM_MAJOR,"mem",&memory_fops),向核心註冊了一個字元裝置。 第一個引數是主裝置號,0代表動態分配,這裡的MEM_MAJOR是1。第二個引數是裝置的名字,第三個引數是檔案操作指標。 每個裝置檔案對應

《5.linux驅動開發-第1部分-5.1.驅動應該怎麼學》

《5.linux驅動開發-第1部分-5.1.驅動應該怎麼學》 第一部分、章節目錄 5.1.1.什麼是驅動1 5.1.2.什麼是驅動2 5.1.3.模組化設計 5.1.4.linux裝置驅動分類 5.1.5.驅動程式的安全性要求 5.1.6.驅動應該這麼學 第二部分、章節介紹 5.1.

linux驅動-從裝置樹中獲取platfrom_data

i2c裝置驅動一般在probe函式的開頭都會先獲取platform_data資料。 1、在沒有使用dts的kernel 驅動中, 要麼直接賦值:client->dev.platform_data = pdata;  要麼使用介面設定:platform_device

Linux系統網路裝置啟動和禁止“ifconfig eth0 up/down”命令的跟蹤

前面文章講了Linux系統的ethtool框架的一些東西,是從使用者空間可以直觀認識到的地方入手。同樣,本文從Linux系統絕大部分人都熟悉的“ifconfig eth0 up”命令來跟蹤一下此命令在核心中的發生了什麼事情。由於ifconfig啟動(up)和禁止(down)

Linux-虛擬網路裝置-veth pair

基本概念 Virtual Ethernet Cable Bidirectional FIFO Often used to cross namespaces        Linux container 中用到一個叫做veth的東西,這是一種新的裝置,專門

Linux-虛擬網路裝置-LinuxBridge

基本概念        bridge是一個虛擬網路裝置,具有網路裝置的特性(可以配置IP、MAC地址等);而且bridge還是一個虛擬交換機,和物理交換機裝置功能類似。網橋是一種在鏈路層實現中繼,對幀進行轉發的技術,根據MAC分割槽塊,可隔離碰撞,將網路的多個

Linux-虛擬網路裝置-OpenvSwitch(持續更新)

概述      OpenvSwitch,簡稱OVS是一個虛擬交換軟體,主要用於虛擬機器VM環境,作為一個虛擬交換機,支援Xen/XenServer, KVM, and VirtualBox多種虛擬化技術。 在虛擬化平臺上,OVS 可以為動態變化的端

linux驅動---字元裝置的註冊register_chrdev說起

首先我們在註冊函式裡面呼叫了register_chrdev(MEM_MAJOR,"mem",&memory_fops),向核心註冊了一個字元裝置。第一個引數是主裝置號,0代表動態分配,這裡的MEM_MAJOR是1。第二個引數是裝置的名字,第三個引數是檔案操作指標。每個

Linux虛擬網路裝置之bridge(橋)

繼前兩篇介紹了tun/tap和veth之後,本篇將介紹Linux下常用的一種虛擬網路裝置,那就是bridge(橋)。本篇將通過實際的例子來一步一步解釋bridge是如何工作的。什麼是bridge?首先,bridge是一個虛擬網路裝置,所以具有網路裝置的特徵,可以配置IP

學習Linux-4.12核心網路協議棧(1.8)——網路裝置驅動模組的載入

1.瞭解PCI匯流排 說到網路裝置驅動,就不得不說PCI匯流排,但是這個話題可深可淺,而且網上的資料也是一大堆(比如),但是對於我們來說,目前並不需要掌握很深,下面是網上找的兩張最基本的PCI工作結構圖,雖然PCI總線上可以掛接不同種類的裝置,但我們這裡只要瞭解網路裝置就夠

linux驅動開發-第11部分-5.11.網路裝置驅動介紹》

《linux驅動開發-第11部分-5.11.網路裝置驅動介紹》 第一部分、章節目錄 5.11.1.網路裝置驅動概述 5.11.2.虛擬網絡卡驅動分析1 5.11.3.虛擬網絡卡驅動分析2 5.11.4.DM9000驅動原始碼分析1 5.11.5.DM9000驅動原始碼分析2 第二部分

linux 網路裝置驅動之alloc_etherdev

最近在看網路驅動時,發現這個函式: struct net_device *netdev; netdev = alloc_etherdev(sizeof(synopGMACPciNetworkAdapter)); 順著這個函式進行追蹤: #define allo

Linux驅動開發04:塊裝置驅動網路裝置驅動

介紹 因為塊裝置驅動和網路裝置驅動實際中用得較少,所以只給出驅動模板,我也沒有具體測試,等到實際用到是再研究吧,溜了溜了。 塊裝置驅動模板 struct xxx_dev { int size; struct request_q

學習Linux-4.12核心網路協議棧(1.7)——網路裝置的初始化(struct net_device)

在linux的網路裝置裡,其中一個最關鍵的結構體應該要算net_device了,它由對應的網路裝置驅動進行建立和初始化,服務於核心網路子系統。 1. struct net_device 註釋分析 struct net_device這個結構體比較大,在瞭解它之前,我們先看一下

linux網路裝置驅動

網路裝置驅動架構 Linux網路裝置驅動程式的體系結構,依次為網路協議介面層,網路裝置介面層,提供實際功能的裝置驅動功能層以及網路裝置與媒介層。 網路協議介面層向網路層協議提供統一的資料包收發介面,不論上層協議是ARP,還是IP,都通過dev_queue_x

linux 網路裝置驅動-DM9000

所有的網路裝置驅動都必須有這個傳送方法。在系統呼叫驅動程式的xmit時,傳送的資料放在一個sk_buff結構中。一般的驅動把資料傳給硬體發出去。也有一些特殊的裝置比如loopback把資料組成一個接收資料再回送給系統,或者dummy裝置直接丟棄資料。如果傳送成功,hard_start_xmit方法裡釋放sk_

Linux下的網路裝置驅動(一)

網路裝置介面層主要是為變化多端的網路定義了一個統一且抽象的net_device,實現了多種硬體在軟體層次上的統一。網路裝置驅動主要是填充net_device的成員並註冊net_device來實現硬體操作函式和核心的掛接。通常情況下,網路裝置驅動以中斷方式接受資料,而net_device中則定義了poll_co