linux网卡驱动移植,Linux-3.0之CS8900网卡驱动移植

本文介绍如何将CS8900网卡驱动移植到Linux-3.0内核的过程。主要内容包括修改多个核心文件以适配S3C2410平台,并更新内核配置选项支持该网卡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将CS8900网卡驱动移植到Linux-3.0上,具体操作步骤如下:

第一步:

打开arch/arm/plat-samsung/include/plat/map-base.h,找到

#define S3C_VA_WATCHDOG    S3C_ADDR(0x00400000)        /* watchdog */

在这一行之后添加

#define S3C_VA_ETHERNET    S3C_ADDR(0x00500000)        /* ethernet */

第二步:

打开arch/arm/plat-s3c24xx/include/plat/map.h,找到

/* Standard size definitions for peripheral blocks. */

在这一行之前添加

/* Ethernet */

#define S3C24XX_VA_ETHERNET     S3C_VA_ETHERNET

#define S3C2410_PA_ETHERNET     (0x19000000)

#define S3C24XX_SZ_ETHERNET    SZ_1M

第三步:

打开arch/arm/plat-s3c2410/include/mach/map.h,在文件后添加

/* CS8900A */

#define S3C24XX_PA_ETHERNET    S3C2410_PA_ETHERNET

第四步:

打开arch/arm/mach-s3c2410/mach-smdk2410.c,添加

#include

修改

static struct map_desc smdk2410_iodesc[] __initdata = {

/* nothing here yet */

};

static struct map_desc smdk2410_iodesc[] __initdata = {

/* nothing here yet */

IODESC_ENT(ETHERNET)

};

第五步:

将cs8900.c和cs8900.h两个文件拷贝到drivers/net/arm/下

打开 drivers/net/arm/cs8900.c,添加

#include

找到函数

int __init cs8900_probe (struct net_device *dev)

修改其中的

#if defined(CONFIG_ARCH_SMDK2410)

dev->base_addr = (0xE0000000 + 0x300);

dev->irq = IRQ_EINT9;

#endif /* #if defined(CONFIG_ARCH_SMDK2410) */

#if defined(CONFIG_ARCH_SMDK2410)

dev->base_addr = (S3C24XX_VA_ETHERNET + 0x300);

dev->irq = IRQ_EINT9;

#endif /* #if defined(CONFIG_ARCH_SMDK2410) */

第六步:

修改Kconfig,添加cs8900内核配置项。

修改drivers/net/arm/Kconfig添加如下内容:

config S3C2410_CS8900

tristate “CS8900 support”

depends on NET_ETHERNET && ARM && ARCH_SMDK2410

help

support for cs8900 chipset base Ethernet cards

第七步:

修改Makefile添加内核编译配置(华清远见原创,转载请注明出处)

修改drivers/net/arm/Makefile添加如下内容:

obj-$(CONFIG_S3C2410_CS8900) += cs8900.o

第八步:

配置内核,使之支持cs8900网卡

$ make menuconfig

Kernel Features --->         //使用EABI工具链这两项是必须选择的

[*] Use the ARM EABI to compile the kernel

[*] Allow old ABI binaries to run with this kernel (EXPERIMENTAL) (NEW)

Device Drivers --->

[*] Network device support --->

[*] Ethernet (10 or 100Mbit) --->

CS8900a support

注:

IODESC_ENT宏在头文件

arch/arm/plat-samsung/include/plat/cpu.h中定义

#define IODESC_ENT(x) { (unsigned long)S3C24XX_VA_##x, __phys_to_pfn(S3C24XX_PA_##x), S3C24XX_SZ_##x, MT_DEVICE }

展开后等价于:

static struct map_desc smdk2410_iodesc[] __initdata = {

{

.virtual = (unsigned long)S3C24XX_VA_ ETHERNET),

.pfn = __phys_to_pfn(S3C24XX_PA_ ETHERNET),

.length = S3C24XX_SZ_ ETHERNET,

.type = MT_DEVICE

},

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值