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也暂告一段落,内核、内核...

评论
你好!我现在在做关于开发板与PC机用USB传输数据的部分,思路是用usb slave模拟成串口与PC机进行数据传输,可是在编译s3c2410_udc.c文件时提示memory中的gadgets的成员dev里的init_name没有正确初始化,请问该怎么解决啊~能发一份详细的资料给我吗,谢谢~
请教:串口不停打印乱码,用axd调试程序停留在main_loop循环,考虑问题复位向量0x80000050(向量表首地址)无法移植到ram中的地址0x8106050(期望值)
嵌入DM9000AEP请进入本公司提供的 PDF
网卡 DM9000AEP 全新原装供应(007版本) 电话:0755-61329316/61329587
ping failed, 192.168.89.19 is not live
我也是这个问题,板子ping主机时这样显示的,而且板子也ping不同自己,希望博主给点建议
问个菜鸟问题,怎么判断网卡是接到BANKN上啊,是根据什么判断的,我的接的数据线是lDATA0-LDATA15,谢谢!
博主:你好!我在S3c2410上移植uboot1.3.1网卡是DM9000AEP,没有nor flash,两片三星的32M nand flash,现在移植差不多了。只是板子ping不通主机,而且插上交叉线网卡LED也不亮,只是ping的时候亮一下就灭了,提示
host 192.168.7.6 not alive
请问是不是网卡驱动的问题,我就是用的uboot里的DM9000的驱动没有改,谢谢
你好^_^看了你的BLOG,覺得你挺強的~
想請問你個問題,你在Linux上移植過2410的UDC驅動嗎?
我搞了好幾天都搞不定,s3c2410_udc.c可以編譯成功并insmod,但一進入中斷就出現Oops錯誤:(
可以的話,加我QQ:27288201或MSN:xy.1001@hotmail.com,謝謝:)
用了md命令显示0x18000300内容,如果有的或它是不是显示DM9000,显示如下,好像没有显示出来,不知这代表是什么意思:
.............
In: serial
Out: serial
Err: serial
dm9000 not found at 0x18000300 id: 0x00000000
MAC: 00:00:00:00:00:00
could not establish link
SMDK2410 # md 0x18000300
18000300: 10001000 30003000 9a009a00 9a009a00 .....0.0........
18000310: 99009900 9a009a00 9a009a00 9a009a00 ................
18000320: 99009900 9a009a00 9a009a00 9a009a00 ................
18000330: 99009900 9a009a00 9a009a00 9a009a00 ..............
另外我的芯片是DM9000E,用的是u-boot-1.1.4,是不是不用改动dm9000x.c和dm9000x.h文件?我现在smdk2410.h中添加了以上的宏,在board.c 中只加了int eth_init()函数,没改lowlevel_init.S中的bank3的默认设置...
版主,有邮箱不?要不我把我的改动文件board.c、smdk2410.h和lowlevel_init.S发给你看看???
版主你好,我在看到chenyuan网友的题问,我现在也出现它一样的问题:
U-Boot 1.1.4 (Jan 21 2008 - 01:28:30)
U-Boot code: 33F80000 -> 33F99A50 BSS: -> 33F9DC30
RAM Configuration:
Bank #0: 30000000 64 MB
Flash: 2 MB
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
dm9000 not found at 0x18000300 id: 0x00000000
MAC: 00:00:00:00:00:00
could not establish link
SMDK2410 #
也是找不到网卡,lowlevel_init.c的bank3默认接网卡,我的实验箱也是接bank3的,所以我没修改,只改动了以下地方:
在smdk2410.h中添加版主上面所说的宏:
#define CONFIG_DRIVER_DM9000 1
#define CONFIG_DM9000_BASE 0x18000300
#define DM9000_IO CONFIG_DM9000_BASE
#define DM9000_DATA (CONFIG_DM9000_BASE+4)
#define CONFIG_DM9000_USE_16BIT
然后在board.c原来用到CS89000的地方相应添加如下内容:
#ifdef CONFIG_DRIVER_DM9000
extern int eth_init(bd_t * bd);
#endif
#ifdef CONFIG_DRIVER_DM9000
eth_init(gd->bd);
#endif
烧去后,就出现找不到DM9000,是不是还有什么地方没修改,请指导,谢谢!!!
你可以打印一些原来附带的系统关于dm9000的相关信息吗?
你在原来的u-boot上用命令md 0x18000300看看有没有dm9000的id
(2008-01-23 10:31:22)
博主你好:
我最近也在做s3c2440下的udc驱动,下了H1940的udc补丁,但是我发现在H1940的补丁去掉了udc_disable和udc_enable两个函数,这样在probe的时候就不会调用了,我想知道这样会不会产生问题呢? 如果您用的补丁和我的不同,麻烦你能否给我发一份?
s3c2440的补丁我没试过,只是粗略的看了看代码^_^
至于有没有问题,开机试一下能用否不久OK?
(2008-01-23 10:10:02)
你好,s3c2410_udc.c问题怎么解决的?
网上已有完整的补丁,你可以参考handhelds.org里hp1940的补丁包。
(2007-12-16 17:01:29)
用CS8900好幸福啊 资料好多 我用的是
lan91c111 已经在这上面困顿了4天了……
哈哈,人家说艰难可以育人啊^_^
得到太容易,很难会珍惜...
(2007-10-28 15:48:33)
楼主,请问我的uboot它运行到Hit any key to stop autoboot: 5 停止,跟踪了下它是在udelay函数里的while (get_timer_masked () < tmo) /*NOP*/;这个地方停止了,你能不能根我说说这部分的时钟部分,我看了好久就是没看明白,麻烦楼主了
^_^实在抱歉,近段时间没机会接触U-boot
(2007-10-28 15:30:51)
楼主,还就没来这了,还是很热闹。我现在又有个问题:就是以前我的uboot烧写好后,它只能打印出
U-Boot 1.2.0 (Sep 30 2007 - 17:02:44)
DRAM: 8 MB
Flash: 2 MB
请问这是什么问题?我把mem_malloc_init (_armboot_start - CFG_MALLOC_LEN)屏蔽掉,在那Hit any key to stop autoboot: 5又停止了,它没有继续倒数下去,望楼主赐教
真不好意思,最近太忙了,没时间看啊。。。
(2007-10-28 15:20:45)
s3c2410_udc.c搞了三天了,还没搞定,由于太占版面,因此没贴到这里,发到你邮箱里了,到时后解决了,在贴出来,希望你帮我看看,该如何解决
已给你发邮件,注意虚拟地址的映射就可以了^_^
(2007-10-07 22:21:27)
谢谢楼主的回复:
我的网卡上的led都不亮,可能是什么原因啊?谢谢你的回复!
驱动根本就不工作--_--
(2007-10-07 22:25:06)
版主,我的网卡ping 不通PC,老出现“ping failed, 192.168.89.19 is not live”
但我的IP主机明明是通的,请问它可能是由哪些问题引起的?
你先用wireshark监视一下u-boot是否有发出arp和ping等数据包
(2007-09-18 15:10:38)
谢谢楼主的回复,上次说到uboot的网卡cs8900不用中断设置,这我不懂,你能给我详细说下吗?因为我在硬件上是把它连在PG3的EINT3上的,不设中断,它怎么去找网卡?
楼主,如果不介意,我能不能在QQ上跟你聊下,我QQ是494907272
u-boot可以轮询,因为他很单纯^_^
(2007-09-18 15:09:19)
您好:
我用u-boot-1.1.4做移植,我扳子上的以太网芯片是DM9000E,控制器的工作基址为:0x300,片选线得到的32位地址为:0x18000300(地址端口),0x18000304(数据端口),DM9000E的地址范围为:0x18000000~0x1fffffff
我在include/configs/smdk2410.h中将CONFIG_DM9000_BASE 0x18000000或0x18000300,将编译的u-boot.bin下到扳子上,启动时出现:
U-Boot code: 33F80000 -> 33F98F44 BSS: -> 33F9D0CC
Bank #0: 30000000 64 MB
Flash: 2 MBcmcia_regist
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 0
dm9000 not found at 0x18000300 id: 0x00000000
MAC: 00:00:00:00:00:00
出现dm9000 not found,是不是地址有问题啊?,麻烦您帮我看看,原因出在那?谢谢了!
weibing 回复 chenyuan 说:
这就奇怪,u-boot的smdk2410平台默认的网卡就接在bank3,已经初始化好了,你有测试过网卡的连接没问题吗?
(2007-09-15 09:44:50)
谢谢您的回复,网卡是好用的,我用的是周立功的实验箱,公司原先提供的方式,网卡是可以用的,用的是flashfxp进行上传的。我现在想把u-boot移植上去,但是出现了上面的问题。您能给我指导一下可能问题出在那吗?谢谢!
我qq:395373563
email:chen_weifeng@126.com
这个是问题?
原则上硬件正常的话,配置好BWSCON就可以读网卡的id了。
BWSCON跟你的硬件有关,如总线宽度和等待时间等,你查查这里吧。
另外现在你网卡上的led亮吗?
(2007-09-18 15:08:34)
版主,请问我用EINT3来控制CS8900a,我除了要修改它的IObase和确定bus16,bankcon3外,还要不要修改cpu/*/interrupts.c下的enable_interrupts()和增加cs8900a的中断使能函数,恳求版主相告,我已经没有路了,望版主成全。
u-boot下的cs8900和dm9000都不用中断设置的。
(2007-09-15 09:03:39)
您好:
我用u-boot-1.1.4做移植,我扳子上的以太网芯片是DM9000E,控制器的工作基址为:0x300,片选线得到的32位地址为:0x18000300(地址端口),0x18000304(数据端口),DM9000E的地址范围为:0x18000000~0x1fffffff
我在include/configs/smdk2410.h中将CONFIG_DM9000_BASE 0x18000000或0x18000300,将编译的u-boot.bin下到扳子上,启动时出现:
U-Boot code: 33F80000 -> 33F98F44 BSS: -> 33F9D0CC
Bank #0: 30000000 64 MB
Flash: 2 MBcmcia_regist
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 0
dm9000 not found at 0x18000300 id: 0x00000000
MAC: 00:00:00:00:00:00
出现dm9000 not found,是不是地址有问题啊?,麻烦您帮我看看,原因出在那?谢谢了!
这就奇怪,u-boot的smdk2410平台默认的网卡就接在bank3,已经初始化好了,你有测试过网卡的连接没问题吗?
(2007-09-15 09:44:50)
楼主,我的flash的信息为AMD AM29LV160B (16 Mbit, bottom boot sect)
Size: 2 MB in 35 Sectors
Sector Start Addresses:
00000000 00004000 00006000 00008000 00010000
00020000 E 00030000 E 00040000 00050000 E 00060000 E
00070000 E 00080000 E 00090000 E 000A0000 E 000B0000 E
000C0000 E 000D0000 E 000E0000 000F0000 00100000
00110000 00120000 00130000 00140000 00150000
00160000 00170000 00180000 00190000 001A0000
001B0000 001C0000 001D0000 001E0000 001F0000
当我
#define CFG_ENV_OFFSET 0x40000
时,编译出来的u-boot.bin是107k.但当我把它定义为0x4000时,它就有173k了,请问楼主这是怎么回事?
再就是我每次重新烧写u-boot.bin后,FLASH的环境变量还是烧写前的记录,烦请楼主赐教。
第一个不知是什么回事,第二个因为环境变量是存在另外的块上,所以重新烧写后仍存在。
(2007-09-14 23:14:08)
谢谢楼主,我网卡已经通了,不过还是没找到原因,因为我只是重新移植了一遍,这次一试就通了。我还想请教楼主一个问题:CFG_MEMTEST_START和CFG_MEMTEST_END有什么作用,他们的值根据什么来设;CFG_LOAD_ADDR的意思也不是很懂;CFG_FLASH_ADDR0这是什么意思;CFG_ENV_OFFSET,CFG_ENV_SIZE的设置。麻烦楼主帮我解答下
这个,字面上已经很清楚了,MEMTEST当然就是内存测试的范围,CFG_LOAD是内核加载地址,CFG_FLASH、CFG_ENV分别是flash和环境参数的地址。
(2007-09-14 23:11:19)
斑竹你好:
我现在44b0上做uboot1。4的的移植。网卡用的是cs8900a,但现在找不到该网卡的ID号(0x630E),请问我的问题出在哪儿?我用的是uboot自带的那个cs8900驱动,要不要增加中断这块函数,我把它加在bank3上
我没用过44b0,不过我猜找不到网卡的原因有:1.bank寄存器未初始化,2.你的u-boot配置有误,3.网卡真的有问题^_^,一句找不到很难说清原因
(2007-09-10 20:10:44)
斑竹你好!
我刚开始学嵌入式Linux不久,最近实验室里由于项目原因购来一块上海勤研公司做的S3C2440开发板,我就拿过来玩玩。开发板上只提供了vivi,我想移植u-boot-1.1.5到开发板上去。我在网上搜了好多有关移植的文章看,当然也包括你的,我把我可以做的都做了,修改时钟频率、串口波特率等等,编译也通过了,但烧写到板子以后串口没有反映。请问斑竹有没有用过Multi-ICE仿真器调试过UBOOT,因为我这里还有一个仿真器,但不知道怎么在Windows下面编译Linux下用Makefile控制的文件,请指教。
windows下编译Linux的文件有很多方法,最简单是装个Linux虚拟机直接在上面编译,完后通过网络传给windows。
u-boot编译后有个u-boot的文件,改名为u-boot.axf可以直接调试,当然你的开发板要做相应的初始化。
(2007-09-04 22:10:29)
我使用的是ZLG的easyarm2200最近也移植了UBOOT1.1.4,能够正常启动,部分指令可以正常使用,但出现了下面两个问题:
1。在使用SAVEENV时死机
Saving Environment to Flash...
就在没有反映了,只能重启
2。在使用TFTP下载A.BIN文件时报错
下载14K的UCOS2的BIN
文件时用tftp 0x81010000 a.bin
Loading: packet too big!
packet too big!
请大侠帮我解答!
我的硬件环境是2Mflash=0x80000000
512ksram=0x81000000,
uboot加载到81060000
1。说明你的驱动或者环境参数的配置有问题。
2。没看过你的驱动,不知哪里出错,你有下载过<1.5K文件么?
(2007-09-04 21:56:38)
在移植u-boot的过程中,
一些重要的系统寄存器的值是在哪里赋的?
比如:
BANKCON0
BANKCON6
REFRESH
BANKSIZE
MRSRB6
希望weibing能够尽量说的详细些,谢谢!
(2007-06-27 21:55:18)
^_^,下周2考完试,考试万岁啊
看来博主好久没有来了!
和第一个问题类似,uboot引导了,我用mtest测试,发现出现了错误。可能不可能是因为sdram没有初始化好呢?
还有我的nand flash读设备号的时候读的值总是变,而且有时候读不出来(读出来的是“0”);是不是我nand flash初始化也有问题呢。但是我的uboot已经启动了啊!
你看看是否修改了bank的设置,还有你的内存芯片是hy那款吧
(2007-06-27 21:08:26)
评论分页:共2页 1 2 下一页 最后一页