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

tekkamanninja2012-07-12 15:12:47

rbsrcy: 请教博主禁止uboot启动时的蜂鸣器的代码是不是在
#if defined(CONFIG_MINI2440_LED)
#define GPIO_CTL_BASE 0x56000000
#define oGPIO_B 0x10
#define oGPIO_CO.....
(1)操作蜂鸣器的代码还有2~3处,都是和LED一起的。
(2)编译前记得先distclean一下

rbsrcy2012-07-12 14:58:21

请教博主禁止uboot启动时的蜂鸣器的代码是不是在
#if defined(CONFIG_MINI2440_LED)
#define GPIO_CTL_BASE 0x56000000
#define oGPIO_B 0x10
#define oGPIO_CON 0x0
/* R/W, Configures the pins of the port */
#define oGPIO_DAT 0x4
#define oGPIO_UP 0x8
/* R/W, Pull-up disable register */
        mov        r1, #GPIO_CTL_BASE
        add        r1, r1, #oGPIO_B
   

rbsrcy2012-06-18 20:07:44

tekkamanninja: 如果nor nand中都没有uboot,就用jtag
如果nor中有,就用nor启动,uboot烧uboot.....
博主,你的uboot是好的,只是我的方法错了。我是用jlink烧写的,笔记本没有并口用不了jtag
正确的方法是:我写成到了博客
http://blog.chinaunix.net/uid-24386107-id-3247370.html

tekkamanninja2012-06-18 16:44:46

rbsrcy: 请问博主是用什么方法烧写u-boot.bin到nand flash的?是supervivi吗?.....
如果nor nand中都没有uboot,就用jtag
如果nor中有,就用nor启动,uboot烧uboot

rbsrcy2012-06-18 16:40:51

tekkamanninja: 可以给你肯定答复的是:
1、我的uboot和bin文件时肯定没有问题,我自己发布后都测试过
2、串口出了信息,说明已经运行在了DRAM中,并不是运行在内部ram中

像你.....
请问博主是用什么方法烧写u-boot.bin到nand flash的?是supervivi吗?