Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4252483
  • 博文数量: 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
阅读(17716) | 评论(24) | 转发(5) |
给主人留下些什么吧!~~

tekkamanninja2011-11-08 11:40:44

clf1985: #ifndef CONFIG_SKIP_LOWLEVEL_INIT
        bl        cpu_init_crit
#endif
上面的这个底层初始化函数是否必须跳过才能直接在RAM里起来?.....
初始化ram是在openocd中先做好的,如果ram都没有初始化,你怎么往ram中下代码?
所以这个要屏蔽,两次初始化ram可能会出问题

tekkamanninja2011-11-08 11:36:11

应该是,因为这个工作在openocd中好像先做了,不然ram都没有初始化你怎么下到ram中?所以如果是用ocp中调试这个是要屏蔽的,这个是初始化ram的,再初始化一遍就出问题了

clf19852011-11-08 11:19:39

#ifndef CONFIG_SKIP_LOWLEVEL_INIT
        bl        cpu_init_crit
#endif
上面的这个底层初始化函数是否必须跳过才能直接在RAM里起来?

tekkamanninja2011-11-08 10:40:26

clf1985: NFS加载的问题先放一放吧.耽误时间.另外一个问题想请教下:
支持OpenOCD导入内存启动的这个功能,我现在用友善的Supervivi的D菜单下载的话为什么不能启动.是不是需.....
有点久了,记不太清。好像是必须把bin放在特定的位置上,因为如果是用调试器,似乎是不自我搬运的。所以你说的应该没错,就是在TEXT_BASE的地方

clf19852011-11-08 09:30:14

NFS加载的问题先放一放吧.耽误时间.另外一个问题想请教下:
支持OpenOCD导入内存启动的这个功能,我现在用友善的Supervivi的D菜单下载的话为什么不能启动.是不是需要把        bl cpu_init_crit这句注释掉? 还有直接下到SDRAM的地址是否必须是TEXT_BASE呢? 按START.S里的语句理解的话好像必须要让U-BOOT的运行地址在TEXT_BASE开始的地方.