主题 : u-boot引导内核问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 3815
精华: 0
发帖: 9
金钱: 85 两
威望: 66 点
综合积分: 18 分
注册时间: 2009-02-10
最后登录: 2011-09-15
楼主  发表于: 2009-12-08 11:27

 u-boot引导内核问题

u-boot运行bootcmd=nfs 0x30008000 192.168.0.xxx:/home/xxx/uImage;bootm
这样的情况下mini2440开发板自带的Linux内核需要修改哪些地方才能用呢?
比如Flash分区要改吗?
级别: 新手上路
UID: 8874
精华: 0
发帖: 12
金钱: 105 两
威望: 48 点
综合积分: 24 分
注册时间: 2009-09-09
最后登录: 2011-08-04
1楼  发表于: 2009-12-08 13:25
不太明白你的意思.
假设你是想把uImage下载到板子上,内核从板子启动的话.
1.将uImage下载到mini2440的nand flash 0x80000处.
2.修改bootcmd,bootargs命令
set bootcmd 'nand read 0x31000000 0x80000 0x001e0000;bootm 0x31000000'
set bootargs 'noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0'
saveenv

所谓的分区对UBOOT而言,只是在加载文件系统时会用到内核MTD信息.
set bootcmd 'nand read 0x31000000 0x80000 0x001e0000;bootm 0x31000000'
这个命令告诉UBOOT从NAND FLASH的0x80000处加载内核到RAM,然后运行.
set bootargs 'noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0'
这个命令告诉UBOOT,加载第三个MTD分区上的根文件系统.

而第三个分区即mtdblock2所对应的起始NAND FLASH地址范围是多少,这个就的看内核MTD分区表了.
级别: 新手上路
UID: 3815
精华: 0
发帖: 9
金钱: 85 两
威望: 66 点
综合积分: 18 分
注册时间: 2009-02-10
最后登录: 2011-09-15
2楼  发表于: 2009-12-08 15:43

 回 1楼(illidan) 的帖子

[u-boot@MINI2440]# nand read.jffs2 0x30007fc0 0x60000 0x200000

NAND read: device 0 offset 0x60000, size 0x200000
2097152 bytes read: OK
[u-boot@MINI2440]# bootm 0x30007fc0
## Booting kernel from Legacy Image at 30007fc0 ...
   Image Name:   Linux-2.6.29.4-FriendlyARM
   Created:      2009-12-08   6:04:05 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2022344 Bytes =  1.9 MB
   Load Address: 30008000
   Entry Point:  30008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux.................................................................................................................................. done, booting the kernel.程序停止这里不动了?怎么办

---------------------------------------------------------------------------------------------------------

[u-boot@MINI2440]# nand read.jffs2 0x30008000 0x60000 0x200000

NAND read: device 0 offset 0x60000, size 0x200000
2097152 bytes read: OK
[u-boot@MINI2440]# bootm 0x30008000
## Booting kernel from Legacy Image at 30008000 ...
   Image Name:   Linux-2.6.29.4-FriendlyARM
   Created:      2009-12-08   6:04:05 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2022344 Bytes =  1.9 MB
   Load Address: 30008000
   Entry Point:  30008000
   Verifying Checksum ... OK
   XIP Kernel Image ... OK
OK

Starting kernel ...

data abort
pc : [<30008020>]          lr : [<33fa31e4>]
sp : 33f3fe04  ip : e59ff014     fp : e59ff014
r10: e59ff014  r9 : ea000012     r8 : 33f3ffdc
r7 : 33f3ffc0  r6 : 0000016a     r5 : 33f412ad  r4 : 00000000
r3 : 00000000  r2 : 30000100     r1 : 0000016a  r0 : 56190527
Flags: nzCv  IRQs off  FIQs off  Mode SVC_32
Resetting CPU ...

resetting ...

以上是两种不同的运行结果 这是为什么呢?
级别: 新手上路
UID: 3815
精华: 0
发帖: 9
金钱: 85 两
威望: 66 点
综合积分: 18 分
注册时间: 2009-02-10
最后登录: 2011-09-15
3楼  发表于: 2009-12-08 19:15
$gedit arch/arm/mach-s3c2440/mach-mini2440.c
MACHINE_START(PNX4008, "FriendlyARM Mini2440 development board")
改为
MACHINE_START(MINI2440, "FriendlyARM Mini2440 development board")
在include/asm/mach-types.h中有定义
#define MACH_TYPE_PNX4008              782
#define MACH_TYPE_MINI2440             1999