4.7 海思SS928开发 - uboot开发 - 自定义分区以及启动方案

本文详细描述了如何为SS928平台定制分区方案,包括fastboot、ubootenv、kernel、kernel_recovery和rootfs分区,以及如何通过修改bootcommand和extra_env_settings来实现根据不同条件加载不同内核和文件系统的启动流程。
摘要由CSDN通过智能技术生成

4.7 uboot开发 - 自定义分区以及启动方案

  • ss928 出厂默认的启动方式以及 emmc 默认的分区,不符合需求,考虑自己做一个分区方案以及启动方案。

分区方案

  • 分区表如下:

    分区文件系统分区说明
    fastboot-存放 bootloader
    ubootenv-存储 uboot 环境变量
    kernel-存放 kernel 镜像文件
    kernel_recovery-存放 kernel recovery 镜像文件
    rootfs_recoveryext4用于恢复的文件系统
    rootfsext4主文件系统
  • 对应的 xml 分区表文件如下:

    <?xml version="1.0" encoding="GB2312" ?>
    <Partition_Info ProgrammerFile="">
    <Part Sel="1" PartitionName="fastboot" FlashType="emmc" FileSystem="none" Start="0" Length="512K" SelectFile=""/>
    <Part Sel="1" PartitionName="ubootenv" FlashType="emmc" FileSystem="none" Start="512K" Length="512K" SelectFile=""/>
    <Part Sel="1" PartitionName="kernel" FlashType="emmc" FileSystem="none" Start="1M" Length="32M" SelectFile=""/>
    <Part Sel="1" PartitionName="kernel_recovery" FlashType="emmc" FileSystem="none" Start="33M" Length="32M" SelectFile=""/>
    <Part Sel="1" PartitionName="rootfs_recovery" FlashType="emmc" FileSystem="ext3/4" Start="65M" Length="1536M" SelectFile=""/>
    <Part Sel="1" PartitionName="rootfs" FlashType="emmc" FileSystem="ext3/4" Start="1601M" Length="-" SelectFile=""/>
    </Partition_Info>
    
  • 对应的分区参数如下:

    • blkdevparts=mmcblk0:512K(fastboot),512K(ubootenv),32M(kernel),32M(kernel_recovery),1536M(rootfs_recovery),-(rootfs)

启动方案

  • 启动流程图如下:

    ss928

修改源码

  • 文件 include/configs/ss928v100.hCONFIG_BOOTCOMMAND 修改为以下内容:

    #define CONFIG_BOOTCOMMAND \
        "if test ${boot_recovery} = 1; then " \
            "echo boot from EMMC (recovery);" \
            "setenv kernel_blk 0x10800;" \
            "setenv rootfs_part /dev/mmcblk0p5;" \
        "elif test ${boot_recovery} = 0; then " \
            "echo boot from EMMC (system);" \
            "setenv kernel_blk 0x800;" \
            "setenv rootfs_part /dev/mmcblk0p6;" \
        "fi;" \
        "run boot_mmc;"
    
  • 简要说明:启动时通过判断变量 boot_recovery 的值,来决定需要加载的内核镜像以及挂载的文件系统。如果有条件的话,通过硬件来判断更好。

  • CONFIG_EXTRA_ENV_SETTINGS 修改为以下内容:

    #define CONFIG_EXTRA_ENV_SETTINGS \
        "boot_recovery=0\0" \
        "boot_quiet=quiet\0" \
        "bootarg1=mem=3840M console=ttyAMA0,115200 clk_ignore_unused lpj=240000 rw rootwait rootfstype=ext4 " \
            "blkdevparts=mmcblk0:512K(fastboot),512K(ubootenv),32M(kernel),32M(kernel_recovery)," \
            "1536M(rootfs_recovery),-(rootfs)\0" \
        "boot_mmc=setenv bootargs ${bootarg1} recovery=${boot_recovery} ${boot_quiet} root=${rootfs_part};" \
            "mmc read 0 0x50000000 ${kernel_blk} 0x10000; bootm 0x50000000;\0"
    
  • 简要说明:bootarg1 变量存放不会被修改的内核启动参数,boot_mmc 为真正执行的启动命令,先完善传递给内核的启动参数,然后从相应的地址读取内核镜像并加载内核。

  • 58
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专注的罗哈哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值