U-boot 移植问题解析
来源:互联网 发布:xp添加不了网络打印机 编辑:程序博客网 时间:2024/04/30 01:23
问题一:Load Address 、Entry Point 设置问题
Starting kernel ...
undefined instruction
pc : [<c30008028>] lr : [<c0f91b14>]
sp : 33f4fc10 ip : 00000001 fp : 33f4fca4
r10: 33f9e70c r9 : 33ece9cd r8 : 33f4ffdcc
r7 : 33f4ffb8 r6 : 00000000 r5 : 00000000 r4 : 00000000
r3 : 30008000 r2 : c0000100 r1 : 000000c1 r0 : 00000000
Flags: nZCv IRQs off FIQs off Mode SVC_32
Resetting CPU
解决方法及原因:
Load Address 0x30008000 、Entry Point 0x30008000 ,#bootm的时候,
显示是的内核前头加上的64byte的信息r1:000000c1 r0:00000000……按照上
述制作uImage的方法设Load Address 、Entry Point 就ok
修改include/configs/smdk2410.h 中CFG——LOAD-ADDR中的值,使其与 -a的值匹配
u-boot 调用 Linux 内核的方法是直接跳转到内核的第一条指令处,
也即直接跳转到 MEM_START + 0x8000 地址处。在跳转时,要满足下列条件:
a) CPU 寄存器的设置: R0 = 0 ;
R1 =机器类型 ID ,本系统的机器类型 ID = 193 。
R2 =启动参数标记列表在 RAM 中的起始基地址;
b) CPU 模式:必须禁止中断 (IRQs 和 FIQs) ; CPU 必须工作在 SVC 模式;
c) Cache 和 MMU 的设置: MMU 必须关闭;指令 Cache 可以打开也可以关闭;数据 Cache 必须关闭。
系统采用下列代码来进入内核函数:
theKernel = (void (*)(int, int))ntohl(hdr->ih_ep);
theKernel(0, bd->bi_arch_number); 其中, hdr 是 image_header_t 类型的结构体,
hdr->ih_ep 指向内核的第一条指令地址,即 Linux 操作系统下的
/kernel/arch/arm/boot/compressed/head.S 汇编程序。
theKernel() 函数调用应该不会返回,如果该调用返回,则说明出错。
//theKernel(0, bd->bi_arch_number); 应该是:
theKernel (0, bd->bi_arch_number, bd->bi_boot_params
问题二:Uncompressing Linux....................................................... done,
booting the kernel 就不动了
问题原因分析及解决:
一个内核的commandline
一个是由于主频设置的问题
问题三:Error: unrecognized/unsupported machine ID (r1 = 0x33f4fca8)
问题分析以及解决
tftp uImage到0x30008000,然后,go 0x30008000,这样uboot没有传参数给内核,
go命令是不传递内核参数的所以会有Error: unrecognized/unsupported machine ID (r1 = 0x33f4fca8)这样的错误
一种方法是修改common/cmd_boot.c
/*#if defined(CONFIG_I386)*/
DECLARE_GLOBAL_DATA_PTR;
/*#endif*/
#if !defined(CONFIG_NIOS)
/*******************add here*******************************/
if(argc==2)
rc = ((ulong (*)(int, char *[]))addr) (0, gd->bd->bi_arch_number);
else
/*********************add end *****************************/
rc = ((ulong (*)(int, char *[]))addr) (--argc, &argv[1]);
解决
还可以在arch/arm/kernel/head.S写死r1
mov r1, #0xc1
个人建议不修改,用bootm命令。
问题四:、error【u-boot】 浮点问题
lib_arm/_udivsi3.S:67: relocation truncated to fit: R_ARM_PLT32 __div0
lib_arm/_umodsi3.S:79: relocation truncated to fit: R_ARM_PLT32 __div0
解决办法:利用3.3.2 交叉编译器。
问题五:"Warning - bad CRC, using default environment“
分析原因:flash驱动有些问题
解决办法:注释掉下面两行基本就好了
// if (!chip && ((result&0xFFFF)&BIT_PROGRAM_ERROR))
// chip = ERR;
- U-boot 移植问题解析
- U-Boot 移植问题
- U-BOOT移植问题小结
- U-boot移植问题记录
- u-boot-2012.04.01移植问题
- u-boot-2010.03 移植到OK6410问题
- u-boot移植出现的问题
- u-boot移植重要问题说明
- u-boot移植中出现的问题
- XSBase255B -- u-boot移植
- u-boot移植心得
- u-boot移植日记
- U-BOOT移植
- 移植u-boot
- u-boot移植三
- U-BOOT移植总结
- U-boot移植说明
- at91rm9200移植u-boot
- 软件开发项目风险管理的几点体会
- 正则里的 /x7f-/xff 这样东西
- 短信
- JAVA中implement和extends的区别
- SQL触发器语法参考
- U-boot 移植问题解析
- javascript操作word
- 自己整理的一套面试题
- php中的header使用记录
- ServletContext作用功能详解
- 苹果Mac机上一些著名的开源软件
- memset用法详解
- Quartz cron 表达式的格式
- 用telnet命令接收收邮件