主题 : u-boot引导内核问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 37765
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
贡献值: 0 点
综合积分: 2 分
注册时间: 2011-02-16
最后登录: 2011-02-24
楼主  发表于: 2011-02-17 11:54

 u-boot引导内核问题

移植好u-boot,启动正常。进一步移植内核,在用nfs加载内核启动过程中出现机器码不匹配问题,请高手执教,具体如下:

[ u-boot@MINI2440 ]# nfs 0x30008000 192.168.0.101:/nfsboot/zImage.img
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:00:3e:26:0a:5b
could not establish link
Using dm9000 device
File transfer via NFS from server 192.168.0.101; our IP address is 192.168.0.105
Filename '/nfsboot/zImage.img'.
Load address: 0x30008000
Loading: #################################################################
     #################################################################
     #################################################################
     #################################################################
     #################################################################
     #################################################################
     #################################################################
     #######################################
done
Bytes transferred = 2525580 (26898c hex)
[ u-boot@MINI2440 ]# go 0x30008000
## Starting application at 0x30008000 ...
Uncompressing Linux................................................................................................................................................................... done, booting the kernel.

Error: unrecognized/unsupported machine ID (r1 = 0x33fa0400).

Available machine support:

ID (hex)    NAME
000000c1    SMDK2410
0000016a    SMDK2440

Please check your kernel config and/or bootloader.


在移植uboot中已经在board的初始化函数中修改了机器码(1999),但是好像传给kernel的机器码不对r1 = 0x33fa0400,  应该是r1=0x000007cf,请高手帮忙看看。谢谢!

int board_init (void)
{
   ..........
#if defined(CONFIG_S3C2440)
    gd->bd->bi_arch_number = MACH_TYPE_MINI2440;  //MACH_TYPE_MINI2440=1999
#endif
   .........
}
资料简单,人亦简单
级别: 新手上路
UID: 33114
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
贡献值: 0 点
综合积分: 44 分
注册时间: 2010-11-25
最后登录: 2011-03-18
1楼  发表于: 2011-02-17 13:51
机器码改成1008试一试

以下引用别人的:


首先,确定u-boot中的MACH_TYPE。在u-boot的include/asm-arm/mach-types.h文件中针对不同的CPU定义了非常多的MACH_TYPE,可以找到下面这个定义:
#define MACH_TYPE_SMDK2440 1008  //针对2440的MACH_TYPE码的值定义为1008



那么我们就修改u-boot的MACH_TYPE代码引用部分,确定u-boot的MACH_TYPE。如下:
#gedit board/samsung/my2440/my2440.c   //修改board_init函数


/* arch number of SMDK2410-Board */
//gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;
改为:
gd->bd->bi_arch_number = MACH_TYPE_SMDK2440;



其次,确定kernel中的MACH_TYPE。在kernel的arch/arm/tools/mach-types文件中也针对不同的CPU定义了非常多的MACH_TYPE,也可以找到下面这个定义:
smdk2440  MACH_SMDK2440   SMDK2440   1008



那么我们就修改kernel的MACH_TYPE代码引用部分,确定kernel的MACH_TYPE。如下:
#gedit arch/arm/mach-s3c2440/mach-smdk2440.c   //修改文件最后面


//MACHINE_START(S3C2440, "SMDK2440")
改为:
MACHINE_START(SMDK2440, "SMDK2440")

出处:http://blogold.chinaunix.net/u3/101649/showart_2126764.html
资料简单,人亦简单
级别: 新手上路
UID: 33114
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
贡献值: 0 点
综合积分: 44 分
注册时间: 2010-11-25
最后登录: 2011-03-18
2楼  发表于: 2011-02-17 13:52
另外向您请教一个问题

连接http://www.aiothome.net/read.php?tid-10000.html