日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

雖然Linux驅(qū)動(dòng)程序應(yīng)該是和具體的硬件平臺(tái)分離的,但是為了更好的理解DM9000的驅(qū)動(dòng)程序,這里還是結(jié)合一下Mini2440開發(fā)板,這樣也可以更好的體會(huì)如何實(shí)現(xiàn)驅(qū)動(dòng)和平臺(tái)分離。


本文分成以下幾個(gè)部分:


一、Mini2440開發(fā)板上DM9000的電氣連接和Mach-mini2440.c文件的關(guān)系。 


二、兩個(gè)重要的結(jié)構(gòu)體介紹:sk_buff和net_device


三、具體代碼分析


一、Mini2440開發(fā)板上DM9000的電氣連接和Mach-mini2440.c文件的關(guān)系


Mini2440開發(fā)板上DM9000與S3C2440的連接關(guān)系如下:

這個(gè)DM9000平臺(tái)設(shè)備作為眾多平臺(tái)設(shè)備中的一個(gè)在扳子初始化的時(shí)候就被添加到了總線上。代碼清單如下:


其中片選信號AEN使用了nGCS4,所以網(wǎng)卡的內(nèi)存區(qū)域在BANK4,也就是從地址0x20000000開始。DM9000的TXD[2:0]作為strap pin在電路圖中是空接的,所以IO base是300H。中斷使用了EINT7。這些內(nèi)容在Mach文件中有如下體現(xiàn):


#define S3C2410_CS4 (0x20000000)     

#define MACH_MINI2440_DM9K_BASE (S3C2410_CS4 + 0x300)      

static struct resource mini2440_dm9k_resource[] __initdata = {       

    [0] = {       

        .start = MACH_MINI2440_DM9K_BASE,       

        .end   = MACH_MINI2440_DM9K_BASE + 3,       

        .flags = IORESOURCE_MEM       

    },       

    [1] = {       

        .start = MACH_MINI2440_DM9K_BASE + 4,       

        .end   = MACH_MINI2440_DM9K_BASE + 7,       

        .flags = IORESOURCE_MEM       

    },       

    [2] = {       

        .start = IRQ_EINT7,       

        .end   = IRQ_EINT7,       

        .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,       

    }       

};    


另外在Mach文件中還定義了DM9000平臺(tái)設(shè)備,設(shè)備名稱為“dm9000”,設(shè)備資源就是上面定義的IO和中斷資源。代碼清單如下:


static struct dm9000_plat_data mini2440_dm9k_pdata __initdata = {      

    .flags      = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),      

};      

     

static struct platform_device mini2440_device_eth __initdata = {      

    .name       = "dm9000",      

    .id     = -1,      

    .num_resources  = ARRAY_SIZE(mini2440_dm9k_resource),      

    .resource   = mini2440_dm9k_resource,      

    .dev        = {      

        .platform_data  = &mini2440_dm9k_pdata,      

    },      

};    


MACHINE_START(MINI2440, "MINI2440")      

    /* Maintainer: Michel Pollet */     

    .phys_io    = S3C2410_PA_UART,      

    .io_pg_offst    = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,      

    .boot_params    = S3C2410_SDRAM_PA + 0x100,      

    .map_io     = mini2440_map_io,      

    .init_machine   = mini2440_init, /*初始化函數(shù)*/     

    .init_irq   = s3c24xx_init_irq,      

    .timer      = &s3c24xx_timer,      

MACHINE_END    

  

static void __init mini2440_init(void)      

{      

    ...      

         ...      

    platform_add_devices(mini2440_devices, ARRAY_SIZE(mini2440_devices));      

     

        ...      

        ...      

}    

 

static struct platform_device *mini2440_devices[] __initdata = {      

    &s3c_device_usb,      

    &s3c_device_wdt,      

/*  &s3c_device_adc,*/ /* ADC doesn't like living with touchscreen ! */     

    &s3c_device_i2c0,      

    &s3c_device_rtc,      

    &s3c_device_usbgadget,      

    &mini2440_device_eth, /*dm9000是眾多平臺(tái)設(shè)備中的一個(gè)*/     

