Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1342576
  • 博文数量: 244
  • 博客积分: 1039
  • 博客等级: 少尉
  • 技术积分: 1562
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-06 09:40
文章分类

全部博文(244)

文章存档

2021年(2)

2019年(6)

2018年(2)

2014年(1)

2013年(187)

2012年(47)

分类: 嵌入式

2013-03-20 16:04:24

嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。

一、移植环境

  • 主  机:VMWare--Fedora 9
  • 开发板:Mini2440--64MB Nand
  • 编译器:arm-linux-gcc-4.3.2

二、移植步骤

1. 创建DM9000E设备IO资源到内核虚拟地址的映射,红色部分

#gedit arch/arm/mach-s3c2440/mach-smdk2440.c

static struct map_desc smdk2440_iodesc[] __initdata = {
        /* ISA IO Space map (memory space selected by A24) */
        {
            .virtual = (u32)S3C24XX_VA_ISA_WORD,
            .pfn = __phys_to_pfn(S3C2410_CS2),
            .length = 0x10000,
            .type = MT_DEVICE,
        }, {
            .virtual = (u32)S3C24XX_VA_ISA_WORD + 0x10000,
            .pfn = __phys_to_pfn(S3C2410_CS2 + (1<<24)),
            .length = SZ_4M,
            .type = MT_DEVICE,
        }, {
            .virtual = (u32)S3C24XX_VA_ISA_BYTE,
            .pfn = __phys_to_pfn(S3C2410_CS2),
            .length = 0x10000,
            .type = MT_DEVICE,
        }, {
            .virtual = (u32)S3C24XX_VA_ISA_BYTE + 0x10000,
            .pfn = __phys_to_pfn(S3C2410_CS2 + (1<<24)),
            .length = SZ_4M,
            .type = MT_DEVICE,
        }
, {
            .virtual = (u32)S3C2410_ADDR(0x02100300),
            .pfn = __phys_to_pfn(0x20000300),
            .length = SZ_1M,

            .type = MT_DEVICE,
       
 }
    };

2. 在设备初始化列表中添加对DM9000E设备的支持,红色部分

#gedit arch/arm/mach-s3c2440/mach-smdk2440.c

static struct platform_device *smdk2440_devices[] __initdata = {
        &s3c_device_usb,
        &s3c_device_lcd,
        &s3c_device_wdt,
        &s3c_device_i2c0,
        &s3c_device_iis,
        &s3c_device_rtc,
        &s3c_device_dm9000,

    };

3. 在内核中注册DM9000E设备,添加如下内容

#gedit arch/arm/plat-s3c24xx/devs.c

/* DM9000 registrations */
    #include <linux/dm9000.h>
    #define DM9000_BASE 0x20000300
    static struct resource s3c_dm9000_resource[] = {
        [0] = {
            .start = DM9000_BASE,
            .end = DM9000_BASE + 0x03,
            .flags = IORESOURCE_MEM,
        },
        [1] = {
            .start = DM9000_BASE + 0x04,
            .end = DM9000_BASE + 0x04 + 0x7c,
            .flags = IORESOURCE_MEM,
        },
        [2] = {
            .start = IRQ_EINT7,
            .end = IRQ_EINT7,
            .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
        }
    };

    static struct dm9000_plat_data s3c_device_dm9000_platdata = {
       .flags = DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM,
    };

    struct platform_device s3c_device_dm9000 = {
        .name= "dm9000",
        .id= 0,
        .num_resources= ARRAY_SIZE(s3c_dm9000_resource),
        .resource= s3c_dm9000_resource,
        .dev= {
            .platform_data = &s3c_device_dm9000_platdata, 
        }
    };

    EXPORT_SYMBOL(s3c_device_dm9000);


4. 在头文件中声明第三步中定义的s3c_device_dm9000

#gedit arch/arm/plat-s3c/include/plat/devs.h

5. 修改DM9000驱动源码,注意驱动是1.31版本。图片蓝色部分为添加或修改的内容

#gedit drivers/net/dm9000.c

6. 配置内核选项,使内核支持DM9000网卡。配置完后编译内核烧写到开发板上

Device Drivers --->
    [*] Network device support --->
        [*] Ethernet (10 or 100Mbit) --->
            -*- Generic Media Independent Interface device support
            < > ASIX AX88796 NE2000 clone support
            < > SMC 91C9x/91C1xxx support
            <*> DM9000 support
            (4) DM9000 maximum debug level
            [ ] Force simple NSR based PHY polling


7. 在文件系统中添加网络配置文件,使系统在开机过程中自动完成对网卡的配置

   1)在文件系统/etc/net.conf文件中添加内容

IPADDR=192.168.1.105
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
MAC=10:23:45:67:89:ab

   2)在文件系统/sbin/目录下新建一个可执行的脚本文件net_config,注意文件的权限(可执行)

#!/bin/sh
echo Try to bring eth0 interface up ...>/dev/s3c2410_serial0
if [ -f /etc/net.conf ] ; then
    source /etc/net.conf
    ifconfig eth0 down
    ifconfig eth0 hw ether $MAC
    echo ifconfig eth0 hw ether $MAC >/dev/s3c2410_serial0
    ifconfig eth0 $IPADDR netmask $NETMASK up
    echo ifconfig eth0 $IPADDR netmask $NETMASK up >/dev/s3c2410_serial0
    route add default gw $GATEWAY
    echo add default gw $GATEWAY >/dev/s3c2410_serial0
else
    ifconfig eth0 hw ether 10:23:45:67:89:ab
    ifconfig eth0 192.168.1.105 netmask 255.255.255.0 up
    route add default gw 192.168.1.1
    echo ifconfig eth0 hw ether 10:23:45:67:89:ab >/dev/s3c2410_serial0
    echo ifconfig eth0 192.168.1.105 netmask 255.255.255.0 up >/dev/s3c2410_serial0
    echo route add default gw 192.168.1.1 >/dev/s3c2410_serial0
fi
echo Done > /dev/s3c2410_serial0

   3)在文件系统/etc/init.d/rcS文件中添加网络配置语句

/sbin/ifconfig lo 127.0.0.1     #设置本地回环设备的IP地址
net_config&                     #执行上面的net_config文件对网卡进行设置

8. 在文件系统中添加完上述网卡配置信息后重新编译文件系统下载到开发板,系统上电启动后就会对网卡自动配置,并执行#ifconfig命令可以看到网卡的配置信息

9. 测试与主机的通信,开发板的IP地址可以在/etc/net.conf中修改


 

阅读(732) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~