原创 dwc3 linux usb3.0 driver架構

  dwc3 linux usb3.0 driver架構:   1. DRD driver DRD驅動在usb/dwc3   1.1 dts dwc3@44000000 { /* Compatible ID used by t

原创 網卡驅動:stmmac DMA發送流程

  1. 設置DAM buffer&descriptor,並啓動DMA發送 在stmmac_xmit設置buffe r& descriptor,如下片段: if (likely(!is_jumbo)) { bo

原创 半導體IP核

1. 簡介 IP 核(Intellectual Property Core,知識產權核)是指在半導體集成電路設計中那些可以重複使用的、具有自主知識產權功能的設計模塊,設計公司無需對芯片每個細節進行設計,通過購買成熟可靠的IP方案,實現某個

原创 linux kernel: defconfig和.config

在Linux內核裏,編譯內核文件時,先要配置.config文件,然後Makefile在編譯時通過讀取.config文件的配置來選擇要編譯的文件,選擇驅動的加載方式。   defconfig 一般在arch/arm64/configs/

原创 ethtool編譯與內核實現介紹

ethtool 是用於查詢及設置網卡參數的命令。 使用ethtool需要兩個條件: 1)網卡驅動支持ethtool,實現了ethtool的接口函數 2)用戶控件安裝ethtool可執行程序   dwmac驅動已在stmmac_ethtoo

原创 中斷底半部:softirq、tasklet、workqueue

爲了在中斷執行時間儘可能短和中斷處理需完成大量工作之間找到一個平衡點,Linux 將中斷處理程序分解爲兩個半部:頂半部(top  half)和底半部(bottom half)。 頂半部完成儘可能少的比較緊急的功能,它往往只是簡單地讀取寄存

原创 網卡驅動:stmmac DMA接收流程

1. dma buffer及zero-copy 在打開網卡時,stmmac_init_rx_buffers()函數負責分配dma buffer。 static int stmmac_init_rx_buffers(struct stmm

原创 C語言高級編程:二維數組、指針的指針、數組指針、指針數組

1. 定義 int **p;  指針的指針 int (*p2)[5];  數組指針,指向一個數組 int *array[5];  指針數組,是一個int *類型數組 int array2[3][5];  二維數組,數組的數組

原创 linux三大驅動類型:字符設備、塊設備、網絡設備

      1. 字符設備 字符設備指能夠像字節流串行順序依次進行訪問的設備,對它的讀寫是以字節爲單位。字符設備的上層沒有磁盤文件系統,所以字符設備的file_operations成員函數就直接由字符設備驅動提供(一般字符設備都會實現相

原创 X server

X server是Linux系統裏面圖形接口服務器的簡稱。Windows系統的界面是這個系統不可分割的一部分,各種窗口操作界面顯示都是由系統核心直接管理的,而Linux的圖形界面並不是系統的必要組成部分,它可以在無界面的條件下運行。當需要

原创 軟件高內聚低耦合

  1. 耦合 耦合就是元素之間依賴的量度。這裏所說的元素,即可以是功能、對象(類),也可以指系統、子系統、模塊。低耦合就是要求在我們的軟件系統中,某元素不要過度依賴於其它元素。“低耦合”給軟件項目帶來的優點是:易於變更、易於重用。 耦合

原创 單元測試: gmock

Mock,更確切地說應該是Mock Object。當我們在單元測試、模塊的接口測試時,當這個模塊需要依賴另外一個/幾個類,而這時這些類還沒有開發好,這時我們就可以定義Mock對象來模擬那些類的行爲。 mock工具的其中一個非常重要的作用是

原创 ARM內存屏障 (memory barrier)

  barrier.h #define isb() asm volatile("isb" : : : "memory") #define dmb(opt) asm volatile("dmb " #opt : :

原创 stmmac 中斷處理

1. 發送中斷 1.1. DMA發送完數據後產生中斷,調用 stmmac_interrupt服務程序   1.2. stmmac_interrupt 通過調用 stmmac_dma_interrupt 處理DMA相關中斷(包括髮送和接收)

原创 netdev: dev_watchdog timer(結合stmmac 分析)

分析netdev看門狗定時器   1. dev_watchdog()作爲定時器回調函數會被週期執行 在dev_watchdog()中,如果 if (netif_xmit_stopped(txq) && time_after(jiffies