Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4133569
  • 博文数量: 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

2009-11-03 09:47:59

u-boot-2009.08 for mini2440 patch release


已经在github上建立了源代码管理,以后的所有源代码将在





有好一段时间没有弄u-boot了,而u-boot-2009.06的我也没时间移植了,直接移植u-boot-2009.08了。由于很多网友发邮件问128MB的NAND Flash版本的mini2440的U-boot移植,而我手边又没有128MB的板子,所有无法帮忙。
现在我入手了一块128MB的NAND Flash版本的mini2440,我以最快的速度移植了uboot最新的稳定版。并将补丁公布,为了网友更好地分析,我按其大致的作用将补丁拆分为了一个一个的模块(时间有限,不一定准确,请见谅)。

个人认为,u-boot-2009.08比起u-boot-2009.03有了明显进步的的地方是:代码的放置更加合理规范,程序的结构也更加合理了。在ubuntu下,大家可以使用Beyond Compare来对比两个版本的不同。

这次移植的u-boot-2009.08,在具备我上次发布的u-boot-2009.03补丁的所有特性的基础上,增加了一下两个重要的特性:

1、自动识别mini2440所使用的nand flash是512B/page还是2KB/page,调用不同的自拷贝程序,实现不论是64MB版本的mini2440,还是128MB的,都可以在Nand中烧写同一个bin文件。

2、自动识别S3C2440的启动方式是Nor boot还是Nand boot,调用不同的自拷贝程序,实现不论是Nor boot还是Nand boot,都可以烧写同一个bin文件。

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

4、添加支持读取SD卡中的FAT32文件系统,现在Uboot已经支持从U盘或SD卡上启动了。
所以,此U-boot版本可以烧写在mini2440的两个nand flash版本的任何flash上,只要烧写在存储器的0地址就可以了。

这两个特性实现的原理请看:在U-boot下实现自动识别启动Flash的原理

(1)以下是补丁(不支持OpenOCD导入内存启动):
文件:u-boot-2009.08_tekkaman_patch.tar.bz2
大小:25KB
下载:下载

(2)以下是补丁(支持OpenOCD导入内存启动):
文件:u-boot-2009.08_tekkaman_patch_openocd.tar.bz2
大小:25KB
下载:下载

导入步骤:现连接好硬件,并启动OpenOCD,参考《关于OpenOCD的安装和配置(以mini2440+OpenJTAG为例)》

然后使用telnet登录,并将bin文件导入内存0x33f80000处,并从此处启动。

$ telnet localhost 4444
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger
> poll
background polling: on
TAP: s3c2440.cpu (enabled)
target state: running
> halt
target state: halted
target halted in ARM state due to debug-request, current mode: Supervisor
cpsr: 0x400000d3 pc: 0x33f8a914
MMU: disabled, D-Cache: enabled, I-Cache: enabled
> arm920t cp15 2 0
2: 00000000
> resume
> halt
target state: halted
target halted in ARM state due to debug-request, current mode: Supervisor
cpsr: 0x400000d3 pc: 0x33f8a914
MMU: disabled, D-Cache: disabled, I-Cache: disabled
> load_image u-boot.bin 0x33f80000
256364 bytes written at address 0x33f80000
downloaded 256364 byte in 9.167877s
> resume 0x33f80000



(3)以下是支持读取SD卡中的FAT32文件系统补丁(支持OpenOCD导入内存启动)

文件:u-boot-2009.08_tekkaman_patch_MMC.tar.bz2
大小:32KB
下载:下载
说明:此补丁在添加了SD卡支持以外,还替换了nand boot的代码自拷贝程序,使用了更为合理的代码。这些代码的来源: ,在此感谢 buserror@gmail.com !! (同时支持读取U盘的FAT32

(4)以下是在完成上面更新后,使用了新的Nor boot 和Nand boot检测方法的补丁:
文件:u-boot-2009.08_tekkaman_patch_bootfix.tar.bz2
大小:32KB
下载:下载

(5)修正了烧写yaffs2镜像到128MB nand flash 会重启出错的问题。网友“李辉”提出BUG,并验证修改后的代码可用,在此表示感谢!
源码下载地址:




补丁包中包含了一个我自己写的批量打补丁的脚本(我不会写脚本,写得不好,请见谅),
只要将解开的源码、脚本和补丁放在同一文件夹下,运行:

./patch.sh install

即可,想删除补丁的话,运行:

./patch.sh uninstall

以下是可以直接使用的bin文件(支持OpenOCD导入内存启动SD卡、使用新的Nor boot 和Nand boot检测方法、修正烧写yaffs2镜像烧写问题)

文件:u-boot.bin.tar.bz2
大小:120KB
下载:下载
以下是开机效果图:

至于开机logo,是直接编译进程序的,更改logo的制作方法请看:U-boot开机logo的制作方法

(停止代码更新,请使用最新的20010.03
阅读(17278) | 评论(24) | 转发(5) |
给主人留下些什么吧!~~

tekkamanninja2012-06-17 15:52:41

rbsrcy: 博主,我下载了你的“U-boot-2009.08-for-mini2440在GitHub的下载”链接里的
uboot源码,编译后的u-boot.bin大小为242K 。通过jlink command下载一个init.bin的.....
可以给你肯定答复的是:
1、我的uboot和bin文件时肯定没有问题,我自己发布后都测试过
2、串口出了信息,说明已经运行在了DRAM中,并不是运行在内部ram中

像你这样的情况,应该是自拷贝到DRAM中的代码有问题, 所以我怀疑的是:
1、你的nand的开头有坏块?
2、烧写方法有问题?

请您自己从中两个方面找找原因
首先是是原来可以启动的bootloader,烧写一下,排除烧写问题。
然后通过原来的bootloader检查是否是开头有坏块/

rbsrcy2012-06-15 20:42:36

博主,我下载了你的“U-boot-2009.08-for-mini2440在GitHub的下载”链接里的
uboot源码,编译后的u-boot.bin大小为242K 。通过jlink command下载一个init.bin的文件先初始化内存后再将u-boot.bin下载到内存的0x33f8000地址,下载到了内存并且可以运行起来,然后用uboot里的nand erase 0 40000  ,nand write 33f80000 0 40000 命令把内存烧写入nand flash,然后掉电重启,可是却出现了I2C:   ready
DRAM:  64 MB
?
U-Boot 2009.08

modified by tekkamanninja (tekkamanninja@163.com)
Love Linux forever!
重复打印在终端上,而且蜂鸣器一直在响,是不是证明了板子在不断重启。代码只有4k复制

tekkamanninja2012-06-03 10:51:30

rbsrcy: 请问博主文件patch.sh是在哪个包当中?我下了全部补丁包,可是没有找到这个文件啊.....
不好意思,当时自己搞了一个patch.sh的小脚本。
但是现在想起来,这么做很傻。因为有quilt、stgit和git等工具完全可以轻松的处理这些补丁。
如果你只要打补丁,而不需要代码管理的话,用quilt就好了,非常方便。

rbsrcy2012-06-03 01:06:39

请问博主文件patch.sh是在哪个包当中?我下了全部补丁包,可是没有找到这个文件啊

tekkamanninja2011-11-22 10:50:17

clf1985: 非常感谢~ 确实是START.S里NAND拷贝的大小才128K。。。原来我移植过程中早就超过了。。真不知道是怎么一路下来的。呵呵。
新问题:
定义了MTDPARTS_DEFAULT这个.....
我还没有用过是MTDIDS_DEFAULT,虽然配置文件中有定义这个,但是没有在烧写的时候用。这个的用处我还没有研究过,以后具体看看再写出来吧