一、開發環境
1、核心:
linux
2.6.22.6;
2、jz2440
3、ubuntu9.10
二、移植過程
1、新增標頭檔案在核心目錄下的/arch/arm/plat-s3c24xx/commom-smdk.c檔案中新增
#if defined (config_dm9000) || defined (config_dm9000_module)
#include
#endif
2、新增dm9000平台裝置結構。
核心目錄下的
/arch/arm/plat-s3c24xx/commom-smdk.c檔案中新增
/* dm9000 device */
#if defined (config_dm9000) || defined (config_dm9000_module)
static struct resource s3c_dm9k_resource = ,
[1] = ,
[2] =
};static struct dm9000_plat_data s3c_m9k_platdata=;
struct platform_device s3c_device_dm9k = ,
};export_symbol(s3c_device_dm9k);
#endif /* dm9000 device */
3、加入核心裝置列表。
static struct platform_device __initdata *smdk_devs = ;
4、修改原始碼/drivers/net/dm9000.c。
(1)新增標頭檔案
#if defined(config_arch_s3c2410)
#include
#endif
(2)修改/drivers/net/dm9000.c。設定儲存控制器使bank4可用。
在dm9000_probe()函式中,新增
u32 id_val;
#if defined(config_arch_s3c2410)
unsigned int oldval_bwscon;
unsigned int oldval_bankcon4;
#endif
/* init network device */
ndev = alloc_etherdev(sizeof (struct board_info));
printk2("dm9000_probe()");
#if defined(config_arch_s3c2410)
oldval_bwscon = *((volatile unsigned int *)s3c2410_bwscon);
*((volatile unsigned int *)s3c2410_bwscon) = (oldval_bwscon & ~(3<<16)) | s3c2410_bwscon_dw4_16 |\
s3c2410_bwscon_ws4 | s3c2410_bwscon_st4;
oldval_bankcon4 = *((volatile unsigned int *)s3c2410_bankcon4);
*((volatile unsigned int *)s3c2410_bankcon4) = 0x1f7c;
#endif
printk("%s: not found (%d).\n", cardname, ret);
#if defined(config_arch_s3c2410)
*((volatile unsigned int *)s3c2410_bwscon) = oldval_bwscon;
*((volatile unsigned int *)s3c2410_bankcon4) = oldval_bankcon4;
#endif
printk2("entering dm9000_open\n");
#if defined(config_arch_s3c2410)
if (request_irq(dev->irq, &dm9000_interrupt, irqf_shared|irqf_trigger_rising, dev->name, dev))
#else
if (request_irq(dev->irq, &dm9000_interrupt, irqf_shared, dev->name, dev))
#endif
return -eagain;
if (!is_valid_ether_addr(ndev->dev_addr)){
printk("%s: invalid ethernet mac address. please "
"set using ifconfig\n", ndev->name);
#if defined(config_arch_s3c2410)
printk("now use the default mac address: 08:90:90:90:90:90 \n");
ndev->dev_addr[0] = 0x08;
ndev->dev_addr[1] = 0x90;
ndev->dev_addr[2] = 0x90;
ndev->dev_addr[3] = 0x90;
ndev->dev_addr[4] = 0x90;
ndev->dev_addr[5] = 0x90;
#endif
printk("%s: not found (%d).\n", cardname, ret);
#if defined(config_arch_s3c2410)
*((volatile unsigned int *)s3c2410_bwscon) = oldval_bwscon;
*((volatile unsigned int *)s3c2410_bankcon4) = oldval_bankcon4;
#endif
5、配置核心支援dm9000。
在核心目錄下執行make menuconfig。依次選device drives-->network device support-->[*]network device support --> ethernet (10 or 100mbit)-->dm9000 support。如圖
6、在核心目錄下執行make uimage。在arch/arm/boot/下生成支援dm9000的uimage。
可惜這樣能夠識別出dm9000,也能設定ip,但並不能ping通。檢視資料才知道,jz2440v3使用的是dm9000c,不能直接使用核心裡帶的dm9000.c,需要
使用廠家提供的dm9dev9000c.c移植,見《
linux核心移植-dm9000c移植筆記》
linux網路裝置驅動DM9000驅動分析(4)
14 接受資料 在中斷函式中,我們可以看到呼叫了dm9000 rx 接收資料並存入 skbuff 並提交協議上一層。1 首先看看下面這個結構體,這個結構體按照 dm9000 的接收格式封裝了 dm9000 接收的資料報資訊 struct dm9000 rxhdr packed 2 接收函式dm900...
網絡卡(dm9000)驅動移植
網絡卡 dm9000 驅動移植 看到網上有很多的部落格分享,比如 在此,描述一下自己的製作過程 1.修改arch arm plat s3c24xx common smdk.c檔案 在包含標頭檔案的區域增加以下 在smdk devs結構體之前新增以下 if defined config dm9000 ...
驅動 DM9000網絡卡驅動分析
preface 核心原始碼版本 linux 2.6.18 網絡卡驅動 linux核心網路分層結構 dm9000晶元 dm9000是一款高度整合低功耗快速乙太網處理器,該晶元整合了mac和phy。dm9000可以和cpu直接連線,支援8位 16位和32位資料匯流排寬度。該晶元支援10m和100m自適應...