首页 > 其他 > 详细

intel xscale PXA270 porting :unsupported machine IDg同

时间:2014-03-05 11:18:40      阅读:467      评论:0      收藏:0      [点我收藏+]

在移植linux kernel时,发现内核输出现下面的一行打印后,就再也没有输出信息,

......................................................................................................... done, booting the kernel.

之前也一曾经遇到家过类似的现象,但大多和是由于uart没有配好的原因,这次发现是由于bootloader传给kernel的machine ID不相等的原因。
如代码如下:
arch/arm/boot/compressed/misc.c
ulg
decompress_kernel(ulg output_start, ulg free_mem_ptr_p, ulg free_mem_ptr_end_p,
 int arch_id)
{
output_data = (uch *)output_start; /* Points to kernel start */
free_mem_ptr = free_mem_ptr_p;
free_mem_ptr_end = free_mem_ptr_end_p;
__machine_arch_type = arch_id;
arch_decomp_setup();
makecrc();
putstr("Uncompressing Linux...");
gunzip();
putstr(" done, booting the kernel.\n");
return output_ptr;
}

在上面的函数解压完kernel后,就会退出,这时是没有问题的。在退回到arch/arm/boot/compressed/head.s后,最终会执行下面的一段汇编:

call_cache_fn: adr r12, proc_types
#ifdef CONFIG_CPU_CP15
mrc p15, 0, r6, c0, c0 @ get processor ID //获取CPU的ID号到ARM寄存器R6里面
#else
ldr r6, =CONFIG_PROCESSOR_ID
#endif
1: ldr r1, [r12, #0] @ get value
ldr r2, [r12, #4] @ get mask
eor r1, r1, r6 @ (real ^ match)
tst r1, r2 @       & mask
addeq pc, r12, r3 @ call cache function
add r12, r12, #4*5
b 1b  //不相等则再找下一个。

关于如何修改machine ID在网上很多,在这就不说了。

kernel:

include/asm-arm/mach-types.h

arch/arm/tools/mach-types

arch/arm/kernel/head.s

上面的三个函数,只要改一个就可以了。

intel xscale PXA270 porting :unsupported machine IDg同,布布扣,bubuko.com

intel xscale PXA270 porting :unsupported machine IDg同

原文:http://blog.csdn.net/jackyard/article/details/20468581

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!