Linux ARM板引导问题

Linux ARM板引导问题,linux,linux-kernel,embedded-linux,porting,u-boot,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

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

如果有人知道,请让我知道这是什么根源。

我认为这是内核问题,因为引导加载程序加载了linux映像,然后内核启动,但出现了问题。
可能内核在初始化某些硬件时有问题。

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

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

假设您的设备有一个支持主板硬件的内核,例如,您可以向内核命令行添加如下内容:
console=ttys0115200

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


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

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


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

嵌入式Linux的引导分3步完成:

  • 引导加载程序

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

    • 解压缩并重新定位内核
    • 把控制权交给它
  • Linux内核:

    • 通过运行start_kernel()启动系统,最终生成init进程
  • 您的输出介于步骤2和步骤3之间(即内核解压缩)

    您可能还没有将所有东西都设置为具有工作控制台:

  • 通过使menuconfig中的串行控制台编译目标Linux内核

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

  • 通过在U-Boot的bootargs变量中设置选项console=device,baudrate在右侧设备上设置Linux控制台


  • 要考虑的另一个重要缺陷是,串行设备的确切设备名称可能在旧的和较新的内核版本之间或在某些配置之间有所不同。例如,我有一块板,在随它一起安装的操作系统中,ttyS2上有一个控制台,在我自己编译的内核上没有输出。原因是相同的串行端口名为ttyO2。这是一个OMAP,但它可能非常接近于相同的问题。@ortang iam使用以下引导命令=>“mmc重新扫描0 fatload mmc 0 81000000 uImage fatload mmc 0 82000000 ramdisk.gz setenv bootargs console=TTYO0115200N8 mem=256M root=/dev/ram rw initrd=0x82000000,16MB ramdisk_size=65536 earlyprintk=serial bootm 81000000-8000000”
    Device Drivers -> Character Devices -> Serial Drivers