uboot与kernel的flash分区

1. 我们可以在uboot中修改flash分区。

2.我们也可以在kernel中修改Flash分区,但是需要与uboot中的分区表一致。

3.我们可以通过uboot用参数传给kernel分区信息,这样只需要维护uboot的分区表即可。


这要对bootloader对内核重新分区:这需要重新设置一下bootloader环境参数,就可以同步更新内核分区信息

如:

setenv bootargs 'noinitrd console=ttySAC0 root=/dev/mtdblock3 rootfstype=jffs2

                           mtdparts=nand_flash:128k(u-boot)ro,64k(u-boot envs),3m(kernel),30m(root.jffs2),30m(root.yaffs)'

内核配置时选上Device Drivers  ---> Memory Technology Device (MTD) support  ---> Command line partition table parsing

在设置了mtdparts变量之后,就可以在nand read/write/erase命令中直接使用分区的名字而不必指定分区的偏移位置.而这需要内核MTD最好没有规划分区。

a 。如果你是通过uboot的内核命令行给MTD层传递MTD分区信息,这种情况下,内核读取到的分区信息始终和u-boot中的保持一致(推荐的做法)

b 。如果你是把分区信息写在内核源代码MTD里定义好的方法,那最好保证它和u-boot中的保持一致,即同步修改uboot及内核的相关部分。

 

2:

内核通过bootargs找到文件系统,bootargs中的mtdblockx即代表分区,block1,2,3代表哪个分区。

事实上,bootargs中的"root=/dev/mtdblockx"只是告诉内核,root fs从第x个(x=0,1,2...)MTD分区挂载,mtdblock0对应第一个分区,mtdblock1对应第二个分区,以此类推.


### U-Boot 中系统分区的划分配置 在嵌入式 Linux 系统中,U-Boot 是引导加载程序的核心部分之一,负责初始化硬件并加载操作系统内核。对于系统分区的划分和配置,通常通过环境变量以及设备树(Device Tree)来实现。 #### 使用环境变量定义分区表 U-Boot 支持通过其内置命令 `setenv` 和 `saveenv` 来设置和保存环境变量。这些变量可以用来描述存储介质上的分区布局。例如,在 NAND 或 eMMC 存储上创建分区时,可以通过以下方式定义: ```bash setenv bootpart "0:1" setenv rootpart "0:2" setenv kernel_addr_r "0x3000000" setenv ramdisk_addr_r "0x4000000" setenv scriptaddr "0x800000" setenv fdt_addr_r "0x8200000" # 设置默认启动参数 setenv bootargs "console=ttySAC0,115200 root=/dev/mmcblk0p${rootpart} rw rootwait" ``` 上述脚本中的 `${bootpart}` 和 `${rootpart}` 变量分别指定了启动分区和根文件系统的分区号[^1]。此方法适用于基于 MTD 的存储设备(如 NOR/NAND Flash),也可以扩展到 SD/eMMC 设备。 #### 利用 GPT/MBR 表格手动分割磁盘 如果目标平台支持 GUID 分区表 (GPT) 或传统的主引导记录 (MBR),则可以直接利用工具如 `fdisk` 或者直接写入二进制数据完成物理硬盘的空间分配工作。然而更常见的是借助主机端 PC 工具预先制作好镜像再烧录至目标板卡。 以下是针对 SMDK2410 开发板的一个简单例子说明如何修改现有 uboot 源码来自定义新的单板特性[^2]: 编辑位于源目录下的 include/configs/smdk2410.h 文件加入如下宏定义: ```c #define CONFIG_CMD_GPT /* Enable gpt command */ #define CONFIG_DOS_PARTITION /* Support DOS partition table */ #define CONFIG_EFI_PARTITION /* Support EFI/GPT partitions */ ``` 重新编译整个项目之后即可获得具备读取解析现代标准分区结构能力的新版本固件。 #### 自动化流程——结合 DeviceTree 实现动态调整 随着 ARM 架构处理器的发展趋势变化,越来越多厂商倾向于采用扁平化的设备描述机制即 device tree blob(DTB). 这种做法允许开发者无需更改底层驱动就能灵活应对不同型号间细微差异的情况. 因此建议尽可能把有关硬件资源配置的信息迁移到对应的 .dts/.dtb 文件当中去处理而不是硬编码固定下来. 下面展示了一段典型的片段用于声明一块 mmc 块设备及其子节点代表各个逻辑区域: ```dts mmc@f900a000 { compatible = "samsung,sdhci"; reg = <0xf900a000 0x100>; part-probe = "fixed"; fixed-partitions { #address-cells = <1>; #size-cells = <1>; partition@0 { label = "bootloader"; reg = <0x00000000 0x02000000>; // 起始偏移地址及大小 }; partition@c000000 { label = "kernel"; reg = <0xc000000 0x04000000>; }; ... }; }; ``` 以上代码片断展示了怎样通过 DTB 描述 MMC 接口控制器并将它划分为多个独立的功能区块供后续阶段调用.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值