在 ARM 板上解压内核映像 (uImage) 后,start_kernel() 函数未调用:
为什么 start_kernel() 函数没有调用?我知道它应该从文件arch/arm/kernel/head.s调用。
解压 uImage 并调用 start_kernel() 后会发生什么序列?
在 ARM 板上解压内核映像 (uImage) 后,start_kernel() 函数未调用:
为什么 start_kernel() 函数没有调用?我知道它应该从文件arch/arm/kernel/head.s调用。
解压 uImage 并调用 start_kernel() 后会发生什么序列?
嵌入式 Linux 的启动分 3 步完成:
引导加载程序
引导加载程序(在 Linux 内核映像内):
Linux内核:
您的输出介于第 2 步和第 3 步之间(即内核解压缩)。
你可能没有设置所有的东西来拥有一个工作控制台:
通过make menuconfig中的串行控制台编译目标 Linux 内核使能
Device Drivers -> Character Devices -> Serial Drivers
在内核配置中启用串行通信的特定驱动程序(即,通过make menuconfig)
通过在U-Boot的bootargs变量中设置选项console=device,baudrate在正确的设备上设置 Linux 控制台。
在“Uncompressing Linux... Ok, booting the kernel”之后引导停止的最常见原因是内核命令行中的控制台设备不正确。例如,从 2.6.35 升级到 3.19.5 后,控制台设备名称可能已从 更改/dev/ttyAM0
为/dev/ttyAMA0
(在 i.MX23/28 上)。您还应该检查内核命令行中控制台设备名称后面的串行端口设置(如果有)是否正确。
检查您是否通过引导加载程序传递了有效的 ATAG 阵列或设备树 (*.dtb) 文件。
另一个可能的原因是不正确的入口点。
尝试搜索引擎短语“ARM 启动在 'Uncompressing Linux....done, booting the kernel' 后挂起”