Linux内核移植错误与解决:启动参数与串口驱动

需积分: 3 3 下载量 99 浏览量 更新于2024-07-26 收藏 139KB DOC 举报
本文主要讨论了Linux内核移植过程中遇到的问题及其解决方案,特别是针对"Uncompressing Linux… done, booting the kernel"之后卡住不动的情况。这个问题可能由多个因素引起,包括启动参数错误、内核对Flash分区的支持不足以及内核编译时未启用必要的驱动(如串口驱动)。下面将详细解释这些原因和相应的解决方法。 1. 启动参数错误 当内核启动参数传递不正确时,可能导致系统在解压内核后无法继续启动。例如,可能需要确保`console`、`root`等关键参数设置正确。在`arch/arm/kernel/setup.c`文件中,可以注释掉`parse_tag_cmdline()`函数中的`strlcpy()`调用,从而使用默认的`CONFIG_CMDLINE`。通常,这个配置项可能设定为如"root=/dev/mtdblock2 ro init=/linuxrc console=ttySAC0,115200"的形式,具体取决于你的设备配置。此外,也可以直接在内核配置文件的Boot options中输入正确的启动参数。 2. NAND Flash分区问题 如果内核无法识别或处理Flash分区,可能会导致启动失败。需要检查并修改`arch/arm/mach-s3c2410/devs.c`文件,添加或更新对Flash分区的支持。这通常涉及对设备树(Device Tree)或者平台数据的配置,确保内核能够正确识别和挂载启动所需的分区。 3. 缺少串口驱动 内核编译时如果没有启用串口驱动,可能导致串口通信失效,从而影响启动过程。在配置内核(通过`make menuconfig`或类似命令)时,需确保选中了串口驱动,如`<*> RAM disks support`和`<*> Compressed ROM file system support (cramfs)`等选项。这些选项对于加载和解压内核至关重要。 解决问题的步骤通常包括以下部分: - 检查并修改启动参数,确保与实际硬件配置匹配。 - 更新内核配置,启用必要的驱动和功能,如串口驱动和特定的文件系统支持。 - 如果是Flash分区问题,更新设备树或平台数据,使内核能够识别分区。 - 重新编译并烧录内核到Flash,然后尝试重新启动。 在一些情况下,可能还需要检查网络配置,因为问题描述中提到了NFS根文件系统的相关错误。如果系统尝试使用NFS挂载根文件系统但未能找到服务器,也会导致启动失败。在这种情况下,应确保NFS服务器可用,并检查网络连接和NFS相关配置。 Linux内核移植是一个涉及多方面知识的过程,包括理解启动流程、配置内核、处理硬件驱动以及文件系统等。遇到问题时,需要仔细分析日志,确定问题所在,并针对性地调整内核配置或代码。