Chinaunix首页 | 论坛 | 博客
  • 博客访问: 182020
  • 博文数量: 26
  • 博客积分: 1416
  • 博客等级: 上尉
  • 技术积分: 176
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-18 15:59
文章分类
文章存档

2011年(3)

2010年(23)

我的朋友

分类: 嵌入式

2010-07-21 21:21:27

文件: u-boot-2008.10.part01.rar
大小: 5000KB
下载: 下载
 
文件: u-boot-2008.10.part02.rar
大小: 5000KB
下载: 下载
文件: u-boot-2008.10.part03.rar
大小: 4088KB
下载: 下载
   今天成功的在天嵌TQ2440的板子上完成了U-BOOT -DM9000网卡驱动的移植!
 
   实验使用的是国嵌实验4-2-4修改过的源码(u-boot-basic.tar.gz)
   具体步骤如下:
 
mkdir 4-2-4
cp u-boot-basic.tar.gz 4-2-4/
cd 4-2-4
tar zxvf u-boot-basic.tar.gz
 
 
1、修改U-BOOT源码顶层目录的Makefile
 
cd 4-2-4/u-boot-2008.10/
vim Makefile
 
/*参考SMDK2410,添加新的配置选项*/
TQ2440_config : unconfig
    @./mkconfig $(@:_config=) arm arm920t TQ2440 NULL s3c24x0
 
保存退出
 
2、配置TQ2440.h
 
cd 4-2-4/u-boot-2008.10/
cd include/configs/
cp mini2440.h TQ2440.h
 
vim TQ2440.h
 
……
/*修改开发板型号*/
#define CONFIG_ARM920T 1   //保持不变
#define CONFIG_S3C2440 1   //保持不变
#define CONFIG_TQ2440  1   //修改原来的#define CONFIG_mini2440
……
/*修改网卡选项,屏蔽掉CS8900的部分*/
//#define CONFIG_DRIVER_CS8900 1
//#define CS8900_BASE 0x19000300
//#define CS8900_BUS16 1
 
/*添加DM9000的支持*/
#define CONFIG_DRIVER_DM9000 1
#define CONFIG_DM9000_BASE 0x20000300 //查DM9000芯片手册
#define DM9000_IO CONFIG_DM9000_BASE  //查天嵌TQ2440电路原理图
#define DM9000_DATA (CONFIG_DM9000_BASE+4)
#define CONFIG_DM9000_USE_16BIT
 
……
……
/*添加U-BOOT支持的命令,特别是PING命令*/
#include  
#define CONFIG_CMD_CACHE
#define CONFIG_CMD_DATE
#define CONFIG_CMD_ELF
#define CONFIG_CMD_PING   //添加PING命令支持
 
……
/*修改环境变量*/
#define CONFIG_ETHADDDR 00:01:02:03:04:05
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 192.168.0.61
#define CONFIG_SERVERIP 192.168.0.60
 
………
/*去掉上一实验注释掉的BOOTCOMMAND*/
#define CONFIG_BOOTCOMMAND "tftp;bootm"
 
……
/*修改提示符*/
#define CFG_PROMPT "TQ2440"  //把原来的mini240改为TQ2440
 
……
修改完成,保存退出
 
 
3、在board目录中创建属于TQ2440开发板的目录,并添加相应的文件
 
mkdir -p board/TQ2440
cp -a board/mini2440/* board/TQ2440
 
cd board/TQ2440
mv mini2440 TQ2440   //修改为TQ2440相应的文件
 
保存退出
 
 
/*修改/board/TQ2440目录下的Makefile*/
 
……
  LIB = $(obj)lib$(BOARD).a
 
COBJS   := TQ2440.o flash.o  //mini2440改为TQ2440
SOBJS   := lowlevel_init.o
……
 
保存退出
ls
可以看到TQ2440目录下有config.mk, flash.c,  lowlevel_init.S, Makefile, TQ2440.c, u-boot.lds 6个文件。
 
4、修改cpu/arm920t/s3c24x0/interrups.c
 
vim cpu/arm920t/s3c24x0/interrups.c
在182行指令处添加TQ2440开发板的支持:
#if defined(CONFIG_SMDK2400) || defined (CONFIG_TRAB)
     tbclk = timer_load_val * 100;
#elif defined(CONFIG_SBC2410X) || \
      defined(CONFIG_SMDK2410) || \
      defined(CONFIG_MINI2440) || \
      defined(CONFIG_TQ2440) || \
      defined(CONFIG_VCMA9) || \
    tbclk = CFG_HZ;
  ……
 
保存退出
 
 
5、修改完成,开始编译
 
make TQ2440_config
 
make CROSS_COMPILE=arm-linux-
 
把编译后在顶层目录生成的u-boot.bin通过SAMBA拷出来,通过JTAG或JLINK烧到开发板!
 
---------------
---------------
链接好串口,设置好波特率,端口等参数,启动开发板
 
设置MAC地址,IP地址等参数
使用Ping命令测试,ping 192.168.0.60 成功Ping到虚拟机。
 

 
扩展测试:
通过tftp下载移植好的支持NFS根文件系统的内核uImage-nfs
tftp 30000000 uImage-nfs
 

 
 
使用bootm命令启动系统
bootm 30000000
 
成功启动系统,如下图:
 

 
——————————————————————————————
完善:
(1)网卡的MAC地址与你设置的不一样
(2)会有“
could not establish link” 的提示,而且在显示MAC地址后很久后才响应。
 
参考
 
修正BUG(修改/drivers/dm9000.c文件)
-------------------------------
具体修改如下:
 
vim dirivers/net/dm9000x.c
修改如下,屏蔽掉红色字体部分
 
eth_init(bd_t * bd)
{
    ......

   DM9000_iow(DM9000_IMR, IMR_PAR);

     #if 0
     i = 0;
     while (!(phy_read(1) & 0x20)) { /* autonegation complete bit */
         udelay(1000);
         i++;
         if (i == 10000) {
             printf("could not establish link\n");
             return 0;
         }
     }

    /* see what we've got */
     lnk = phy_read(17) >> 12;
     printf("operating at ");
     switch (lnk) {
     case 1:
         printf("10M half duplex ");
        break;
     case 2:
         printf("10M full duplex ");
        break;
     case 4:
         printf("100M half duplex ");
     break;
     case 8:
         printf("100M full duplex ");
         break;
     default:
         printf("unknown: %d ", lnk);
         break;
     }
     printf("mode\n");
     
     #endif
 
    return 0;
 }
 
重新编译,再烧写,问题解除。
阅读(3258) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~