当前位置: > 华清远见教育科技集团 > 嵌入式学习 > 讲师博文 > Linux3.4内核网卡驱动的移植
Linux3.4内核网卡驱动的移植
时间:2016-12-13作者:华清远见

【实验目的】

通过上一篇文章我们能够获得一个内核,但是这个内核只是一个基本的配置,很多的功能并没有包含。

网卡是嵌入式产品常用的设备,这里我们需要完成网卡驱动的移植。FS_S5PC100使用的是DM9000网卡,我们通过这个实验能够了解如何在内核中添加网卡驱动及网络功能的基本配置。

【实验环境】

  ·  主机:Ubuntu 10.10 (64bit);
          ·  目标机:FS_S5PC100平台;
          ·  交叉编译工具链:arm-eabi-4.4.0(Android4.0.4自带交叉工具链);

【实验步骤】

1. 平台代码修改

修改板级配置文件;

$ vim arch/arm/mach-s5pc100/mach-smdkc100.c

添加需要的头文件:

1 // vim arch/arm/mach-s5pc100/mach-smdkc100.c
        2
        3 #if defined (CONFIG_DM9000)
        4 #include <linux/dm9000.h>
        5 #include <linux/irq.h>
        6 #endif

平台设备的添加:

01 /* DM9000 Support */
        02
        03
#if defined(CONFIG_DM9000)
        04 static struct resource dm9000_resources[] = {
        05     [0] = {
        06         .start     = 0x88000000,
        07         .end     = 0x88000000 + 0x3,
        08         .flags     = IORESOURCE_MEM,
        09     },
        10     [1] = {
        11         .start     = 0x88000000 + 0x4,
        12         .end     = 0x88000000 + 0x4 +0x3,
        13         .flags     = IORESOURCE_MEM,
        14     },
        15     [2] = {
        16         .start     = IRQ_EINT(10),
        17         .end     = IRQ_EINT(10),
        18         .flags     = IORESOURCE_IRQ | IRQ_TYPE_LEVEL_HIGH,
        19     },
        20 };
        21
        22 static struct dm9000_plat_data s5pc100_dm9000_platdata = {
        23     .flags     = DM9000_PLATF_16BITONLY,
        24     .dev_addr[0] = 0x00,
        25     .dev_addr[1] = 0x00,
        26     .dev_addr[2] = 0x3e,
        27     .dev_addr[3] = 0x26,
        28     .dev_addr[4] = 0x0a,
        29     .dev_addr[5] = 0x00,
        30 };
        31
        32 static struct platform_device s5pc100_device_dm9000 = {
        33     .name = "dm9000",
        34     .id = -1,
        35     .num_resources = ARRAY_SIZE(dm9000_resources),
        36     .resource = dm9000_resources,
        37     .dev = {
        38                 .platform_data = & s5pc100_dm9000_platdata,
        39     }
        40 };
        41 #endif

平台设备列表的添加:

在smdkc100_devices[]结构体数组中添加如下内容:

1 // vim arch/arm/mach-s5pc100/mach-smdkc100.c
        2
        3
#ifdefined(CONFIG_DM9000)
        4 &s5pc100_device_dm9000,
        5 #endif

配置内核

$ make menuconfig

    网络配置:

[*] Networking support (NEW) --->
             Networking options --->
                     <*> Packet socket
                     <*>Unix domain sockets
                     [*] TCP/IP networking
                             [*] IP: multicasting
                             [*] IP: kernel level autoconfiguration
                             [*] IP: BOOTP support
                             <> The ipv6 protocol

    网卡驱动配置:

Device Drivers --->
              [*] Network device support --->
                    [*] Ethernet driver support --->
                        <*> DM9000 support

    网络文件系统的配置:

File systems --->
            [*] Network File Systems --->
    &nbsnbsp;             <*> NFS client suppor
                  [*] NFS client support for NFS version 3
                  [*] NFS client support for the NFSv3 ACL protocol extension
                  [*] Root file system on NFS

编译内核

编译内核,并拷贝到tftpboot目录下。

$ make zImage
        $ cp arch/arm/boot/zImage /tftpboot

测试

启动开发板,修改内核启动参数,通过NFS方式挂载根文件系统。

发表评论
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)