揭秘u-boot引导内核:bootm命令详解

需积分: 43 2 下载量 143 浏览量 更新于2024-09-16 收藏 59KB DOC 举报
在深入理解u-boot引导内核的过程中,我们首先通过"bootm"命令来启动Linux内核。这个命令在u-boot的命令行界面中扮演着核心角色,其基本用法是在内存中加载并启动指定的内核镜像。下面是bootm命令及其执行过程的详细分析: 1. bootm命令参数解析: - bootm命令的基本格式是`bootm [addr]`,其中`addr`参数是可选的,表示内核的存储地址。如果没有提供地址,系统会默认使用`load_addr`变量。`addr`可以通过tftp(Trivial File Transfer Protocol)或loadx指令下载内核后存储的内存位置获得。 2. do_bootm函数执行流程: - 当u-boot接收到bootm命令后,它会调用`do_bootm`函数进行实际的引导操作。这个函数的主要步骤如下: a) 检查验证选项:通过`getenv("verify")`获取验证选项(默认为启用),如果用户指定了'n',则关闭验证;否则,启用验证。 b) 参数检查:如果命令行参数不足(即只有一个参数),使用默认地址;否则,解析提供的地址作为内核的起始位置。 c) 显示进度信息:在加载过程中,通过`SHOW_BOOT_PROGRESS`打印出正在加载的进度。 d) 打印引导提示:显示即将引导的内核在内存中的地址。 e) 复制内核头部:为了后续操作,先复制内核头部信息,以便清除可能存在的校验和,确保引导的正确性。 f) 转移到应用加载器:将控制权交给`appl`指针指向的内核启动函数,这通常是Linux的初始化函数,如`start_kernel()`。 3. 内核引导过程: - 在`do_bootm`函数中,内核加载器实际上是将控制权从u-boot传递给内核的启动代码,这个过程通常包括验证、初始化硬件设备、设置CPU模式、加载并执行内核代码等步骤。如果配置了initrd(Initial RAM Disk),它可能会被自动加载并在内核引导前运行,用于加载额外的文件系统驱动和其他必要的初始化数据。 4. 验证选项的作用: - `verify`选项的存在允许用户选择是否在引导前对内核进行完整性校验。开启验证有助于确保引导的内核没有被篡改,增加了系统的安全性。然而,验证过程可能会增加引导时间,因此在生产环境中可能会根据需求进行调整。 总结: u-boot的bootm命令通过与do_bootm函数配合,实现了从内存中加载和启动Linux内核的过程。它允许用户通过命令行指定内核和可能的initrd地址,并提供了验证选项来保证引导的可靠性。理解这个过程对于调试和优化嵌入式系统启动流程至关重要。