主题 : 用openjtag怎样烧写bios? 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 9817
精华: 0
发帖: 62
金钱: 330 两
威望: 78 点
贡献值: 0 点
综合积分: 124 分
注册时间: 2009-10-14
最后登录: 2012-07-31
楼主  发表于: 2010-03-24 14:40

 用openjtag怎样烧写bios?

目前bootloader无法启动,想用OpenJtag烧写,请问如何做?谢谢!
[ 此帖被alexli05在2010-03-26 09:34重新编辑 ]
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2010-03-24 15:47
简单的说:
在NAND Flash启动模式下,
1. 用OpenJtag下载一个可以初始化SDRAM的二进制档(OpenJtag随机光盘里的init.bin就可以)到0x0地址上,并执行;
2. 用OpenJtag下载一个带有烧写Flash和程序下载功能的bootloader到SDRAM中,并且将PC指针跳转到它在SDRAM的入口地址上执行;
3. 用这个bootloder下载你需要放在Flash中的bios到Flash中。

具体的步骤参考OpenJtag手册中关于u-boot调试的章节
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
2楼  发表于: 2010-03-24 17:00
如果我对OpenJtag手册的记忆没错的话,
> load_image init\init.bin 0x40000000
288 byte written at address 0x40000000

在NAND Flash启动模式下,SRAM地址映射在0~4K,你应该把init.bin下载到0x0

如果在
> load_image u-boot\u-boot.bin 0x33f80000
196760 byte written at address 0x33f80000
downloaded 196760 byte in 4.140625s
> resume 0x33f80000

之后你能顺利看到u-boot提示符,那你可以用u-boot本身的下载功能下载uboot到SDRAM中。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2010-05-27 20:46

 回 6楼(seu080524) 的帖子

你可以在start_armboot()的入口处加上断点,如果走到了,至少说明从NAND Flash中复制到SDRAM里的过程OK。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
4楼  发表于: 2010-05-30 13:31
利用openjtag下载Bootloader到RAM前,必须初始化RAM吗?如果是这样,下载到RAM里并且要在RAM里运行的这个 Bootloader应不应该包括初始化RAM的部分呢?

如果不初始化RAM,你怎么保证下载到RAM后数据还能正确读回来?
从原理上说,已经在RAM里运行起来的Bootloader不需要也最好不要重新初始化RAM,因为那样可能会导致RAM中的数据(就是它本身)在CPU眼里突然无法正确读取出来。

但我觉得奇怪的是你的解释似乎和你遇到的问题配不起来,烧写的NAND中的uboot在把自己复制到RAM之前,一定会初始化RAM的,不是吗?
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
贡献值: 71 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
5楼  发表于: 2010-06-01 11:38
第二步中的Bootloader是在RAM中运行,并且是用来在第三步中烧写BIOS的(也就是,Bootloader吧?!)

是的

因为在第一步中已经初始化了RAM,所以第二步中在RAM跑的这个Bootloader不能再初始化RAM,也省去了从NAND到RAM的搬运过程,

是的

也就是说这个Bootloader跟第三步中烧写到NAND里的Bootloader是不一样的
这是我的理解。
这样理解正确吗?(好像不对,源码好像能判断当前是在RAM中还是在flash中的,请版主给出明确的回答和详细的解释,谢谢!)

你自己已经给出了答案。烧到NAND Flash中的bootloader可以判断自己是跑在RAM里还是Flash里,为什么还需要两个不同的bootloader呢?你当然可以用它(运行在RAM中)来把自己写入到NAND Flash中。

所以说,整个过程只需要两个东西:
1. 用来初始化RAM的binary档(或者Jtag支持的脚本也可以)
2. 支持从RAM/NAND中启动并且支持烧写NAND Flash的bootloader
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."