主题 : 请教u-boot的问题, 非常感谢. 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 763
精华: 1
发帖: 9
金钱: 110 两
威望: 29 点
综合积分: 38 分
注册时间: 2008-05-26
最后登录: 2009-11-12
楼主  发表于: 2008-08-15 10:54

 请教u-boot的问题, 非常感谢.

我按照最新的qq2440v3的用户手册,下载了最新的光盘, 编译了u-boot-1.1.6_QQ2440
然后通过Nor flash中的supervivi2.0 烧写了u-boot.bin成功, 然后进入nand flash启动, 进入u-boot界面:


U-Boot 1.1.6 (Aug 13 2008 - 13:47:01)                                         
                                                                               
DRAM:  64 MB                                                                   
Flash:  1 MB                                                                   
NAND:  64 MiB                                                                 
*** Warning - bad CRC, using default environment                               
                                                                               
In:    serial                                                                 
Out:  serial                                                                 
Err:  serial                                                                 
Hit any key to stop autoboot:  0                                               
QQ2440> printenv                                                               
bootargs=noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0           
bootcmd=nboot 0x32000000 0 0x50000; bootm 0x32000000                           
bootdelay=3                                                                   
baudrate=115200                                                               
ethaddr=08:00:3e:26:0a:5b                                                     
ipaddr=192.168.1.17                                                           
serverip=192.168.1.106                                                         
netmask=255.255.255.0                                                         
stdin=serial                                                                   
stdout=serial                                                                 
stderr=serial                                                                 
                                                                               
Environment size: 281/65532 bytes                                             
如下是我的操作。但是出错了:

QQ2440> setenv serverip 192.168.0.33                                           
QQ2440> setenv ipaddr 192.168.0.34                                             
QQ2440> tftp 0x322000000 root_srp1.img                                         
TFTP from server 192.168.0.33; our IP address is 192.168.0.34                 
Filename 'root_srp1.img'.                                                     
Load address: 0x22000000                                                       
Loading: #################################################################     
        #################################################################     
        #################################################################     
        #################################################################     
        #################################################################     
         
     ####################### 中间的省略了############################## 

        #################################################################     
        #################################################################     
        #################################################################     
        #################################################################     
        #################################################                     
done                                                                           
Bytes transferred = 18886560 (1202fa0 hex)                                     
QQ2440> tftp 0x32000000 zImage.img                                             
TFTP from server 192.168.0.33; our IP address is 192.168.0.34                 
Filename 'zImage.img'.                                                         
Load address: 0x32000000                                                       
Loading: #################################################################     
        #################################################################     
        #################################################################     
        #################################################################     
        ##########################################################           
done                                                                           
Bytes transferred = 1623120 (18c450 hex)                                       
QQ2440> bootm 0x32000000                                                       
## Booting image at 32000000 ...                                               
  Image Name:  linux-2.6.13                                                 
  Created:      2008-08-15  2:25:44 UTC                                     
  Image Type:  ARM Linux Kernel Image (uncompressed)                         
  Data Size:    1623056 Bytes =  1.5 MB                                       
  Load Address: 30008000                                                     
  Entry Point:  30008000 
                                                   
  Verifying Checksum ... OK                                                   
OK                                                                             
                                                                               
Starting kernel ...                                                           
                                                                               
Uncompressing Linux.............................................................


到这里以后就没有了反应。 我有如下问题和不解, 望版主或者高手能够给予指点, 非常感谢!

1. 我不能通过saveenv 保存我设置的环境变量,但重启flash时就还原为了默认值。应该是可以保存的吧?
以下是我的操作信息:
QQ2440> saveenv                                                               
Saving Environment to Flash...                                                 
Un-Protected 1 sectors                                                         
Erasing Flash...Erasing sector 18 ... Erased 1 sectors
但是并没有write sectors等等之类的信息。我不知道是什么原因.

2. 我同样不能烧写kernel 和yaffs, 操作提示成功了,但是重启flash后还是不能启动。

3. 上面的启动到 Uncompressing Linux ...........................就没了下文, 不知道是什么原因? 是不是没有root的原因?
可以是我已下载了root_srp1.img 这个yaffs镜像的。

4. 我发现flash有很多bad blocks,我觉得不应有这么多bad blocks呀。
QQ2440> nand bad
  ...                                                                   
  0045c000                                                                     
  00460000                                                                     
  00464000                                                                     
  00468000                                                                     
  0046c000                                                                     
  00470000                                                                     
  00474000                                                                     
  00478000                                                                     
  0047c000                                                                     
  00480000                                                                     
  00484000                                                                     
  00488000                                                                     
  0048c000                                                                     
  00490000                                                                     
  00494000                                                                     
  00498000                                                                     
  .....
  013b0000                                                                     
  013b4000                                                                     
  013b8000                                                                     
  013bc000                                                                     
  013c0000                                                                     
  013c4000                                                                     
  013c8000                             
 

