uboot引导powerpc,u-boot,bootm,bootcmd

本文介绍了U-Boot中bootm命令的使用方法及其在不同架构下的差异,重点讲解了在PowerPC架构下如何通过bootm命令加载内核、ramdisk及设备树,并解释了在不使用ramdisk时的配置方式。

uboot使用bootm命令引导操作系统,不同架构bootm的功能不同。对于arm,也许就是带一个内核的内存地址就可以了,其他参数由bootargs决定。但是powerpc不是,说说心得:

格式:

bootm 内核地址 ramdisk地址 dtb地址

首先我们要把数据下载到内存,然后使用上面的命令。如果有ramdisk,那么系统自动识别并挂载,bootargs无关紧要。如果不用ramdisk咋办呢,那就用一横表示没有:

bootm 内核地址 - dtb地址

当然,这时候要指定bootargs了。

 

同理,挂载jffs、yaffs也是一样道理。

### U-Boot 启动流程详解 U-Boot 的启动流程是嵌入式系统开发中的核心部分,涉及从硬件初始化到加载操作系统内核的完整过程。U-Boot(Universal Boot Loader)是一个广泛使用的开源引导程序,支持多种处理器架构和平台。 #### 1. 第一阶段:硬件初始化 U-Boot 的启动通常分为两个主要阶段:第一阶段负责最低级别的硬件初始化,包括设置时钟、内存控制器、串口等关键组件。该阶段的代码通常是用汇编语言编写,确保在没有操作系统的环境下能够运行。 在这一阶段中,U-Boot 会根据 `bootm_low` 环境变量定义的最低地址来限制用于镜像处理的内存范围,并将此地址作为 Linux 内核初始内存映射的基地址 [^1]。这一步骤对于确保后续加载的内核镜像位于正确的内存位置至关重要。 #### 2. 第二阶段:高级功能初始化与操作系统加载 一旦基本的硬件环境准备就绪,U-Boot 进入第二阶段,此时 C 语言代码开始执行。在这个阶段,更多的硬件外设被初始化,例如 NAND 控制器、以太网接口以及 USB 控制器等。 接下来,U-Boot 会解析环境变量,如 `bootcmd` 和 `bootargs`,这些变量决定了如何加载和启动内核。`bootcmd` 指定了默认的启动命令,而 `bootargs` 包含了传递给内核的参数。例如,可以通过 `bootm` 命令来加载并启动一个 Linux 内核镜像,其行为受 `bootm_size` 和 `bootm_low` 变量的影响 [^1]。 如果使用的是压缩的内核镜像,则需要解压后才能执行。U-Boot 提供了对多种格式的支持,比如 ELF、uImage(U-Boot 特定格式)等。加载完成后,控制权将移交给内核入口点,从而完成从引导程序到操作系统的过渡。 #### 3. 配置选项与工具链 为了适应不同的目标平台,U-Boot 使用了大量的配置选项。这些配置可以分为两类:用户可选的 "CONFIG_" 类型选项和依赖于特定硬件不应随意更改的 "CONFIG_SYS_" 类型设置 [^3]。开发者需要通过修改配置文件或创建符号链接来定制适合自己硬件的设计方案。 此外,U-Boot 还提供了一系列工具帮助构建 S-Record 或者 U-Boot 格式的镜像,这对于制作可烧录至闪存设备上的固件非常有用 [^3]。 #### 4. 动态模块与脚本支持 U-Boot 支持动态加载额外的功能模块,允许添加新的命令或者驱动而不必重新编译整个项目。它还具备简单的 shell 脚本能力,使得自动化任务得以实现,比如自动检测存储介质并尝试从中启动系统。 #### 示例:手动加载并启动 Linux 内核 以下是一个典型的交互式 U-Boot 会话示例,展示了如何手动加载一个位于 NOR 闪存中的 Linux 内核镜像,并传递必要的参数: ```bash => printenv bootargs bootargs=root=/dev/mtdblock0 rootfstype=jffs2 console=ttyS0,115200 => tftp 0x200000 zImage Using FEC device TFTP from server 192.168.1.1; our IP is 192.168.1.2 Filename 'zImage'. Load address: 0x200000 ################################################## done Bytes transferred = 2097152 (0x200000) => bootm 0x200000 ## Booting image at 02000000 ... Image Name: Linux-2.6.28 Created: 2009-04-17 14:58:46 UTC Image Type: PowerPC Linux Kernel Image (uncompressed) Data Size: 2097152 Bytes = 2 MB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK OK Starting kernel ... Uncompressing Linux... done, booting the kernel. ``` 这段输出演示了 TFTP 协议下载内核镜像的过程以及随后调用 `bootm` 命令启动内核的动作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值