Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4135594
  • 博文数量: 241
  • 博客积分: 15936
  • 博客等级: 上将
  • 技术积分: 25293
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-27 11:22
个人简介

Fedora-ARM

文章分类
文章存档

2016年(3)

2014年(1)

2013年(3)

2012年(50)

2011年(61)

2010年(26)

2009年(27)

2008年(21)

2007年(49)

分类: LINUX

2010-04-18 22:06:02

u-boot-2010.03 for mini2440 Source release
   在前几天完成了USB 下载的移植后,决定趁热打铁,直接搞定u-boot-2010.03针对mini2440的移植。原以为只要一个晚上就可以搞定,但是移植完了之后出现了一些问题,最后到了周日放假才彻底搞定。
  出现问题的原因是原先从别的地方移植过来的LCD、MMC、USB下载等功能实现代码都不规范,操作寄存器的时候只是简单的用“=”来读取和赋值。这样做是很危险的,有可能这次编译出的程序可以用,但是下一次稍微改了别的地方,就会使得一些功能出现问题。所有的操作寄存器都必须使用规范的readl、writel等等宏来实现,具体的原因我会再写一篇blog来记录。
   所以这次我对LCD、MMC、USB下载等功能实现代码进行修整,把这些不规范的代码都改了过来。
 
  下面是针对MINI2440编译好的bin文件,可在MINI2440上直接使用。
文件: u-boot.bin.tar.bz2
大小: 127KB
下载: 下载
此次的所实现的功能和原来的最后一个github更新的功能相同.
特性归纳如下:

1、同时支持S3C2410和S3C2440 (2410没板测试)
2、支持串口 xmodem协议 (参考
3、支持网卡芯片 DM9000 
4、支持不同NAND Flash的读写,并自动识别所使用的nand flash是512B/page还是2KB/page,实现在64MB\128MB\256MB\1GB NAND flash的启动。

5、支持IIC接口EEPROM的操作,并可保存ENV(参考hiboy的)
6、自动识别S3C2440的启动方式是Nor boot还是Nand boot,调用不同的自拷贝程序,实现不论是Nor boot还是Nand boot,都可以烧写同一个bin文件。(nor flash为SST39VF1601)
 
7、支持烧写yaffs/yaffs2文件系统映象.

8、添加支持读取SD卡中的FAT32文件系统,现在U-boot已经支持从U盘或SD卡上启动Linux 内核。

9、添加支持OpenOCD导入内存启动,其实就是在一切flash识别之前,检测自己是否在内存,如果已在内存就跳过自拷贝程序。

10、支持NEC 3.5寸LCD输出console信息和BMP图片、logo。(参考openmoko)

11、支持使用DNW工具,通过USB device口进行文件传输。(参考了 hugerat.cublog.cn  和  Apollo5520.cublog.cn  两个高手的移植)


完整的源代码可以到:  下载!

为了那些不方便在github下载的朋友,下面在放一个补丁:
文件: u-boot-2010.03_tekkaman.patch.tar.bz2
大小: 45KB
下载: 下载

在mini2440中,由于bin文件大小已经大于了0x40000,所以我也修改了ENV的 OFFSET。现在的分区是这样的:
U-boot        :0x0~0x60000
u-boot参数区  : 0x60000~0x80000
内核和文件系统 :0x80000之后


 到这里,U-boot该有的功能基本上都有了,但是还有一点遗憾的是还没实现USB键盘的功能。

USB下载使用方法: 在ubuntu下通过USB对u-boot传输文件(mini2440)
阅读(35195) | 评论(67) | 转发(17) |
给主人留下些什么吧!~~

tekkamanninja2012-10-12 00:46:17

cailantu2012: 大侠,还有您说的我的log最后引导的是nfs这个我确实不懂,我已经在u-boot的环境变量中,把bootargs =....root=\dev\mtdblock3(这个我记不清楚)这样配置的了,本.....
请将完整的启动信息发我邮箱,我怀疑你没有把启动参数设好

cailantu20122012-10-11 22:14:42

tekkamanninja: 可能是映像的制作有问题,关键是OOB的数据要和内核的代码要匹配。建议你检查映像生成代码和映像数据是不是你要的 ,这个可能涉及到内核mtd对于nand和yaffs的oob.....
大侠,还有您说的我的log最后引导的是nfs这个我确实不懂,我已经在u-boot的环境变量中,把bootargs =....root=\dev\mtdblock3(这个我记不清楚)这样配置的了,本意是希望内核引导起来后,挂载我已经烧写到nand flash中的根文件系统。就是不知道什么原因还存在那个nfs这样的东东存在?

cailantu20122012-10-11 20:16:27

tekkamanninja: 可能是映像的制作有问题,关键是OOB的数据要和内核的代码要匹配。建议你检查映像生成代码和映像数据是不是你要的 ,这个可能涉及到内核mtd对于nand和yaffs的oob.....
谢谢您的耐心解答。我明天到公司继续看看。估计是在u-boot对内核的加载和文件系统的挂载方面我还是很迷糊的。我学了10天,还是觉得有点混乱,之前都是做cortex-m3的,没接触这方面。如果有新的进展,我会跟您分享的。

tekkamanninja2012-10-11 17:41:27

cailantu2012: 谢谢大牛,您的建议是对的!可以正常烧写了,只是引导不成功。。。
[u-boot@MINI2440]# nand write.yaffs 0x30008000 0x800000 0x6f78c0


NAND write: device.....
可能是映像的制作有问题,关键是OOB的数据要和内核的代码要匹配。建议你检查映像生成代码和映像数据是不是你要的 ,这个可能涉及到内核mtd对于nand和yaffs的oob支持问题,这个我也没有仔细分析过。
如果要重新烧写,建议要整体擦除下nand。
还有,看你的log最后引导的是nfs阿?????

cailantu20122012-10-11 17:22:35

tekkamanninja: 应该是你的烧写大小的参数不对。对于 nand write.yaffs这个命令,最后一个烧写大小的参数应该是2K(页大小)+64(oob大小)的整数倍。你制作的映像文件应该也是.....
谢谢大牛,您的建议是对的!可以正常烧写了,只是引导不成功。。。
[u-boot@MINI2440]# nand write.yaffs 0x30008000 0x800000 0x6f78c0


NAND write: device 0 offset 0x800000, size 0x6f78c0

Skip the first good block 80000000000000


Writing at 0x82000000020000 -- 2 8s complete.
Writing at 0x84000000020000