linux 网卡驱动分析,LINUX_网卡驱动分析
LINUX_網卡驅動分析
(36頁)
本資源提供全文預覽,點擊全文預覽即可全文預覽,如果喜歡文檔就下載吧,查找使用更方便哦!
19.9 積分
Linux DM9000網卡驅動程序完全分析說明仁 本文分析基于內核源碼版本為linux-2.6.31說明2本文在理解了 linux中總線、設備和驅動模型的基礎上加以分析代碼雖然Linux驅動程序應該是和具體的硬件平臺分離的,但是為了更好的理解DM9000的驅動 程序,這里還是結合一下Mini2440開發板,這樣也可以更好的體會如何實現驅動和平臺分離。本文分成以下幾個部分:一、 Mini2440開發板上DM9000的電氣連接和Mach?mini2440.c文件的關系。二、 兩個重要的結構體介紹:sk_buff和net_device三、 具體代碼分析一、Mini2440開發板上DM9000的電氣連接和Mach-mini2440.c文件的關系Mini2440開發板上DM9000與S3C2440的連接關系如下:SD0"SD15DATA0xDATA15<>INTEINT7/GPF7DM9000 CMDADDR2S3C2440■AEN■nGCS4/GPA15IOR#nOEIOW■ ME其中片選信號AEN使用了 nGCS4,所以網卡的內存區域在BANK4,也就是從地址 0x20000000開始。DM9000的TXD[2:0]作為strap pin在電路圖中是空接的,所以IO base是300Ho屮斷使用了 EINT7。這些內容在Mach文件屮有如下體現:view plaincopy to clipboardDrint?1. #define S3C2410_CS4 (0x20000000)2. #define MACH_MINI2440_DM9K_BASE (S3C2410_CS4 + 0x300)3. static struct resource mini2440_dm9k_resource[] _initdata = {4. [0] = {5. .start = MACH MINI2440 DM9K BASE,6. .end = MACH_MINI2440_DM9K_BASE + 3,7. .flags = IORESOURCE_MEM8. },9. [1] = {10. .start = M AC H_M IN12440_D M9 K_B A S E + 4,11 ..end = M ACH_M IN I244O_DM9K_BAS E + 7,12. .flags = IORESOURCE_MEM13. },14. [2] = {15.. start = IRQ_EINT7,16.. e nd = IRQ_EINT7,17. .flags = IORESOURCEJRQ | IORESOURCE_IRQ_HIGHEDGE,18. }19. };另外在Mach文件中還定義了 DM9000平臺設備,設備名稱為“dm9000”,設備資源就是上而 定義的IO和中斷資源。代碼清單如下:下:view plaincopy to clipboardprint?1 ? static struct dm9000_plat_data mini2440_dm9k_pdata _initdata = {2. .flags = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),3. };4.4. static struct platform_device mini2440_device_eth _initdata = {5. .name = ”dm9000”,6. .id = -1,7. .numresources = ARRAY_SIZE(mini2440_dm9k_resource),8. .resource = mini2440_dm9k_resource,9. .dev = {10. .platform_data = &m ini2440_dm9k_pdata,11. },12. };這個DM9000平臺設備作為眾多平臺設備中的一個在扳子初始化的時候就被添加到了總線 上。代碼清單如下:view plain copy to clipboardprint?1. MACHINE_START(MINI2440, ”MINI2440”)2. /* Maintainer: Michel Pollet */3. .phys_io = S3C2410_PA_UART,4. ?io_pg_offst = (((u32)S3C24XX_VA_UART) ? 18) & Oxfffc,5. .bootjDarams = S3C2410_SDRAM_PA + 0x100,6. .map」o = mini2440_map_io,7. .init_machine = mini2440_init,廣初始化函數*/8. .initjrq = s3c24xx_init_irq,9. .timer = &s3c24xx_timer,10. MACHINE_ENDview plain copy to clipboardpri nt?1. static void _init mini2440」nit(void)2. {3.. ..4■…5. platform_add_devices(mini2440_devices, ARRAY_SIZE(mini2440_devices));6.? ? ? ?8.. ..9. }view plaincopy to clipboardprint?I ? static struct platform_device *mini2440_devices[] _initdata = {2. &s3c device usb,3. &s3c_device_wdt,4. /* &s3c_device_adc,*/ /* ADC doesn't like living with touchscreen ! */5. &s3c_device_i2c0,6. &s3c_device_rtc,7. &s3c_device_usbgadget,8. &mini2440_device_eth, /*dm9000 是眾多平臺設備中的一個*/9. &mini2440」ed1,10.6 mini2440Jed2,II .& mini2440」ed3,12 & mini2440」ed4,13. & mini2440_button_device,14. &s3c_device_ nand,15. &s3c_device_sdi,16.6 s3c_device_iis,17. & mini24 關?鍵?詞: LINUX_ 網卡 驅動 分析
?天天文庫所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
總結
以上是生活随笔為你收集整理的linux 网卡驱动分析,LINUX_网卡驱动分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux haproxy 脚本,hap
- 下一篇: linux脚本 的使用,linux sh