    &mini2440_led1,      

    &mini2440_led2,      

    &mini2440_led3,      

    &mini2440_led4,      

    &mini2440_button_device,      

    &s3c_device_nand,      

    &s3c_device_sdi,      

    &s3c_device_iis,      

    &mini2440_audio,      

/*  &s3c_device_timer[0],*/ /* buzzer pwm, no API for it */     

    /* remaining devices are optional */     

};    


二、兩個(gè)重要的結(jié)構(gòu)體簡單介紹:sk_buff和net_device

 *sk_buff


如果把網(wǎng)絡(luò)傳輸看成是運(yùn)送貨物的話,那么sk_buff就是這個(gè)“貨物”了,所有經(jīng)手這個(gè)貨物的人都要干點(diǎn)什么事兒,要么加個(gè)包裝,要么印個(gè)戳兒等等。收貨的時(shí)候就要拆掉這些包裝,得到我們需要的貨物(payload data)。沒有貨物你還運(yùn)輸什么呢?由此可見sk_buff的重要性了。關(guān)于sk_buff的詳細(xì)介紹和幾個(gè)操作它的函數(shù),參考:“l(fā)inux內(nèi)核sk_buff的結(jié)構(gòu)分析” http://www.linuxidc.com/Linux/2011-07/39163.htm,寫得非常明白了。贊一個(gè)~


 *net_device


又是一個(gè)龐大的結(jié)構(gòu)體。好吧,我承認(rèn)我從來就沒有看全過這個(gè)結(jié)構(gòu)體。它在內(nèi)核中就是指代了一個(gè)網(wǎng)絡(luò)設(shè)備。驅(qū)動(dòng)程序需要在探測的時(shí)候分配并初始化這個(gè)結(jié)構(gòu)體,然后使用register_netdev來注冊它,這樣就可以把操作硬件的函數(shù)與內(nèi)核掛接在一起。


三、具體代碼的分析


在順序分析之前先看三個(gè)結(jié)構(gòu)體變量和一個(gè)自定義的結(jié)構(gòu)體。


* dm9000_driver變量。是platform_driver結(jié)構(gòu)體變量,其中包含了重要的:驅(qū)動(dòng)的名字(用來match)和幾個(gè)重要操作函數(shù)。


static struct platform_driver dm9000_driver = {      

    .driver = {      

        .name    = "dm9000",      

        .owner   = THIS_MODULE,      

    },      

    .probe   = dm9000_probe,      

    .remove  = __devexit_p(dm9000_drv_remove),      

    .suspend = dm9000_drv_suspend,      

    .resume  = dm9000_drv_resume,      

};    


* dm9000_netdev_ops變量。是net_device_ops結(jié)構(gòu)體變量, 其中定義了操作net_device的重要函數(shù),我們在驅(qū)動(dòng)程序中根據(jù)需要的操作要填充這些函數(shù)。代碼清單如下:


static const struct net_device_ops dm9000_netdev_ops = {      

    .ndo_open       = dm9000_open,      

    .ndo_stop       = dm9000_stop,      

    .ndo_start_xmit     = dm9000_start_xmit,      

    .ndo_tx_timeout     = dm9000_timeout,      

    .ndo_set_multicast_list = dm9000_hash_table,      

    .ndo_do_ioctl       = dm9000_ioctl,      

    .ndo_change_mtu     = eth_change_mtu,      

    .ndo_validate_addr  = eth_validate_addr,      

    .ndo_set_mac_address    = eth_mac_addr,     

#ifdef CONFIG_NET_POLL_CONTROLLER      

    .ndo_poll_controller    = dm9000_poll_controller,     

#endif      

};    



 * dm9000_ethtool_ops變量。是ethtool_ops結(jié)構(gòu)體變量,為了支持ethtool,其中的函數(shù)主要是用于查詢和設(shè)置網(wǎng)卡參數(shù)(當(dāng)然也有的驅(qū)動(dòng)程序可能不支持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,      

};    


*board_info結(jié)構(gòu)體。用來保存芯片相關(guān)的一些私有信息。具體在代碼中分析。下面是這個(gè)結(jié)構(gòu)體的清單。


