ethtool 在 Linux 中的實現框架和應用

2021-01-12 開源中國

簡介: Linux 的一個顯著特點就是其強大的網絡功能,Linux 幾乎支持所有的網絡協議,並在這些協議基礎上提供了豐富的應用。對 Linux 網絡管理的重要性不言而喻,這些管理依賴於網絡工具,比如最常用的 ifconfig,route,ip,ethtool 等,其中 ethtool 提供了強大的網卡及網卡驅動管理能力,其具體的實現框架和網絡驅動程序及網絡硬體關係緊密,容易修改和擴展,能夠為 Linux 網絡開發人員和管理人員提供對網卡硬體,驅動程序和網絡協議棧的設置,查看以及及調試等功能。

Linux 網卡驅動程序對 ethtool 的支持和實現

從典型的乙太網控制器說起

網卡工作在 OSI 網絡體系的最後兩層,物理層和數據鏈路層,物理層定義了數據傳送與接收所需要的電與光信號、線路狀態、時鐘基準、數據編碼和電路等,並向數據鏈路層設備提 供標準接口。物理層的晶片稱之為 PHY。數據鏈路層則提供尋址機構、數據幀的構建、數據差錯檢查、傳送控制、向網絡層提供標準的數據接口等功能。乙太網卡中數據鏈路層的晶片稱之為 MAC 控制器。很多網卡的這兩個部分是做到一起的。他們之間的關係是 PCI 總線接 MAC 總線,MAC 接 PHY,PHY 接網線(當然也不是直接接上的,還有一個變壓裝置)。

一般地,一個典型的乙太網控制器的基本結構如圖 1 所示:

圖 1. 一個典型的符合 IEEE802.3 標準的的乙太網控制器結構圖

數據鏈路層 MAC 是 Media Access Control 的縮寫,即媒體訪問控制子層協議。該協議位於 OSI 七層協議中數據鏈路層的下半部分,主要負責控制與連接物理層的物理介質。在發送數據的時候,MAC 協議可以事先判斷是否可以發送數據,如果可以發送將給數據加上一些控制信息,最終將數據以及控制信息以規定的格式發送到物理層;在接收數據的時候,MAC 協議首先判斷輸入的信息並是否發生傳輸錯誤,如果沒有錯誤,則去掉控制信息發送至 LLC 層。乙太網 MAC 由 IEEE-802.3 乙太網標準定義。

物理層 PHY 是物理接口收發器,它實現物理層。包括 MII/GMII(介質獨立接口)子層、PCS(物理編碼子層)、PMA(物理介質附加)子層、 PMD(物理介質相關)子層、MDI 子層。

MII 即媒體獨立接口 , 「媒體獨立」表明在不對 MAC 硬體重新設計或替換的情況下,任何類型的 PHY 設備都可以正常工作。包括分別用於發送器和接收器的兩條獨立信道。每條信道都有自己的數據、時鐘和控制信號。MII 數據接口總共需要 16 個信號,包括 TX_ER,TXD<3:0>,TX_EN,TX_CLK,COL,RXD<3:0>,RX_EX,RX_CLK,CRS,RX_DV 等。

RMII (Reduced Media Independant Interface ) 是簡化的 MII 接口 ,在數據的收發上它比 MII 接口少了一倍的信號線,所以它一般要求是 50 兆的總線時鐘 。RMII 一般用在多埠的交換機,它不是每個埠安排收、發兩個時鐘,而是所有的數據埠公用一個時鐘用於所有埠的收發 ,這裡就節省了不少的埠數目。RMII 的一個埠要求 7 個數據線 ,比 MII 少了一倍,所以交換機能夠接入多一倍數據的埠。和 MII 一樣,RMII 支持 10 兆和 100 兆的總線接口速度 。

