該驅(qū)動基于linux-2.6.24.4內(nèi)核。
首先,需要在arch/arm/mach-s3c2410/mach-smdk2410.c文件中添加如下代碼:
static struct resource s3c_dm9000_resource [] = {
[0] = {
.start = 0x10000000,
.end = 0x10000040,
.flags = IORESOURCE_MEM
},
[1] = {
.start = IRQ_EINT2,
.end = IRQ_EINT2,
.flags = IORESOURCE_IRQ,
}
};
注意上面的start、end等地址是指的網(wǎng)卡的物理地址。然后,還要在該文件中加入如下代碼:
struct platform_device s3c_device_dm9000 = {
.name = "dm9000",
.id = -1,
.num_resources = ARRAY_SIZE(s3c_dm9000_resource),
.resource = s3c_dm9000_resource,
};
需要特別注意上面的name字段,當(dāng)設(shè)備驅(qū)動程序?qū)ふ以O(shè)別資源時,會根據(jù)該字段對設(shè)備進(jìn)行匹配。另外,該文件中的smdk2410_devices[]數(shù)組中,還需要加入s3c_device_dm9000,不然系統(tǒng)啟動時沒有找
到該資源就不會調(diào)用相應(yīng)的probe函數(shù)。
下面分析驅(qū)動程序的probe函數(shù)。若驅(qū)動被編譯進(jìn)內(nèi)核,則在系統(tǒng)啟動的時候,該函數(shù)會被調(diào)用。該函數(shù)的源代碼如下:
static int dm9k_drv_probe(struct platform_device *pdev)
{
struct net_device *ndev;
unsigned long base;
unsigned int *addr = NULL;
int ret = -ENODEV;
ndev = alloc_etherdev(sizeof(struct board_info));
if (!ndev) {
printk("%s: could not allocate device.\n", CARDNAME);
return -ENOMEM;
}
ndev->dma = (unsigned char)-1;
if (pdev->num_resources < 2 || pdev->num_resources > 3) {
printk("DM9000: Wrong num of resources %d\n", pdev->num_resources);
ret = -ENODEV;
goto out;
}
base = pdev->resource[0].start;
ndev->irq = pdev->resource[1].start;
/*
* Request the regions.
*/
if (!request_mem_region(base, 4, ndev->name)) {
ret = -EBUSY;
goto out;
}
addr = ioremap(base, 4);
if (!addr) {
ret = -ENOMEM;
goto release_mem;
}
ret = dm9k_probe(ndev, (unsigned long)addr);
if (ret != 0) {
iounmap(addr);
release_mem:
release_mem_region(base, 4);
out:
printk("%s: not found (%d).\n", CARDNAME, ret);
kfree(ndev);
}
return ret;
}
函數(shù)首先調(diào)用alloc_etherdev,該函數(shù)在include/linux/etherdevice.h中聲明,其中有如下語句:
#define alloc_etherdev(sizeof_priv) alloc_etherdev_mq(sizeof_priv, 1)
而alloc_etherdev_mq函數(shù)又定義在net/ethernet/eth.c中,如下:
struct net_device *alloc_etherdev_mq(int sizeof_priv, unsigned int queue_count)
{
return alloc_netdev_mq(sizeof_priv, "eth%d", ether_setup, queue_count);
}
可見,該函數(shù)只是用自己的參數(shù)來調(diào)用alloc_netdev_mq函數(shù)。alloc_netdev_mq函數(shù)定義在net/core/dev.c中,原型如下:
struct net_device *alloc_netdev_mq(int sizeof_priv, const char *name,
void (*setup)(struct net_device *), unsigned int queue_count)
詞條
詞條說明
.應(yīng)用案例: 1) IPSTB(機頂盒):ST系列(5516、5100、5514、5517、7100、7109)+網(wǎng)卡芯片 (DM9000AE/DM9161AE)+HS12369; ????NEC(61110/6114)+網(wǎng)卡芯片(DM9000AE)+HS12369; 2) VOD ; EM8511+DM9000E/DM9000AE+HS12369; 3)
A.X.W 愛欣文科技有限公司 ? 1、武漢華美特電子工程有限責(zé)任公司(愛欣文公司武漢辦事處) 武漢辦事處地址:武漢市東湖開發(fā)區(qū)珞瑜路727號光谷銀座1305室 電話:027-87207595;027-87207596;027-87880506 傳真:027-87653172? 聯(lián)系人:李經(jīng)理 Mobile:13469977252 E-mail:baron_li@axwdra
愛欣文科技有限公司長期從事**較新集成電路(IC)代理銷售業(yè)務(wù).總公司下設(shè)中國香港公司、深圳公司、武漢公司及在內(nèi)地各有關(guān)地區(qū)業(yè)務(wù)辦事處等機構(gòu),構(gòu)成了**國內(nèi)IC 市場營銷業(yè)務(wù)立體網(wǎng)絡(luò),是集研發(fā)方案提供商和IC **代理商于一體的科貿(mào)公司. 公司接受榮譽授權(quán),全面代理閩臺DAVICOM 聯(lián)杰**,RMI,MAGCOM磁威,TMC,GIGASTORAGE等****品牌集成電路(IC)及其相關(guān)的全線產(chǎn)品。
深圳市愛欣文科技有限公司是閩臺聯(lián)杰**(DAVICOM) 股份有限公司﹑閩臺磁威(MAGCOM)公司在中國大陸的授權(quán)代理商。 供應(yīng)DAVICOM全系列產(chǎn)品DM9000EP DM9161AEP DM9000AEP DM9601EP DM9161EP DM9620 DM9006EP DM8806AFP ... 及MAGCOM全系列產(chǎn)品HS12369 HS12361 HS9001 HS9016&nbs
公司名: 深圳市愛欣文科技有限公司
聯(lián)系人: 李先生
電 話: 027-87880506
手 機: 13469977252
微 信: 13469977252
地 址: 湖北武漢武漢市東湖開發(fā)區(qū)珞瑜路727號光谷銀座1305室
郵 編: 430074
網(wǎng) 址: davicom1.cn.b2b168.com
公司名: 深圳市愛欣文科技有限公司
聯(lián)系人: 李先生
手 機: 13469977252
電 話: 027-87880506
地 址: 湖北武漢武漢市東湖開發(fā)區(qū)珞瑜路727號光谷銀座1305室
郵 編: 430074
網(wǎng) 址: davicom1.cn.b2b168.com