开发板启动过程详解
1. 闪存分区与内存管理
为了更方便地管理内存,闪存分区的概念应运而生,它类似于磁盘驱动器上的分区。通过闪存分区,会预留一小部分闪存,并为其分配起始地址、长度和名称。这样一来,我们可以使用名称而非十六进制数字来引用起始地址,而且当分区的大小或位置发生变化时,引用分区名称的代码无需修改。
内核也会利用分区表来管理闪存内存。在 Linux 中,用于访问闪存的设备是 /dev/mtdN ,其中 N 是闪存分区的序号,从 0 开始。第一个闪存分区为 0,后续分区的编号依次递增。内存技术设备(MTD)是 Linux 中 EEPROM 存储设备的通用术语。
闪存主要有 NOR 和 NAND 两种类型。尽管 MTD 软件接口为这两种类型提供了统一的接口,但它们存在很大差异。从功能角度来看,NAND 内存无法进行随机读写,NAND 设备中的每个块(设备内存的细分部分)必须按顺序访问。例如,在 NAND 设备上,驱动程序若要写入块 100 的第 5 个字节,必须先写入第 0 到第 4 个字节。此外,NOR 内存和 NAND 内存对错误的容忍度也不同:NAND 设备可能存在一些坏块,驱动软件必须能够处理这些坏块;而 NOR 内存设计为没有坏区。
需要注意的是,由于 NAND 内存不像 RAM 那样支持随机访问,因此不能在 NAND 内存中执行代码。执行代码的方式是将闪存内存地址映射到原本的 RAM 内存中,而 NAND 无法像 NOR 内存那样对单个字节进行随机访问。
在启动时,内核需要知道哪个设备包含根文件系统。如果内核使用基于闪存的根文件系统,那么其中一个分区就包含根文件系统。
超级会员免费看
订阅专栏 解锁全文
1409

被折叠的 条评论
为什么被折叠?



