Chinaunix首页 | 论坛 | 博客
  • 博客访问: 70937
  • 博文数量: 25
  • 博客积分: 116
  • 博客等级: 民兵
  • 技术积分: 135
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-26 11:31
文章分类
文章存档

2013年(1)

2012年(24)

我的朋友

分类:

2012-08-09 10:34:55

移植U-Boot-2010.03到友善之臂mini2440(八《完》)

8.1调试补充:

在编译通过后有可能会出现网络不通、tftp功能不能用、nfs功能不能用

ARP Retry count exceed starting again

1)修改net/tftp.c

TIME_OUT=5000UL

改成

TIME_OUT=50000UL,或者其它更大的

 

2drivers/net/dm9000x.c   <377>

将处理网络延时部分的循环i值改变

i=10000,改成i=3000或者其它合适的数值,10000可能太大

 

3net/nfs.c

若只可以实现tftp下载内核,但不能NFS挂载文件系统,调节net/nfs.c中的timeout参数

TIME_OUT=CONFIG_SYS_HZ/1000*20000

 

8.2  常用命令参考:

1 设置启动参数并保存在Nand Flash

set bootcmd 'nand read 0x30008000 0x80000 0x500000;bootm 0x30008000'

set bootargs 'noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0'

saveenv

 

setenv name value

1个参数 name是环境变量的名称。

2个参数 value是要设置的值,如果没有第 2个参数,表示删除这个环境变量。

set  bootargs 'noinitrd root=/dev/mtdblock3 rootfstype=yaffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M'

 

2tftp 下载命令 nand  Flash的擦写命令

命令         内存地址         偏移地址        长度大小

tftp          0x30008000       ****.img(文件名)

nand erase                     0x80000         0x500000

nand write     30008000        0x80000         0x500000

 

tftp          0x30008000       ****.img(文件名)

nand erase                     0x580000         0xFA80000

nand write.yaffs  0x30008000     0x580000         0x3b36dc0

 

3)内核引导

内核的引导步骤如下:

1)用 U-boot mkimage工具处理内核映像zImage

2)通过网络、串口、U盘、SD卡等方式将处理过的内核映像传输到 SDRAM的一定位置(一般使用 0x30008000

3)然后使用”bootm"等内核引导命令来启动内核。

为什么要用U-boot mkimage工具处理内核映像 zImage?因为在用 bootm命令引导内核的时候,bootm需要读取一个 64字节的文件头,来获取这个内核映象所针对的CPU体系结构、OS、加载到内存中的位置、在内存中入口点的位置以及映象名等等信息。这样 bootm才能为 OS设置好启动环境,并跳入内核映象的入口点。而mkimage就是添加这个文件头的专用工具。具体的实现请看U-boot bootm的源码和mkimage的源码。

启动时包含的前面64k信息:

   Image Name:   mini2440  for xujun                                           

   Created:      2010-05-30  11:42:02 UTC                                      

   Image Type:   ARM Linux Kernel Image (uncompressed)                         

   Data Size:    2517028 Bytes =  2.4 MB                                       

   Load Address: 30008000                                                      

   Entry Point:  30008040                                                       

                    

mkimage工具的使用:

以下是制作内核映像的命令示例:

mkimage -n 'xujun' -A arm -O linux -T kernel -C none -a 0x30008000 -e  0x30008040 -d zImage   zImage.img

参数说明:

-A 指定 CPU的体系结构,可用值有:alphaarm x86ia64mipsmips64ppc s390shsparc sparc64m68k

 

-O 指定操作系统类型,可用值有:openbsdnetbsdfreebsd4_4bsdlinux

svr4esixsolarisirixscodellncrlynxosvxworkspsosqnxu-boot

rtemsartos

 

-T 指定映象类型,可用值有:standalonekernelramdiskmultifirmwarescript

filesystem

 

-C 指定映象压缩方式,可用值有: none 不压缩(一般使用这个,因为 zImage是已经被 bzip2压缩过的自解压内核) gzip gzip的压缩方式bzip2 bzip2的压缩方式

 

-a 指定映象在内存中的加载地址,映象下载到内存中时,要按照用 mkimage制作映象时,这个参数所指定的地址值来下载

 

-e 指定映象运行的入口点地址,这个地址就是-a参数指定的值加上0x40(因为前面有个mkimage添加的 0x40个字节的头)

 

-n 指定映象名

 

-d 指定制作映象的源文件

阅读(1336) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~