我是靠谱客的博主 英俊服饰,最近开发中收集的这篇文章主要介绍linux网卡驱动移植,Linux-3.0之CS8900网卡驱动移植,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

将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网卡驱动移植所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部