GMII(Gigabit MII) 是千兆網的 MII 接口,這個也有相應的 RGMII 接口,表示簡化了的 GMII 接口。GMII 採用 8 位接口數據,工作時鐘 125MHz,因此傳輸速率可達 1000Mbps 。同時兼容 MII 所規定的 10/100 Mbps 工作方式。

MII 管理接口是個雙信號接口,一個是時鐘信號 MDC,另一個是數據信號 MDIO。通過管理接口,上層能監視和控制 PHY 的寄存器。PHY 裡面的部分寄存器是 IEEE 定義的,這樣 PHY 把自己的目前的狀態反映到寄存器裡面,MAC 通過管理接口不斷的讀取 PHY 的狀態寄存器以得知目前 PHY 的狀態,例如連接速度,雙工的能力等。當然也可以通過管理接口設置 PHY 的寄存器達到控制的目的,例如流控的打開關閉,自協商模式還是強制模式等,這也是 ethtool 的工作原理。

MDIO/MDC,即 PHY 管理接口串行通信總線,該總線由 IEEE 通過乙太網標準 IEEE 802.3 的若干條款加以定義。MDIO 是一種簡單的雙線串行接口,將管理器件 ( 如 MAC 控制器、微處理器 ) 與具備管理功能的收發器 ( 如多埠吉比特乙太網收發器或 10GbE XAUI 收發器 ) 相連接,從而控制收發器並從收發器收集狀態信息。可收集的信息包括連結狀態、傳輸速度與選擇、斷電、低功率休眠狀態、TX/RX 模式選擇、自動協商控制、環回模式控制等。除了擁有 IEEE 要求的功能之外,收發器廠商還可添加更多的信息收集功能。

MDC 則是管理數據的時鐘輸入,最高速率可達 8.3MHz。MDIO 是管理數據的輸入輸出雙向接口,數據是與 MDC 時鐘同步的。MDIO 的工作流程為:

MDIO 接口在沒有傳輸數據的空閒狀態(IDLE)數據線 MDIO 處於高阻態。 MDIO 出現一個 2bit 的開始標識碼 (01) 一個讀 / 寫操作開始。 MDIO 出現一個 2bit 數據來標識是讀操作 (10) 還是寫操作 (01)。 MDIO 出現一個 5bit 數據標識 PHY 的地址。 MDIO 出現一個 5bitPHY 寄存器地址。 MDIO 需要 2 個時鐘的訪問時間。 MDIO 串行讀出 / 寫入 16bit 的寄存器數據。 MDIO 恢復成 IDLE 狀態,同時 MDIO 進入高阻狀態。

註:以上內容部分摘選自網際網路。

Linux 設備驅動程序中對 ethtool 的支持

目前幾乎所有的網卡驅動程序都有對 ethtool 的支持,其框架如圖 2 所示,ethtool 框架包含內核空間和用戶空間兩部分:用戶空間的部分負責將 ethtool 命令發送到內核,並接收命令的執行結果;內核空間的部分根據相應的命令字,通過 MDIO/MDC 讀寫 MII 寄存器,實現對網卡的管理,並把執行結果傳回用戶空間。由於 Linux 網絡驅動程序是一個複雜而龐大的體系,這裡只介紹驅動程序中對 MII 寄存器的定義,對 MDIO/MDC 的支持以及驅動程序中實現如何實現 ethtool 功能部分。

圖 2.ethtool 在 Linux 中的實現框架

IEEE 802.3 規定的 MII 寄存器

