u-boot 1.1.5 移植成功
哈哈,没想到现阶段的移植就是东拼西凑,多亏u-boot丰富的驱动,先辈们辛勤的劳动成果啊 ^_^
板子是GX-ARM9-2410EP增强型嵌入式教学实验系统,相当垃圾,资料缺少、不全不说,还骗人,两块Nor Flash,SST 39VF800A、INTEL E28F320,分明是1M和4M大小,偏说成2M AMD线性FLASH和8M Intel线性FLASH,我就奇怪学校怎么回买这种东西...
言归正传,下面是具体的移植过程:
1.硬件 s3c2410 ,64M SDRAM,INTEL E28F320 4M Nor Flash ,CS8900和DM9000双网卡(暂用CS8900);
2.基本配置,使用#make s3c2410_config 。这时的板已经可以启动,可以通过网卡下载内核,可以设置启动参数启动 Linux2.6了,但还不能读写Nor Flash,存储环境变量。
3.配置Nor Flash,主要是修改 board/s3c2410/flash.c 。用 Source-Navigator 或者 grep 可以找到很多带INTEL E28F320驱动的flash.c文件。这里参考http://www.sjsunny.com/jsfw/Linux/06.htm ,将board/CMI/flash.c的Nor Flash借过来。删除write_short()和wirte_buff()函数,将board/ep7312/flash.c的wirte_word()和wirite_buff()函数拷过来(与CMI的写机制不通)。加入以下语句:
#defin ASH_BASE0_PRELIM CFG_FLASH_BASE
修改FLASH_BLOCK_SIZE为0x20000(块大小128K)。修改 include/s3c2410.h ,可以在最后的 #endif /* __CONFIG_H */ 前添加以下常量定义来覆盖原来的值:
#define PHYS_FLASH_SIZE 0x01000000 /* 16 MB */
#define CFG_FLASH_BASE PHYS_FLASH_1
#define CFG_MONITOR_BASE PHYS_FLASH_1
#define CFG_MAX_FLASH_SECT 128 /* 128K*128=16M */
#define CFG_FLASH_ERASE_TOUT (2*CFG_HZ) /* Timeout for Flash Erase */
#define CFG_FLASH_WRITE_TOUT (2*CFG_HZ) /* Timeout for Flash Write */
#define CFG_ENV_IS_IN_FLASH 1
#define CFG_ENV_ADDR (PHYS_FLASH_1 + 0x80000) /* 变量存放地址 */
#define CFG_ENV_SIZE 0x20000 /* 变量存放空间的大小,应和块大小一致,不然saveenv时提示边界问题。 */
至此,Nor Flash已完全驱动起来。
WEIBING # saveenv
Saving Environment to Flash...
Un-Protected 1 sectors
Erasing Flash...
...............................................................................e
Erased 1 sectors
Writing to Flash... done
Protected 1 sectors
WEIBING #
4.DM9000网卡驱动移植,有100M的不用总觉得不爽 ^_^
这一步可以参考 include/configs/scb9328.h 这个文件,删除CS8900的定义,添加以下语句:
#define CONFIG_DRIVER_DM9000 1
#define CONFIG_DM9000_BASE 0x0a000300
#define DM9000_IO CONFIG_DM9000_BASE
#define DM9000_DATA (CONFIG_DM9000_BASE+4)
#define CONFIG_DM9000_USE_16BIT
最主要是 CONFIG_DM9000_BASE 这个地址的值,有硬件的接线决定,最后的300是DM9000复位后默认工作方式为I/ O 连接的基址,可以参考 http://msa.vnu.edu.tw/~merlin/932embed/tftp.ppt 。
5.关于flash刷写。配置好的flash信息如下,
WEIBING # flinfo
Bank # 1: Intel 28F320J3A (32Mbit) 16-Bit
Size: 4 MB in 32 Sectors
Sector Start Addresses:
00000000 (RO) 00020000 00040000 00060000 00080000 (RO)
000A0000 000C0000 000E0000 00100000 00120000
00140000 00160000 00180000 001A0000 001C0000
001E0000 00200000 00220000 00240000 00260000
00280000 002A0000 002C0000 002E0000 00300000
00320000 00340000 00360000 00380000 003A0000
003C0000 003E0000
u-boot和参数存放的00000000块和00080000块都标记为只读,修改需要先关闭flash 保护,如烧写u-boot自身:
WEIBING # tftpboot 30008000 u-boot.bin
dm9000 i/o: 0xa000300, id: 0x90000a46
MAC: 00:80:00:80:00:80
could not establish link ( 这里好像有问题,反应很慢,但传输速度真的比CS8900的10M快多了^_^ )
TFTP from server 202.192.33.100; our IP address is 202.192.33.120
Filename 'u-boot.bin'.
Load address: 0x30008000
Loading: #####################
done
Bytes transferred = 106548 (1a034 hex)
protect off all
......
erase 0 1a0ff
......
cp.b 30008000 0 1a0ff
......
reset
......
使用一段时间后,感觉u-boot与ppcboot相比进步很大,功能丰富且稳定。好,bootloader也暂告一段落,内核、内核...