/* Structure/enum declaration ------------------------------- */     

typedef struct board_info {      

     

    void __iomem    *io_addr;   /* Register I/O base address */     

    void __iomem    *io_data;   /* Data I/O address */     

    u16      irq;       /* IRQ */     

     

    u16     tx_pkt_cnt;      

    u16     queue_pkt_len;      

    u16     queue_start_addr;      

    u16     dbug_cnt;      

    u8      io_mode;        /* 0:word, 2:byte */     

    u8      phy_addr;      

    u8      imr_all;      

[1] [2] [3]
關(guān)鍵字:mini2440  dm9000  網(wǎng)卡驅(qū)動(dòng) 引用地址:mini2440 dm9000 網(wǎng)卡驅(qū)動(dòng)詳解 (一)

上一篇:mini2440 dm9000 網(wǎng)卡驅(qū)動(dòng)詳解 (二)
下一篇:mini2440 dm9000 網(wǎng)卡驅(qū)動(dòng)詳解 (三)

推薦閱讀

集微網(wǎng)消息,今天下午有網(wǎng)友在魅族論壇發(fā)文表達(dá)不滿,他稱自己掐著秒表來搶購魅族16的6+64GB版本,結(jié)果只顯示沒貨,讓他很失望,決定轉(zhuǎn)投三星。黃章對此作出回應(yīng),他首先對該網(wǎng)友表示感謝,然后安撫他很快就有貨了,一大波魅族16的6+64版本正在工廠里加緊生產(chǎn)。? ? ? ? 其實(shí)這不是魅族16第一次碰到?jīng)]貨問題,早在9月份,黃章發(fā)布在其官網(wǎng)上發(fā)布道...
(文章來源:中科羅伯特機(jī)器人學(xué)院) 工業(yè)機(jī)器人發(fā)展到現(xiàn)在已經(jīng)不在局限于某一個(gè)行業(yè)或者是領(lǐng)域了,在我國工業(yè)機(jī)器人已經(jīng)逐漸占領(lǐng)了各大流水線上的工作。隨著人們生活質(zhì)量的提高,傳統(tǒng)的工業(yè)機(jī)器人作業(yè)方式已經(jīng)不能滿足人們對產(chǎn)品的需求,科技的進(jìn)步會(huì)帶動(dòng)工業(yè)機(jī)器人進(jìn)入到什么樣的發(fā)展呢。 行業(yè)是現(xiàn)在僅次于汽車的第二大應(yīng)用領(lǐng)域, 3C行業(yè)由于產(chǎn)品更...
僅隔一個(gè)月的時(shí)間,國軒高科遠(yuǎn)赴德國建生產(chǎn)基地的態(tài)度發(fā)生了變化。“我們將在現(xiàn)有的生產(chǎn)基地基礎(chǔ)上,拓展海外生產(chǎn)能力,包括在德國、印度建新的工廠以更好服務(wù)客戶。”合肥國軒高科動(dòng)力能源有限公司(以下簡稱為國軒高科)高級副總裁徐興無在接受蓋世汽車采訪時(shí)透露稱。而就在一個(gè)月前的全球新能源汽車供應(yīng)鏈創(chuàng)新大會(huì)上,他對外的話術(shù)還停留在“有這方面的...
前幾天,高通正式宣布將會(huì)在11月30日召開驍龍技術(shù)峰會(huì),大家期待的驍龍898芯片也有望正式亮相。  按照以往慣例,高通官方可能會(huì)在發(fā)布會(huì)上介紹首發(fā)該芯片的廠商,其很大概率會(huì)由小米12首發(fā),即便沒能搶下首發(fā),小米12也應(yīng)該會(huì)在年前發(fā)布,是首批驍龍898機(jī)型。  根據(jù)微博數(shù)碼博主的最新爆料,小米旗下有一款代號為L2的旗艦手機(jī),今天正式通過...

史海拾趣

問答坊 | AI 解惑

單片機(jī)控制