關於 MII/GMII 接口 PHY 寄存器的定義在 802.3 的 22.2.4 Management functions. 章節中,如該章節中的 Table 22 – 6 和 Table 22 – 7(即本文的圖 3 和圖 4,均出自 http://standards.ieee.org/getieee802/download/802.3-2008_section2.pdf)所 示,

圖 3. IEEE802.3 定義的 MII 管理寄存器集

可以看到寄存器分為基本集和擴展集,基本集的定義因 GMII 和 MII 而不同,對於 MII, 基本集包括寄存器 0 控制寄存器和 1 狀態寄存器,而對於 GMII;基本集包括寄存器 0、1 和 15。控制寄存器 0 和狀態寄存器 1 的定義如圖 3 所示:

圖 4. IEEE802.3 定義的寄存器 0 控制寄存器和 1 狀態寄存器

對寄存器 0 和寄存器 1 的讀寫可以實現對網卡的管理,清單 1 列出了部分 PHY 管理寄存器以及控制寄存器和狀態寄存器的各個 bit 的定義。

清單 1,/kernel/drivers/net/Mii.h, 定義 PHY 管理寄存器


#define MII_BMCR 0x00 /* Basic mode control register */ #define MII_BMSR 0x01 /* Basic mode status register */ #define MII_PHYSID1 0x02 /* PHYS ID 1 */ #define MII_PHYSID2 0x03 /* PHYS ID 2 */ #define MII_ADVERTISE 0x04 /* Advertisement control reg */ #define MII_LPA 0x05 /* Link partner ability reg */ #define MII_EXPANSION 0x06 /* Expansion register */ #define MII_CTRL1000 0x09 /* 1000BASE-T control */ ... /* Basic mode control register. */ #define BMCR_RESV 0x003f /* Unused... */ #define BMCR_SPEED1000 0x0040 /* MSB of Speed (1000) */ #define BMCR_CTST 0x0080 /* Collision test */ #define BMCR_FULLDPLX 0x0100 /* Full duplex */ #define BMCR_ANRESTART 0x0200 /* Auto negotiation restart */ #define BMCR_ISOLATE 0x0400 /* Disconnect DP83840 from MII */ #define BMCR_PDOWN 0x0800 /* Powerdown the DP83840 */ #define BMCR_ANENABLE 0x1000 /* Enable auto negotiation */ #define BMCR_SPEED100 0x2000 /* Select 100Mbps */ #define BMCR_LOOPBACK 0x4000 /* TXD loopback bits */ #define BMCR_RESET 0x8000 /* Reset the DP83840 */ /* Basic mode status register. */ #define BMSR_ERCAP 0x0001 /* Ext-reg capability */ #define BMSR_JCD 0x0002 /* Jabber detected */ #define BMSR_LSTATUS 0x0004 /* Link status */ #define BMSR_ANEGCAPABLE 0x0008 /* Able to do auto-negotiation */ #define BMSR_RFAULT 0x0010 /* Remote fault detected */ #define BMSR_ANEGCOMPLETE 0x0020 /* Auto-negotiation complete */ #define BMSR_RESV 0x00c0 /* Unused... */ #define BMSR_ESTATEN 0x0100 /* Extended Status in R15 */ #define BMSR_100FULL2 0x0200 /* Can do 100BASE-T2 HDX */ #define BMSR_100HALF2 0x0400 /* Can do 100BASE-T2 FDX */ #define BMSR_10HALF 0x0800 /* Can do 10mbps, half-duplex */ #define BMSR_10FULL 0x1000 /* Can do 10mbps, full-duplex */ #define BMSR_100HALF 0x2000 /* Can do 100mbps, half-duplex */ #define BMSR_100FULL 0x4000 /* Can do 100mbps, full-duplex */ #define BMSR_100BASE4 0x8000 /* Can do 100mbps, 4k packets */

通過 MDC/MDIO 讀寫 MII 寄存器的具體實現

在本文的前面部分介紹過 MDC/MDIO 的工作流程,網卡驅動程序中的 MDIO 讀寫函數 mdio_read 和 mdio_write,也就是清單 3 中的函數指針的具體實現是在各個網卡的驅動程序文件中完成的,都遵從 IEEE802.3 MDIO 的幀格式。典型的幀格式是第 22 條款中定義的格式:

圖 5.IEEE802.3 條款 22 定義的 MDIO 幀格式 域 長度(bit) 說明 ST 2bits 01b OP 2bits 操作碼,寫為 01b,讀為 10b PHYADR 5bits PHY ID REGADR 5bits 寄存器地址 TA 2 bits 狀態轉換域,讀操作為 X0b, 寫操作為 10b DATA 16 bits 數據

在驅動程序中實現 ethtool 功能

在 kernel/include/linux/ethtool.h 定義了結構體 ethtool_ops,這個結構體的所有成員都是函數指針類型,定義了 ethtool 可以實現的功能,該結構體成員變量較多,在這裡就不列出代碼清單;同時,在結構體 net_device 中也有成員變量 ethtool_ops 如清單 2 所示,

清單 2,kernel/include/linux/NetDevice.h, net_device 中成員變量 ethtool_ops

struct net_device { ... const struct ethtool_ops *ethtool_ops; ... }

網卡驅動程序需要初始化 ethtool_ops 並且實現其定義的函數功能,從而實現對 ethtool 的支持,以 Dm9000.c 為例。

清單 3,kernel/drivers/net/Dm9000.c,DM9000 驅動程序對 ethtool 的支持

static const struct ethtool_ops dm9000_ethtool_ops = { .get_drvinfo = dm9000_get_drvinfo, .get_settings= dm9000_get_settings, .set_settings = dm9000_set_settings, .get_msglevel = dm9000_get_msglevel, .set_msglevel = dm9000_set_msglevel, .nway_reset= dm9000_nway_reset, .get_link = dm9000_get_link, .get_eeprom_len = dm9000_get_eeprom_len, .get_eeprom = dm9000_get_eeprom, .set_eeprom= dm9000_set_eeprom, .get_rx_csum= dm9000_get_rx_csum, .set_rx_csum= dm9000_set_rx_csum, .get_tx_csum= ethtool_op_get_tx_csum, .set_tx_csum= dm9000_set_tx_csum, }; ... ndev->ethtool_ops = &dm9000_ethtool_ops; ...

清單 3 中的各個函數在 DM9000 的驅動程序中均有實現,比如如果需要查看當前網絡的連接情況,可以通過 dm9000_get_link 獲得,函數的具體實現如清單 4:

清單 4,dm9000_get_link

static u32 dm9000_get_link(struct net_device *dev) { board_info_t *dm = to_dm9000_board(dev); u32 ret; if (dm->flags & DM9000_PLATF_EXT_PHY) ret = mii_link_ok(&dm->mii); else ret = dm9000_read_locked(dm, DM9000_NSR) & NSR_LINKST ? 1 : 0; return ret; } kernel/drivers/net/Mii.c int mii_link_ok (struct mii_if_info *mii) { /* first, a dummy read, needed to latch some MII phys */ mii->mdio_read(mii->dev, mii->phy_id, MII_BMSR); if (mii->mdio_read(mii->dev, mii->phy_id, MII_BMSR) & BMSR_LSTATUS) return 1; return 0; }

可以看到最終的實現還是通過 MDIO/MDC 讀取 PHY 寄存器得到。

除了管理網卡的命令,ethtool 還有還有其它擴展的功能,ethtool 的框架十分有利於新功能的擴展,開發人員可以在這個框架裡加入自己想要的功能來實現對除了網卡管理的其它功能,事實上,現在的 ethtool 已經提供了一些其它的功能,比如用來實現網卡 Firmware 的刷寫和更新,對網絡驅動程序日誌的控制等,這些新功能對於調試程序,修正錯誤是十分有利的。

清單 5, 部分 ethtool 的擴展功能:firmware 更新和修改日誌級別


ethtool -f|--flash DEVNAME FILENAME ethtool -s|--change DEVNAME msglvl %d

使用 ethtool 配置和管理網卡

上一節主要介紹了 ethtool 實現的基礎和方法,本節將主要介紹 ethtool 的一些用法,主要集中在 ethtool 在配置和管理網卡方面的用法。

了解 ethtool 用法最好的方法是查看 ethtool 的幫助信息「ethtool -h」 或者 「man ethtool」,由於幫助信息很多,這裡就不一一列出了,將會舉例一些實際的應用例子代替。

實例 1,利用 ethtool 來查看網卡接口 eth4 的信息

清單 6,查看網卡的接口信息   

root@IMMV2-DEV4:~# ethtool eth4 Settings for eth4: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised auto-negotiation: Yes Speed: 100Mb/s Duplex: Full Port: Twisted Pair PHYAD: 1 Transceiver: internal Auto-negotiation: on Supports Wake-on: g Wake-on: g Link detected: yes

實例 2,關閉網卡的自動協商並且查看修改結果。

清單 7,關閉網卡的自動協商並且查看修改結果

root@IMMV2-DEV4:~# ethtool -s eth4 autoneg off root@IMMV2-DEV4:~# ethtool eth4 Settings for eth4: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supports auto-negotiation: Yes Advertised link modes: Not reported Advertised auto-negotiation: No Speed: 100Mb/s Duplex: Full Port: Twisted Pair PHYAD: 1 Transceiver: internal Auto-negotiation: off Supports Wake-on: g Wake-on: g Link detected: yes

實例 3,關閉網卡的自動協商並且修改網卡的速率為 10Mb/s

清單 8,關閉網卡的自動協商並修改網卡速率為 10Mb/s

root@IMMV2-DEV4:~# ethtool -s eth4 autoneg off speed 10 root@IMMV2-DEV4:~# ethtool eth4 Settings for eth4: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supports auto-negotiation: Yes Advertised link modes: Not reported Advertised auto-negotiation: No Speed: 10Mb/s Duplex: Full Port: Twisted Pair PHYAD: 1 Transceiver: internal Auto-negotiation: off Supports Wake-on: g Wake-on: g Link detected: yes

ethtool 的其它功能可以根據其幫助信息規定的語法來實現,這裡就不一一列舉。

擴展 ethtool

根據 NIC 的一些特性,可以擴展 ethtool 來完成對網卡特殊功能的支持,一個典型的擴展應用就是增加 ethtool 對 SideBand 的支持功能,有關 SideBand 的介紹可以參考 IBM developerWorks 《淺談 NCSI 及其在 Linux 上的實現

》。圖 6 是一個通過添加自定義的 cmd 和對應的實現函數來完成 SideBand 的 select_channel,enable_channel 及 disable_channel 等功能的框圖。以 select_channel 為例,可以通過如下的步驟來實現。

圖 6, 擴展 ethtool 的 sideband 管理功能 ethtool 的在用戶空間和內核空間同時添加命令字 ETHTOOL_SELCHANNEL; 在 ethtool.ops 中添加與 ETHTOOL_SELCHANNEL 相對應的執行函數 ethtool_select_channel; 在 dev_ethtool 函數中實現 ethtool_select_channel() 功能,這個函數的功能是利用協議棧的包發送接口向 NIC 的 mac 層發送包裝後的 NCSI 命令協議包,並且接受相應的回應 , 類似的對於 ethtool_enable_channel(),ethtool_disable_channel 都可以按照相同的方法來擴展,可以看出 ethtool 框架的擴展性是很好的,有利於開發人員根據實際需要來量身定製。

總結

ethtool 是一個 Linux 下功能強大的網絡管理工具,本文首先介紹了這個工具的實現原理和方法,重點介紹了 IEEE802.3.22 中的 MII 管理寄存器和 MDIO/MDC 標準以及 Linux 網絡驅動程序中對 ethtool 的支持,然後實例說明了利用這個工具管理網卡的方法,最後介紹了在 ethtool 框架上擴展 SideBand 管理的實例,可以作為廣大開發人員的一個參考。

原文出處:

IBM developerWorks

相關焦點

  • ethtool 原理介紹和解決網卡丟包排查思路
    這次想分享的話題是比較常見伺服器網卡丟包現象排查思路,如果你是想了解點對點的丟包解決思路涉及面可能就比較廣,不妨先參考之前的文章 如何使用 MTR 診斷網絡問題[2],對於 Linux 常用的網卡丟包分析工具自然是 ethtool。ethtool 用於查看和修改網絡設備(尤其是有線乙太網設備)的驅動參數和硬體設置。
  • 10個你需要了解的Linux網絡和監控命令
    【IT168 技術】我下面列出來的10個基礎的每個linux用戶都應該知道的網絡和監控命令。網絡和監控命令類似於這些:hostname, ping, ifconfig, iwconfig, netstat, nslookup, traceroute, finger, telnet, ethtool 用於查看linux伺服器ip地址,管理伺服器網絡配置,通過 telnet 和ethernet建立與linux之間的網絡連結,查看linux的伺服器信息等。
  • 如何自動喚醒和關閉 Linux
    # crontab -e -u root# m h  dom mon dow   command15 23 * * * /sbin/shutdown -h now以下示例僅在周一至周五運行:15 23 * * 1-5 /sbin/shutdown -h now 您可以為不同的日期和時間創建多個 cron
  • golang中實現linux管道
    在linux中通過管道能夠讓一個命令的輸出變為另一個命令的輸入,下面是一個典型的例子:> cat words | sort | uniq  apple  bye  hello  zebra下面我們來用golang實現一個簡單的命令
  • ethtool 命令詳解
    ethtool 是用於查詢及設置網卡參數的命令。
  • Linux 網絡層收發包流程及 Netfilter 框架淺析
    在 TCP/IP 協議框架體系內,下層協議對上層協議透明,即上層協議無需關注下層協議的實現邏輯和機制。2.2 數據包協議分層在 TCP/IP 協議框架體系內,上層協議報文被作為下層協議的數據載荷(Data Payload),存儲在下層協議的數據段區域中進行傳輸。
  • 如何在Web應用中實現Velocity 與Struts2框架相互集成的應用實例
    軟體項目實訓及課程設計指導——如何在Web應用系統中實現Velocity 與Struts2框架相互集成的應用實例1、Struts 2應用框架提供對 Velocity 和 FreeMarker 模板引擎的支持在Struts 2應用框架中不僅繼續保留有對Velocity
  • 基於ARM11的嵌入式Linux NAND FLASH模擬U盤掛載分析與實現
    關鍵詞:ARM11;模擬U盤;Linux;S3C64100 引言 現階段嵌入式產品作為U盤掛載到PC機上在各類電子產品中被越來越多的應用,Linux作業系統在電子產品中的應用也越來越廣泛,但是Linux中模擬U盤掛載到PC機中,與PC機上通用Windows的通信還很好的達到實現。
  • 如何在Web應用中實現Velocity 與Struts 框架相互集成的應用實例
    J2EE Web應用系統的設計和開發人員通過應用Velocity Tools中相關的組件,不僅可以將Velocity 模板引擎應用於普通的J2EE Web應用系統環境中,也還可以與J2EE系統平臺中的各種應用框架相互集成,從而也允許將Velocity 模板引擎應用於如Struts和Struts2、Spring等應用框架的環境中。
  • Android多點觸控技術和應用框架
    本文將從應用的角度說明Android多點觸控技術的接口和應用。一、多點觸控場景分析 網絡上有關Android多點觸控技術的文章多見於兩點拉伸進行圖片放大縮小。對於,這個場景有兩個特點:1) 兩點,而不是更多點;2) 對於觸點的移動事件(MotionEvent.ACTION_MOVE),只需要計算兩點的距離,進而判斷兩個點之間的距離是變大還是縮小,實現圖片放大或者縮小。這個過程並不需要記錄這兩個點和之前的兩個點的關係。這樣講比較抽象,我們可以用一個例子來解釋。
  • PXA255的嵌入式Linux應用平臺的構建
    嵌入式Linux是由很多體積小且性能高的微內核系統組成,在內核代碼完全開放的前提下,不同領域和不同層次的用戶可以根據自己的應用需要很容易地對內核進行改造,在低成本的前提下,設計和開發出真正滿足自己需要的嵌入式系統。隨著電子市場的發展壯大,高性能低功耗的多媒體手提設備和無線設備越來越受到市場的歡迎,Intel XScale PXA255處理器正是針對這一情況推出的。
  • 基於華邦W90P710處理器的Linux內核應用及串口驅動的實現
    很多工控產品需要和外部設備進行信息交換,而串口通信是最簡單快捷的實現方法。在不同的工控產品中,由於對所選用的串口元件或者串口通信的數據格式、波特率等有不同的需求,需要對串口驅動進行開發。華邦W90P710採用ARM的ARM7TDMI微處理器核心,採用?
  • arm linux 系統調用實現
    ).我們將從bionic中的open函數開始追溯arm linux的系統調用實現(使用gnu eabi)。Linux的應用程式要想訪問內核必須使用系統調用從而實現從usr模式轉到svc模式。在arm中,這個過程是通過swi(或者和它等價的指令)來實現模式轉換的。
  • Linux Scsi子系統框架介紹
    scsi是一套古老的協議,至今它還在一些硬體中存在和使用,例如基於sata協議的ssd硬碟,ufs器件等。因為scsi命令已經標準化,因此scsi子系統也成為了linux kernel眾多子系統中的一份子。
  • Linux文件的常用操作命令
    linux文件操作常用指令1、系統命令runlevel # 查看當前的運行級別systemctl status firewalld # 開啟網絡服務功能stop # 關閉restart # 重啟less # 命令行中查看文件可以上下翻頁反覆瀏覽head # 命令行中查看文件頭幾行tail # 命令行中查看文件尾幾行wc # 統計文件的單詞數 行數等信息3、目錄管理常用指令pwd #
  • Linux內核網絡設備驅動
    在 Ubuntu 上,可以 通過 apt-get install ethtool 安裝,過會演示通過此工具監控網卡數據。ethtool 通過 ioctl 和設備驅動通信。內核實現了一個通用 ethtool 接口,網卡驅動實現這些接口,就可以被 ethtool 調用。
  • SpringBoot中的MyBatis框架的整合實現及原理
    並在JDBC操作的基礎上做了封裝和優化,它藉助靈活的SQL定製,參數及結果集的映射方式,更好的適應了當前網際網路技術的發展。Mybatis框架的簡單應用架構如圖所示:在當今的網際網路應用中項目,mybatis框架通常會由
  • 基於μCLinux的USB驅動程序實現
    摘 要:μClinux是一種面向嵌入式微處理器的微型作業系統,已經在嵌入式作業系統中佔有重要地位。在此介紹FTDI公司的USB晶片FT245BL的主要性能、工作原理,並將其應用在Blackfin ADSP-BF533微處理器的嵌入式開發平臺上,說明在μClinux下編寫與加載USB接口晶片FT245BL的驅動程序方法,實現了DSP主板的 USB埠通信。
  • eBPF應用概述(linux內核將用BPF給iptables「換心」)
    最近一直在學習eBPF以及當前的應用案例,搜索到這篇文章。這篇文章將目前市面上主流的應用場景描述的很清楚。但是傳播度不夠,關鍵詞的搜索中也不是第一個出現的。所以,我也是簡單的調整了下格式發出來。原文連結也找不到了,如果涉及到版權請聯繫我。eBPF是當前的網絡開發領域中的熱點,netconf也有多篇相關的topic。
  • Linux USB總線驅動框架分析
    1、USB驅動引入USB(全稱 Universal Serial Bus,通用串行總線),已經成為PC及嵌入式設備中最常用、最便捷的通信接口。Linux USB子系統較為龐大,本文主要對Linux系統下的USB總線驅動框架進行概述,重點的細節待後續文章展開。