添加CS8900到linux3

参考:  http://www.embedu.org/Column/Column382.htm

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 <mach/map.h>

修改
        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 <plat/map.h>

找到函数
        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、付费专栏及课程。

余额充值