查找mkbootimg的PHYS_OFFSET值

8次阅读
没有评论

问题描述

在按照这里中的说明进行操作时遇到难题。发现 /proc/config.gz 中缺少 CONFIG_PHYS_OFFSET 配置项,但 /proc/iomem 提示 40000000-5bffffff : System RAM。在使用 mkbootimg 时,应将 --base 参数设置为何值?初步猜测为 0x40000000 ,但不确定是否正确。

解决方案

方案1:验证 /proc/iomem 取值

在继续操作前,请您确认您的设备配置。

根据 /proc/iomem 提示的 “System RAM” 区间 40000000-5bffffff,可以初步推断 PHYS_OFFSET 的基础地址。在大多数 Android 设备中,PHYS_OFFSET 值通常是系统内存的起始地址,这里假设为 0x40000000

以下是具体使用步骤:

  1. 检查 /proc/iomem 内容
    通过命令行查看设备当前的物理内存映射信息。
    sh
    cat /proc/iomem

    检查与 /proc/config.gz 中缺失 CONFIG_PHYS_OFFSET 相关的信息。

  2. 初步推断基础地址
    基于 /proc/iomem 提示,确定系统内存的起始位置。这里我们假设是 0x40000000

  3. 使用 mkbootimg 设置 --base 参数
    在构建 boot.img 文件时,将 mkbootimg--base 参数设置为上述推断的基础地址。
    sh
    mkbootimg --kernel kernel bzImage --ramdisk ramdisk.cpio.gz --second second_stage --dt device-tree.dtb --output boot.img --board BOARD_ID --kernel_offset 0x8000 --ramdisk_offset 0x01000000 --tags_offset 0x00000100 --base 0x40000000

方案2:验证 /proc/config.gz 配置项

如果上述方案未能解决问题,或者需要更精确的 PHYS_OFFSET 值,请参照 /proc/config.gz 文件。该文件通常包含各种编译选项和配置信息,包括涉及内存偏移的基础设置。

  1. 检查特定配置项
    通过解压缩并查看 /proc/config.gz 内容。
    sh
    zcat /proc/config.gz | grep PHYS_OFFSET

    寻找 CONFIG_PHYS_OFFSET 参数的具体值。

  2. 使用找到的值修正mkbootimg参数
    确认正确的 PHYS_OFFSET 值并将其应用到 mkbootimg 命令中。
    sh
    mkbootimg --kernel kernel bzImage --ramdisk ramdisk.cpio.gz --second second_stage --dt device-tree.dtb --output boot.img --board BOARD_ID --kernel_offset 0x8000 --ramdisk_offset 0x01000000 --tags_offset 0x00000100 --base $FOUND_PHYS_OFFSET

在完成上述步骤后,再次运行 mkbootimg 脚本,确保配置正确。如果问题依然存在,请检查其它可能的错误源或者参考官方文档和更多指南。

通过这两种方法中的至少一种确认正确的 PHYS_OFFSET 值,并应用于 mkbootimg 的基础参数中,才能确保生成的 boot.img 文件能够正常工作。

正文完