分享
分享赚钱 收藏 举报 版权申诉 / 8

类型内核引导失败的常见问题解决办法.doc

  • 上传人:kpmy5893
  • 文档编号:7192086
  • 上传时间:2019-05-09
  • 格式:DOC
  • 页数:8
  • 大小:125.50KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    内核引导失败的常见问题解决办法.doc
    资源描述:

    1、内核引导常见问题Kernel - Common Problems Booting Linux作者:卢浩 时间:2012.3.9转载请注明出处嵌入式爱好者开发群:122879839不少用户在尝试引导内核的时候,遇到了一些意外,内核的引导在某一点突然中断,并且不能进行下去,有时候是有个软件的 bug 导致的,而有时候可能是由于内核的错误的配置导致的,这篇文章是为开发者提供一些帮助来诊断为什么不能正常引导内核并且找出其中可能的原因。问题 1:内核只引导到“Starting Kernel.“,然后串口终端就没有输出了,举个例子:# Booting kernel from Legacy Image at

    2、 80300000 .Image Name: Linux-2.6.31Image Type: ARM Linux Kernel Image (uncompressed)Data Size: 1750680 Bytes = 1.7 MBLoad Address: 80008000Entry Point: 80008000Verifying Checksum . OKLoading Kernel Image . OKOKStarting kernel .到这里,串口终端就没有再输出任何信息了.以上的串口输出信息是 uboot 的引导过程,至于这个starting kernel 其实是 uboot

    3、阶段输出最后的一句信息,这时候正准备进入内核引导。这个错误一般由于错误的配置 debug 串口导致的,你可以检验下你内核配置的时候,你所配置的串口输出端口是多少。打个比方,你用的是 TI的 omap3 的 beagle-board 板子,其中 UART3 被用来输入调试信息,那么你打开 linux-2.6.37(打个比方是这个版本的内核)下的.config 文件,你会看到以下信息:# CONFIG_OMAP_LL_DEBUG_UART1 is not set# CONFIG_OMAP_LL_DEBUG_UART2 is not setCONFIG_OMAP_LL_DEBUG_UART3=y你会

    4、看到串口3是被设置为调试的串口。现在我们需要修改串口为默认的串口,在make menuconfig下面,“System Type TI OMAP Implementations Low-leveldebug console UART“.选择这个,这个就是默认用来调试的串口,修改完之后你应该就可以看到串口引导内核的输出信息了。问题2:内核只引导到“booting the kernel“,然后串口终端就没有输出了,举个例子:# Booting kernel from Legacy Image at 80300000 .Image Name: Linux-2.6.31Image Type: ARM

    5、Linux Kernel Image (uncompressed)Data Size: 1750680 Bytes = 1.7 MBLoad Address: 80008000Entry Point: 80008000Verifying Checksum . OKLoading Kernel Image . OKOKStarting kernel .Uncompressing Linux. done, booting the kernel.这种情况的发生可能有好几个原因,以下是常见的一些原因:原因 1:串口控制台参数设置不正确,打个比方你用的是 TI 的omap3 的 beagle-board

    6、 板子,其中串口选择的是 UART3,那么串口的配置应该是 115200 波特率,数据位为 8,校验位为 0(none) ,流控制为 0(none) 。因此,如果你的设置是正确的,你应该能够看到类似以下的信息:OMAP3 beagleboard.org # printenv bootargsbootargs=console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw rootwait这个要区分大小写,确定你输入是正确的,而且没有空格。在 linux-2.6.36 及更新的版本里,我们使用 ttyO2 来代替 ttyS2,这是大写字母 O,不是阿拉伯数字 0.为了

    7、避免这种错误,你可以使用 TI SDK 包里面的/ezsdk/bin 里面的脚本来设置 env 变量。原因 2:不匹配的 uboot 和 kernel 的机器号这里我就不用 TI 的翻译的了,我前阵子刚写过一篇关于机器号的文章,直接 copy 过来就是了,大体意思和 TI 的是差不多的。我以前写过一篇关于设置 uboot 和 kernel 的机器号对应的问题。今天我才发现一个比较简单的方法。一般可以完全不用那么麻烦改源码什么的。当你 uboot 起来之后,在 uboot 状态下。打个比方啊setenv machid 7d9然后 saveenv 然后重启,我这里截个图OK 了,我们会发现刚才输入

    8、的那个机器号是错的,系统并且提示我正确的可用的 id 号是 af0.然后再输入setenv machid af0saveenv重启如图好了.原因 3:软件的 bug如果以上的办法没能帮助你解决问题,那么你就要在内核的源码里做一些工作了,请在内核源码中使能 CONFIG_DEBUG_LL,来确定内核在哪里引导失败了,这个会打印更多的信息来帮助你确定内核到底在哪里出了问题。如果你没能取得进一步的发现,那么更多的信息可以帮助其他开发者来挖掘这个问题。问题 3:在内核引导成功之后没有信息输出。举个例子:Sending DHCP requests .eth0: link up, 100Mbps, ful

    9、l-duplex, lpa 0xCDE1., OKIP-Config: Got DHCP answer from 255.255.255.255, my address is 128.247.107.23IP-Config: Complete:device=eth0, addr=128.247.107.23, mask=255.255.254.0, gw=128.247.106.2,host=128.247.107.23, domain=, nis-domain=(none),bootserver=255.255.255.255, rootserver=128.247.107.35, root

    10、path=Looking up port of RPC 100003/2 on 128.247.107.35Looking up port of RPC 100005/1 on 128.247.107.35VFS: Mounted root (nfs filesystem).Freeing init memory: 136Kinit started: BusyBox v1.11.1 (2008-10-05 04:40:51 CDT)starting pid 288, tty : /etc/init.d/rcSSystem initialization.Hostname : OMAP3EVMFi

    11、lesystem : v1.0.0Kernel release : Linux 2.6.22.18-omap3Kernel version : #12 Mon Oct 6 01:22:49 CDT 2008Mounting /proc : SUCCESSMounting /sys : SUCCESSMounting /dev : SUCCESSMounting /dev/pts : SUCCESSEnabling hot-plug : SUCCESSPopulating /dev : SUCCESSDisabling Power mgmt : SUCCESSTurn off LCD after

    12、 1 hour : SUCCESSMounting other filesystems : SUCCESSStarting syslogd : SUCCESSStarting telnetd : SUCCESSSystem initialization complete.Please press Enter to activate this console这边的意思是让你按下 enter 键来激活控制台但是如果你没有看到以上的信息,你就无法输入 enter 来激活了,请看下 TI的 WIKI 关于文件系统的制作http:/ 这个文件下面有以下代码;:sysinit:/etc/init.d/rc

    13、S# /bin/ash# Start an “askfirst“ shell on the serial portttyS0:askfirst:-/bin/ash# Stuff to do when restarting the init process:restart:/sbin/init# Stuff to do before rebooting:ctrlaltdel:/sbin/reboot:shutdown:/bin/umount -a -r:shutdown:/sbin/swapoff -a在这种情况下,请更正上面的 ttyS0 为 ttyS2。然后就 OK 了。这里的 ttyS2 是调试串口,你要根据你实际情况进行配置。

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:内核引导失败的常见问题解决办法.doc
    链接地址:https://www.docduoduo.com/p-7192086.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开