ARM板启动问题

时间:2013-11-05 10:33:37

标签: linux linux-kernel embedded-linux porting u-boot

我正在将Linux内核移植到TI(AM335x SK)主板上。但是在启动主板时它没有完全加载它停止,如下所示。

Image Type:   ARM Linux Kernel Image (uncompressed)                          
   Data Size:    3126496 Bytes = 3 MiB                                          
   Load Address: 80008000                                                       
   Entry Point:  80008000                                                       
   Verifying Checksum ... OK                                                    
   XIP Kernel Image ... OK                                                      
OK                                                                              

Starting kernel ...                                                             

Uncompressing Linux... done, booting the kernel.

如果有人知道,请让我知道这是什么原因。

4 个答案:

答案 0 :(得分:3)

我假设您已连接到设备的串行控制台,因为您看到了uboot输出。您是否已将内核配置为使用串行控制台?如果没有,你可能看不到任何东西。

向我们展示内核命令行,以及你做了什么(到/在内核中)? 你使用普通的香草内核吗?

假设您的设备内核支持您的主板硬件,您可以在内核命令行中添加以下内容:console=ttyS0,115200

这样内核将使用该控制台进行输出。但要实现这一点,必须为您的设备构建内核(例如,必须知道哪里有一个串行设备)。

话虽这么说,内核可能只是启动,但你没有看到任何东西,因为内核不知道你正在使用的串口控制台是否存在,因此没有显示任何内容。

答案 1 :(得分:3)

Linux on Linux的启动分三步完成:

  1. 引导程序

    • 低级硬件初始化
    • 在RAM中加载Linux内核并将控制权传递给Linux
  2. Bootstrap加载程序(在Linux内核映像中):

    • 解压缩并重新定位内核
    • 将控制传递给它
  3. Linux内核:

    • 通过运行start_kernel()来引导系统,最终产生 init 进程
  4. 您的输出是在步骤2和步骤3之间(即,内核解压缩)。

    您可能没有将所有内容设置为具有正常工作的控制台:

    1. 编译目标Linux内核,通过 make menuconfig 启用串行控制台

      Device Drivers -> Character Devices -> Serial Drivers
      
    2. 在内核配置中启用串行通信的特定驱动程序(即通过 make menuconfig

    3. 通过在U-Boot的 bootargs 变量中设置 console = device,baudrate 选项,在正确的设备上设置Linux控制台。

答案 2 :(得分:1)

我认为这是内核问题,因为bootloader加载了linux映像然后内核启动了,但是挂了。 可能内核有一些HW的初始化问题。

答案 3 :(得分:0)

增加NAND闪存上闪存的内核映像的大小,比如从3MB到6MB。 我已经看到由于内核大小问题而发生的这类问题 粘贴内核大小的输出 与

ls -alh uImage

并检查这是否超过3MB,如果是这样,你必须将你的内核flash write命令更改为更好的值