2

我正在将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

4 回答 4

4

嵌入式 Linux 的启动分 3 步完成:

  1. 引导加载程序

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

    • 解压并重定位内核
    • 将控制权交给它
  3. Linux内核:

    • 通过运行 start_kernel() 启动系统,最后会产生init进程

您的输出介于第 2 步和第 3 步之间(即内核解压缩)。

你可能没有设置所有的东西来拥有一个工作控制台:

  1. 通过make menuconfig中的串行控制台编译目标 Linux 内核使能

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

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

于 2013-11-06T08:37:43.197 回答
3

当您看到U-Boot输出时,我假设您已通过串行控制台连接到设备。您是否已将内核配置为使用串行控制台?如果没有,您可能什么也看不到。

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

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

这样,内核将使用该控制台进行输出。但是为了让它工作,内核必须为你的设备构建(例如,必须知道在哪里以及有一个串行设备)。

话虽如此,可能是内核刚刚启动,但您什么也看不到,因为内核不知道您正在使用的串行控制台是否存在,因此没有显示任何内容。

于 2013-11-05T11:25:16.710 回答
1

我认为这是一个内核问题,因为引导加载程序加载了 Linux 映像,然后内核启动了,但它挂了。

可能内核在某些硬件的初始化方面存在问题。

于 2013-11-05T10:49:56.147 回答
0

增加闪存在 NAND 闪存上的内核映像的大小,例如从 3 MB 到 6 MB。

我已经看到由于内核大小问题而发生的此类问题。粘贴内核大小的输出:

ls -alh uImage

并检查这是否超过 3 MB。如果是这样,您必须将内核闪存写入命令更改为更好的值。

于 2013-11-06T08:28:40.390 回答