嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(四)
图中的现象,在下载过程中断断续续就说明是可以下载的,只是由于某种原因使网络出现超时从而重新下载,那我想出现这种情况的可能性有两种:1、u-boot中对网络的延时设置;2、就是我的物理网络结构。首先针对第一种,我修改了net/net.c中对网络延时的设置,结果还是不行。接着就试试第二种情况,因为之前我的网络是通过路由器来管理的,主机和开发板也是通过路由器来连接的,所以现在我就改用一条交叉网线直接把主机和开发板连接起来,一试,果然可以啦,哈哈哈哈....。至此,网络部分的移植总算完成了。

8)实现u-boot引导Linux内核启动。
在前面几节中,我们讲了u-boot对Nor Flash和Nand Flash的启动支持,那现在我们就再来探讨一下u-boot怎样来引导Linux内核的启动。
①、机器码的确定
通常,在u-boot和kernel中都会有一个机器码(即:MACH_TYPE),只有这两个机器码一致时才能引导内核,否则就会出现如下mach的错误信息:

首先,确定u-boot中的MACH_TYPE。在u-boot的include/asm-arm/mach-types.h文件中针对不同的CPU定义了非常多的MACH_TYPE,可以找到下面这个定义:
#define |
那么我们就修改u-boot的MACH_TYPE代码引用部分,确定u-boot的MACH_TYPE。如下:
#gedit board/samsung/my2440/my2440.c |
//gd->bd->bi_arch_number = MACH_TYPE_SMDK2410; |
其次,确定kernel中的MACH_TYPE。在kernel的arch/arm/tools/mach-types文件中也针对不同的CPU定义了非常多的MACH_TYPE,也可以找到下面这个定义:
smdk2440 |
那么我们就修改kernel的MACH_TYPE代码引用部分,确定kernel的MACH_TYPE。如下:
#gedit |
//MACHINE_START(S3C2440, |
#gedit arch/arm/kernel/head.S |
ENTRY(stext) |
分别重新编译u-boot和kernel。u-boot下载后,记得要saveenv;kernel用tftp下载到内存后使用go命令来测试引导内核,结果可以引导了,如下:

②、准备能被u-boot直接引导的内核uImage
通常,kernel的启动需要u-boot提供一些参数信息,比如ramdisk在RAM中的地址。经过编译后的u-boot在根目录下的tools目录中,会有个叫做mkimage的工具,他可以给zImage添加一个header,也就是说使得通常我们编译的内核zImage添加一个数据头信息部分,我们把添加头后的image通常叫uImage,uImage是可以被u-boot直接引导的内核镜像。
mkimage工具的使用介绍如下:
使用: 中括号括起来的是可选的 mkimage [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image 选项: |
先将u-boot下的tools中的mkimage复制到主机的/usr/local/bin目录下,这样就可以在主机的任何目录下使用该工具了。现在我们进入kernel生成目录(一般是arch/arm/boot目录),然后执行如下命令,就会在该目录下生成一个uImage.img的镜像文件,把他复制到tftp目录下,这就是我们所说的uImage。
mkimage |
③、Nand Flash的分区。我们查看内核在arch/arm/plat-s3c24xx/common-smdk.c中的分区情况如下:
uboot : 0x00000000 |
④、设置修改u
Linuxu-boot244 相关文章:
- 嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(六)(11-20)
- 嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(五)(11-20)
- 嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(一)(11-20)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
