图笔记内容结构概览包含多个技术主题的层次化要点整理。一、Flash 知识点补充1. Flash 定义是断电不会丢失数据的存储芯片用来存放系统、程序、配置信息。2. Flash 分类NOR Flash可在芯片上直接执行代码容量偏小一般用来存放 U-Boot 启动程序NAND Flash不能直接执行程序必须把代码读取到内存后才能运行用来存储 Linux 内核、系统文件、用户配置、运行日志等大容量数据二、U-Boot 启动内核整体结构通过sgetenv()获取启动环境变量调用run_command(s,0)执行启动相关指令三、分区概念嵌入式 Linux 里 Flash 没有原生分区表bootenv、kernel、文件系统只能在源码里写死开发时需要重点关注各分区的地址划分。分区宏定义示例#define MTDPARTS_DEFAULT mtdpartsnandflash0:256k0(bootloader),\ 128k(params),\ 2m(kernel),\ -(root)分区含义解释这里定义了 MTD 分区分区位于 nandflash 上前 256KBbootloaderU-Boot 引导程序分区接下来 128KB环境变量参数分区后续 2MBkernel内核分区剩余全部空间root 根文件系统分区四、读出内核环节示例命令nand read.jffs2 0x3007fc0 kernel含义从 NAND Flash 上的 kernel 分区把内核镜像读取到 SDRAM 内存的0x3007fc0地址后续启动操作就会从内存这个地址读取内核数据。五、uImage 格式说明Flash 中保存的内核为 uImage 格式结构分为头部 真正内核两部分ih_load加载地址存放镜像文件的缓冲区地址是临时存放完整内核文件、完成解压的运行地址ih_ep入口地址内核解压完成后程序第一条指令的物理地址U-Boot 执行bootm时会自动跳转到该地址启动内核。六、bootm 命令启动内核1. bootm 全称boot memory从内存启动镜像专门用来启动 Linux 内核镜像2. 执行步骤读取 uImage 的 64 字节头部信息校验镜像文件的完整性把压缩内核解压到头部记录的入口运行地址关闭 U-Boot 自身的部分硬件、刷新缓存CPU 跳转到内核入口地址正式启动 Linux 系统