在网上找个很多资料, 苦于没有思路,不知道到底问题处在哪里?
所以来这里笨拙一问, 还望指点。


*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2008-08-15 12:57
1. 关于env不能保存的问题,你最好查一下u-boot中关于保存env data到NOR flash中的代码,看起来流程没有走完。
2. 需要把你烧写kernel和yaffs rootfs image的步骤还有u-boot的输出信息贴出来分析
3. 内核无法启动的问题看起来和文件系统没有关系,挂住的地方还是内核初始化很早的时候。你可以看看这个帖子,里面有我对如何分析这种问题的方法
http://www.aiothome.com/bbs/read.php?tid=207&toread=1
4. 应该是NAND Flash OOB区域里用来标识bad block的数据被误写了。你可以参考这个帖子的分析
http://www.aiothome.com/bbs/read.php?tid=95&fpage=12&toread=1
"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: 763
精华: 1
发帖: 9
金钱: 110 两
威望: 29 点
综合积分: 38 分
注册时间: 2008-05-26
最后登录: 2009-11-12
2楼  发表于: 2008-08-15 17:05

 Re:请教u-boot的问题, 非常感谢

非常感谢kasim版主的指点。 我发现我是不是搞混了?下面说一下我的做法:
首先我是将supervivi2.0 烧写到 Nor flash中。
然后通过supervivi 却将u-boot.bin烧写到了 Nand flash中的uboot分区, 而且我的Nand flash分区如下:
0x00000000 ~ 0x00040000 uboot 分区(原vivi分区和eboot分区的合并) 共 256KB左右。
0x00040000 ~ 0x00050000 param 分区 64KB 左右
0x00050000 ~ 0x 0250000 kernel 分区, 2MB左右
0x00250000 ~ 剩余部分 root 分区

是不是应该将 u-boot.bin烧写进 Nor flash阿? 而后导致了那么多错误。

另外,如果要将u-boot.bin烧写进Nor flash,那 Nand flash需要分区吗? 是不是还是需要kernel, root, param等分区?

[ 此贴被itlanger在2008-08-15 18:03重新编辑 ]
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2008-08-15 19:10

 Re:Re:请教u-boot的问题, 非常感谢

引用第2楼itlanger于2008-08-15 17:05发表的 Re:请教u-boot的问题, 非常感谢 :
非常感谢kasim版主的指点。 我发现我是不是搞混了?下面说一下我的做法:
首先我是将supervivi2.0 烧写到 Nor flash中。
然后通过supervivi 却将u-boot.bin烧写到了 Nand flash中的uboot分区, 而且我的Nand flash分区如下:
0x00000000 ~ 0x00040000 uboot 分区(原vivi分区和eboot分区的合并) 共 256KB左右。
0x00040000 ~ 0x00050000 param 分区 64KB 左右
0x00050000 ~ 0x 0250000 kernel 分区, 2MB左右
0x00250000 ~ 剩余部分 root 分区

是不是应该将 u-boot.bin烧写进 Nor flash阿? 而后导致了那么多错误。

你把u-boot.bin烧到nand flash中并且把启动方式改为NAND Boot是对的,烧写u-boot.bin到NAND flash还是NOR flash只和u-boot的配置有关,和supervivi无关。
友善之臂提供的这个u-boot配置成把env data保存到NOR flash中,即使它本身是从NAND Flash中启动的。
从你提供的信息看,问题就出在env data保存到NOR flash的过程中,这是需要你看相关源代码才能搞清楚的。

另外,如果要将u-boot.bin烧写进Nor flash,那 Nand flash需要分区吗? 是不是还是需要kernel, root, param等分区?

NAND flash需不需要分区取决于你怎么用它。如果你需要把rootfs的image保存在NAND Flash里,通常是需要分区的。
"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: 1552
精华: 0
发帖: 4
金钱: 40 两
威望: 31 点
综合积分: 8 分
注册时间: 2008-09-09
最后登录: 2009-06-16
4楼  发表于: 2009-01-09 20:19
我是按照楼主的方法烧写了Uboot到NandFlash中,但是TFTP下载命令却使用不了。不知道是怎么回事。
级别: 新手上路
UID: 5635
精华: 0
发帖: 19
金钱: 190 两
威望: 190 点
综合积分: 38 分
注册时间: 2009-05-01
最后登录: 2010-03-11
5楼  发表于: 2009-05-04 21:35
请问班组怎么配置是否用烧写u-boot.bin到NAND flash还是NOR flash
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
6楼  发表于: 2009-05-04 22:36
引用第5楼arm-linux于2009-05-04 21:35发表的  :
请问班组怎么配置是否用烧写u-boot.bin到NAND flash还是NOR flash

用不同的命令,nand命令用于操作NAND Flash。至于写入NOR Flash,可以通过erase, protect, cp等命令的组合
"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."