Linux 内核 Starting kernel ... 串口无输出问题归纳总结

Linux 内核 Starting kernel ... 串口无输出问题归纳总结


网址:http://61.55.167.156/uid-28414100-id-5748121.html


Uboot输出,无内核信息输出

## Booting kernel from Legacy Image at 32000000 ...

Image Name: Linux-2.6.13-utulinux2440

Created: 2007-11-04 7:12:20 UTC

Image Type: ARM Linux Kernel Image (gzip compressed)

Data Size: 1479835 Bytes = 1.4 MB

Load Address: 30008000

Entry Point: 30008000

Verifying Checksum ... OK

Uncompressing Kernel Image ... OK

Starting kernel ...


 
不能确定是linux内核没有跑起来,还是已经跑起来了而没有串口打印信息,基本上有三种情况:

1> U-boot中的参数(console)没有传到内核。
2> U-boot的时钟设置不在405MHz,与Kernel的不一致。
3> U-boot中的Machine ID设置的与Kernel不一致。

逐个检查,其中第一项参数传递要求U-boot中有如下宏即可,该情况排除。

u-boot-2009.03/include/configs/mini2440.h

#define CONFIG_SETUP_MEMORY_TAGS
#define CONFIG_INITRD_TAG
#define CONFIG_CMDLINE_TAG



第二项时钟设置查看U-boot中的配置,也没有问题。
u-boot-2009.03/board/xxx/mini2440/mini2440.c

#if defined(CONFIG_S3C2440)
/* Fout = 405MHz */
#define M_MDIV 0x7f
#define M_PDIV 0x2
#define M_SDIV 0x1
#endif



再查下 Machine ID 。 zwolf 提到方法,打开内核的Debug选项

make menuconfig
Kernel hacking --->
[*] Kernel debugging
[*] Kernel low-level debugging functions
[*] Kernel low-level debugging messages via S3C UART



编译运行得到如下提示:

Starting kernel ... Uncompressing Linux................................................................................................................................... done, booting the kernel. Error: unrecognized/unsupported machine ID (r1 = 0x0000016a). Available machine support: ID (hex) NAME 000007cf FriendlyARM Mini2440 development board Please check your kernel config and/or bootloader.


 

用bdinfo命令查看u-boot端的ID :
bdinfo
[u-boot@MINI2440]# bdinfo
arch_number =  0x0000016A
env_t       = 0x00000000
boot_params = 0x30000100
DRAM bank   = 0x00000000
-> start    = 0x30000000
-> size     = 0x04000000
ethaddr     = 08:08:11:18:12:27
ip_addr     = 192.168.10.172
baudrate    = 115200 bps

基本上可以确定从U-boot得到的ID为 362 (0x0000016a), 而内核中的ID为 1999 (000007cf)。分别查找。

内核中的 Machine ID 为:
linux-2.6.29/include/asm-arm/mach-types.h
#define MACH_TYPE_MINI2440             1999

U-boot中对应也有该定义:
u-boot-2009.03/include/asm-arm/mach-types.h
#define MACH_TYPE_MINI2440             1999

二者是一致的,再查找一下ID为362的Machine是 MACH_TYPE_S3C2440,看来是u-boot没有传递正确的ID。grep一下MACH_TYPE_S3C2440,在如下位置找到原因:
u-boot-2009.03/board/xxx/mini2440/mini2440.c
#if defined(CONFIG_S3C2440)
/* arch number of S3C2440-Board */
    gd->bd->bi_arch_number = MACH_TYPE_S3C2440 ;
#endif
把这里的  MACH_TYPE_S3C2440 改为  MACH_TYPE_MINI2440 就OK了。

另外如果不动U-boot端,在Linux端临时试验的话,可以在Linux启动代码中手动加入该参数,使其与mach-types.h中的值统一起来,方法参考  这个帖子,注意mov指令操作数的要求。
linux-2.6.29/arch/arm/kernel/head.S
ENTRY(stext)
/*---------add begin----------/
    mov    r0, #0
    mov    r1, #0xc1
    ldr    r2, =0x30000100
/*---------add end-----------*/
    msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux内核开发第三版.zip 是一本关于Linux内核开发的电子书,它提供了深入理解Linux内核的知识和技能。这本书的内容涵盖了从内核基础知识到高级概念的全面介绍,包括进程管理、内存管理、设备驱动、文件系统等方面的内容。 首先,这本书适合那些已经了解基本Linux知识的读者,想要深入研究Linux内核开发的人员。它可以帮助读者理解Linux内核的结构和工作原理,以及如何编译、调试和定制内核。读者可以学会如何使用各种内核接口和工具,以及如何解决常见的内核开发问题。 其次,这本书不仅适合有经验的开发人员,也适合想要学习Linux内核开发的初学者。作者提供了大量的示例代码和实用的技巧,帮助读者快速上手,并逐步深入了解内核开发的各个方面。它还提供了丰富的参考资料和相关资源,方便读者进一步拓展知识。 此外,这本书还包含了作者自己的实践经验和案例研究,这些案例涵盖了真实世界中的各种问题和挑战。读者可以通过学习这些案例,了解实际应用中的内核开发技术,并学会如何应对各种情况。 总的来说,Linux内核开发第三版.zip 是一本非常有价值的电子书,对于想要深入探索Linux内核开发的人员来说,是一本必备的参考资料。无论是初学者还是有经验的开发人员,都可以从中获得丰富的知识和实用的技能。有了这本书的帮助,读者可以更加深入地理解和掌握Linux内核开发的核心概念和技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a746742897

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值