概述
将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
},
};
最后
以上就是英俊服饰为你收集整理的linux网卡驱动移植,Linux-3.0之CS8900网卡驱动移植的全部内容,希望文章能够帮你解决linux网卡驱动移植,Linux-3.0之CS8900网卡驱动移植所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复