C51控制485接口,正常來說485驅(qū)動(dòng)器必需在54歐姆的負(fù)載上提供最小1.5V的差分輸出,現(xiàn)在有兩個(gè)程序測試(硬件條件相同),測量485接口AB線之間的輸出電壓(空載),一個(gè)程序測量出來是1.5V左右,而另外一個(gè)程序則是3V,請問各位大蝦,是不是程序上可 ...…

查看全部問答∨

美國派爾高球機(jī)使用的電機(jī)驅(qū)動(dòng)芯片

步進(jìn)電機(jī)控制+驅(qū)動(dòng)芯片---TMC222的原理及應(yīng)用              Gavy  13812617052 摘 要:在今日空間有限的環(huán)境中,設(shè)計(jì)人員急需功能豐富,體積精巧而整體效能強(qiáng)大的解決方案,TMC211在對步進(jìn) ...…

查看全部問答∨

嘿嘿,廢物利用,效果還不錯(cuò)~~~

炎熱的夏天,機(jī)器的硬盤(兩塊)熱得燙手(58d.c),機(jī)器性能明顯下降。 考慮加個(gè)風(fēng)扇,又懶得出去跑(天太熱~~)。想起還有臺(tái)舊電腦,很久不用了,早晚也是扔貨。不如廢物利用。 打開機(jī)箱,取出電源,拆出風(fēng)扇。把原來的四顆固定螺絲擰進(jìn)原處, ...…

查看全部問答∨

關(guān)于Tornado組件

各位達(dá)人誰有關(guān)于Tornado組件的詳細(xì)介紹的資料啊?我前段時(shí)間一不小心把師父的工程里面的組件改了,然后怎么編譯都通不過,這才覺得這些組件也很重要?。≌l有詳細(xì)的資料或者關(guān)于這方面的書,介紹一下??!小弟在此謝了?。 ?

查看全部問答∨

如何在嵌入式里使用TinyXml

我要在嵌入式(基于WinCE)里使用TinyXml,不知道該如何設(shè)置。我試過用于win32程序可以運(yùn)行,但用于嵌入式就出錯(cuò),總提示無法解析外部符號。我把TinyXml項(xiàng)目改成是基于嵌入式平臺(tái)的就出現(xiàn)如下錯(cuò)誤: 正在刪除項(xiàng)目“tinyxml”(配置“Debug|Pocket P ...…

查看全部問答∨

幫忙看個(gè)語法錯(cuò)誤

下面是一個(gè)異步清零的同步計(jì)數(shù)器的程序,錯(cuò)誤在程序中標(biāo)出了 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY counter IS    PORT(areset, enable, clk : IN STD_LOGIC;      ...…

查看全部問答∨

提供S5PC100開發(fā)板 及相關(guān)產(chǎn)品定制

提供S5PC100開發(fā)板 及相關(guān)產(chǎn)品定制 S5PC100開發(fā)板 采用Samsung S5PC100 ,其core為 ARMcortex A8 iPhone 3G中采用的就是S5PC100,只是Mark不同. S5PC100集多種功能于一身,可用于平板電腦.車載電腦.無線通信、GPS、攝像頭、手機(jī)游戲、便攜式多媒體 ...…

查看全部問答∨

tornado中文件的建立

用fopen(path, \"w\");來建立文件,無論path為\"C://1.conf\"還是直接為“1.conf\",都會(huì)建立文件失敗。 不知道在tornado里,文件建立應(yīng)該用怎樣的路徑呢?…

查看全部問答∨

IAR4.42AForSTM32的危險(xiǎn)Bug!

在試驗(yàn)SDIO 代碼的時(shí)候發(fā)現(xiàn)了一個(gè)明顯的運(yùn)算錯(cuò)誤:   測試環(huán)境:   2G SD 卡, STM32   IAR Assembler for ARM  4.42A (4.42.1.501) & ...…

查看全部問答∨

無線充電器的討論

      以前的時(shí)候在論壇上看到過無線充電器的兩個(gè)芯片,當(dāng)時(shí)也沒怎么想,最近又在網(wǎng)上上看到了關(guān)于go標(biāo)準(zhǔn),不知到以這個(gè)作為畢業(yè)設(shè)計(jì)的方向怎樣,應(yīng)該怎樣下手呢? …

查看全部問答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved