Chinaunix首页 | 论坛 | 博客
  • 博客访问: 564703
  • 博文数量: 127
  • 博客积分: 1169
  • 博客等级: 少尉
  • 技术积分: 1298
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-16 14:29
个人简介

空白

文章分类

全部博文(127)

分类: LINUX

2012-04-14 14:26:49

一、移植环境
1. 内核源码版本: linux-2.6.31.1
2. 交叉编译器版本: arm-linux-gcc 4.3.3
3. Linux环境:redhat enterprise 5.5 (2.6.18-194.el5)
4. 开发板:TQ2440
二、移植过程
说明:我将linux内核源码解压在redhat enterprise 5.5的/opt目录下,下面所有对文件的修改都是linux-2.6.31.1源代码中的文件。移植之前,内核,文件系统的移植都已经完成。

1. 修改arch/arm/mach-s3c2440/mach-smdk2440.c文件,在platform_device结构体中增加下面1行
    &s3c_device_dm9000, /* DM9000 */
2. 修改arch/arm/mach-s3c2440/mach-smdk2440.c,增加如下内容:

点击(此处)折叠或打开

  1. #include <linux/dm9000.h>
  2. static struct resource s3c_dm9k_resource[] = {
  3.     [0] = {
  4.         .start = S3C2410_CS4,
  5.         .end = S3C2410_CS4 + 3,
  6.         .flags = IORESOURCE_MEM,
  7.     },
  8.     
  9.     [1] = {
  10.         .start = S3C2410_CS4 + 4,
  11.         .end = S3C2410_CS4 + 4 + 3,
  12.         .flags = IORESOURCE_MEM,
  13.     },
  14.     
  15.     [2] = {
  16.         .start = IRQ_EINT7,
  17.         .end = IRQ_EINT7,
  18.         .flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING,
  19.     },
  20. };    

  21. static struct dm9000_plat_data s3c_dm9k_platdata = {
  22.     .flags = DM9000_PLATF_16BITONLY,
  23. };

  24. struct platform_device s3c_device_dm9000 = {
  25.     .name = "dm9000",
  26.     .id = 0,
  27.     .num_resources = ARRAY_SIZE(s3c_dm9k_resource),
  28.     .resource = s3c_dm9k_resource,
  29.     .dev = {
  30.         .platform_data = &s3c_dm9k_platdata,
  31.     },
  32. };
4. 修改drivers/net/dm9000.c文件,
(1) #include "dm9000.h"后增加头文件

点击(此处)折叠或打开

  1. #if defined(CONFIG_ARCH_S3C2410)
  2. #include <mach/regs-mem.h>
  3. #endif
(2) 在dm9000_probe接口中
     int iosize;
     int i;
     u32 id_val;
     增加:

点击(此处)折叠或打开

  1. #if defined(CONFIG_ARCH_S3C2410)
  2.     unsigned int oldval_bwscon = *(volatile unsigned int *)S3C2410_BWSCON;
  3.     unsigned int oldval_bankcon4 = *(volatile unsigned int *)S3C2410_BANKCON4;
  4. #endif
    dev_dbg(&pdev->dev, "dm9000_probe()\n");
     后增加

点击(此处)折叠或打开

  1. #if defined(CONFIG_ARCH_S3C2410)
  2. *((volatile unsigned int *)S3C2410_BWSCON) = (oldval_bwscon & ~(3<<16)) | S3C2410_BWSCON_DW4_16 | S3C2410_BWSCON_WS4 | S3C2410_B
  3. WSCON_ST4;
  4. *((volatile unsigned int *)S3C2410_BANKCON4) = 0x1f7c;
  5. #endif
    db->mii.mdio_write   = dm9000_phy_write;
    后修改代码:

点击(此处)折叠或打开

  1. #if defined(CONFIG_ARCH_S3C2410)
  2.         printk("Now use the default MAC address: 08:90:90:90:90:90\n");
  3.         mac_src = "S3C2440";
  4.         ndev->dev_addr[0] = 0x08;
  5.         ndev->dev_addr[1] = 0x90;
  6.         ndev->dev_addr[2] = 0x90;
  7.         ndev->dev_addr[3] = 0x90;
  8.         ndev->dev_addr[4] = 0x90;
  9.         ndev->dev_addr[5] = 0x90;
  10. #else
  11.         mac_src = "eeprom";

  12.         /* try reading the node address from the attached EEPROM */
  13.         for (i = 0; i < 6; i += 2)
  14.                 dm9000_read_eeprom(db, i / 2, ndev->dev_addr+i);

  15.         if (!is_valid_ether_addr(ndev->dev_addr) && pdata != NULL) {
  16.                 mac_src = "platform data";
  17.                 memcpy(ndev->dev_addr, pdata->dev_addr, 6);
  18.         }

  19.         if (!is_valid_ether_addr(ndev->dev_addr)) {
  20.                 /* try reading from mac */

  21.                 mac_src = "chip";
  22.                 for (i = 0; i < 6; i++)
  23.                         ndev->dev_addr[i] = ior(db, i+DM9000_PAR);
  24.         }

  25.         if (!is_valid_ether_addr(ndev->dev_addr))
  26.                 dev_warn(db->dev, "%s: Invalid ethernet MAC address. Please "
  27.                          "set using ifconfig\n", ndev->name);
  28. #endif
   out:
   后增加代码

点击(此处)折叠或打开

  1. #if defined(CONFIG_ARCH_S3C2410)
  2. *(volatile unsigned int *)S3C2410_BWSCON = oldval_bwscon;
  3. *(volatile unsigned int *)S3C2410_BANKCON4 = oldval_bankcon4;
  4. #endif
5. 以上4步完成后,即完成了对dm9000驱动的添加

6. 配置内核,支持网卡:
shell中运行make menuconfig,找到Device Drivers项
 Device Drivers  --->
    [*] Network device support  --->
        [*] Ethernet (10 or 100Mbit)  --->
            <*>   DM9000 support
            (4)     DM9000 maximum debug level
 配置完成后,保存退出。
 
7. 重新编译内核,运行:
 make zImage
 编译完成后会在arch/arm/boot/目录下生成zImage文件,这个文件就是编译好的内核文件,
 烧到开发板nand flash中就可以了。
 
8. 配置系统启动时启用网卡(这里要启动开发板,登录开发板linux系统后,对系统内的/etc/init.d/rcS文件进行修改)
由于之前在移植buybox时,没有对网络进行配置,所以在移植完
dm9000后,在系统启动脚本增加开发板IP地址配置,这里简单的在/etc/init.d/rcS脚本中添加网络配置。
编辑/etc/init.d/rcS文件,添加下面内容:
/sbin/ifconfig lo 127.0.0.1 up 
/sbin/ifconfig eth0 192.168.1.8 netmask 255.255.255.0 up
/sbin/route add default gw 192.168.1.1 eth0
保存,退出。

9. 重启开发板,启动时输出:
dm9000 Ethernet Driver, V1.31
Now use the default MAC address: 08:90:90:90:90:90
eth0: dm9000e at c4810300,c4814304 IRQ 51 MAC: 08:90:90:90:90:90 (MY2440)
连接好计算机与开发板之间的网线,如果开发板网卡灯亮起来,说明已经连接好了。
从计算机ping开发板,就可以了。

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