高通增大分区以及烧录失败解决

本文详细介绍了如何针对高通设备进行EMMC和nandflash分区的修改,包括增大系统或用户数据分区,以及在编译和烧录过程中遇到问题的解决方法。同时,为了解决fastboot分布烧录下载问题,对engine.c和nand.c的源码进行了补丁添加,确保了按步骤下载和写入系统分区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.EMMC分区

      1.修改modem惻 msm7627ym/core/storage/tools/jsdcc/partition_load/partition.xml里面的system或userdata空间大小.

      2.然后编译modem侧代码,将生成的在msm7627ym/core/storage/tools/jsdcc/partition_load/目录下的文件rawprogram0.xml替换掉AP惻

的vendor/qcom/proprietary/tools/ext4_sparse/rawprogram0.xml.

      3.然后修改device/qcom/msmxx/Boardconfig.mk里面的分区宏,使这个分区恰好小于modem惻的分区大小(因为modem惻被认为是物理分区)

      4.编译system即可.

二.nandflash分区

     只需要修改AP惻的lk和vendor两个目录即可:

      1.在bootable/bootloader/lk/target/msmxx/init.c中有个board_part_list的数组,system的分区在里面修改,同样被认为是物理分区.

      2.然后修改vendor下面的Boardconfig.mk,这个和前面emmc分区第三条一样.

      3.编译system即可.


三.fastboot分布烧录(download)

     进文件engine.c    msm7627a/system/core/fastboot/

      里面的函数fb_queue_flash添加如下补丁:

       void fb_queue_flash(const char *ptn, void *data, unsigned sz)
{

### 高通 FDExtManagerNode 使用说明及相关错误解决 #### 节点功能概述 `FDExtManagerNode` 是高通平台上用于管理闪存设备扩展的一个重要节点。它通常涉及 NAND 和 eMMC 存储设备的初始化、分区管理和数据烧录等功能[^1]。该节点的核心作用在于提供接口以支持存储设备的高级操作,例如动态调整分区大小、优化写入性能以及处理特定硬件异常。 #### 常见问题及解决方案 ##### 1. **分区增大失败** 当尝试通过 `FDExtManagerNode` 扩大分区时,可能会遇到如下错误: - 错误提示:`Partition size exceeds maximum allowed limit` 此问题通常是由于目标分区超出物理存储容量限制所致。可以通过修改底层驱动参数来解决问题。具体方法是在内核配置中启用以下选项并重新编译内核: ```c #define CONFIG_MTD_NAND_ECC_BCH_8BIT ``` 此外,在 `nand.c` 文件中增加对更大分区的支持逻辑也是必要的。 ##### 2. **烧录过程中的校验错误** 如果在使用 `FDExtManagerNode` 进行固件烧录时发生 ECC 校验错误,则可能是由以下几个因素引起: - 数据传输过程中存在噪声干扰; - NAND Flash 的坏块未被正确标记; - 系统未能及时更新最新的 ECC 参数设置。 针对上述情况,建议采取以下措施: - 更新到最新版本的高通 BSP(Board Support Package),以便获取更稳定的驱动支持[^2]。 - 修改 `msm_shared` 平台下的相关代码片段,增强 ECC 处理能力。例如: ```c static int nand_scan_tail(struct mtd_info *mtd) { struct nand_chip *chip = mtd->priv; /* Add custom error handling */ if (chip->ecc_mode != NAND_ECC_HW) { pr_err("Unsupported ECC mode detected\n"); return -EINVAL; } return 0; } ``` ##### 3. **无法识别外部存储设备** 对于部分高通平台而言,可能因为缺少必要驱动而导致 EMMC 设备不可用。此时需确认内核配置项是否已开启: ```bash CONFIG_MMC_SDHCI_MSM=y ``` 同时检查 DTS(Device Tree Source)文件中是否有对应的节点定义。如果没有找到相关内容,则需要手动添加类似以下条目[^3]: ```dts emmc@7800000 { compatible = "qcom,sdhci-msm-v5"; reg = <0x7800000 0x100>; }; ``` --- ### 示例代码:NAND 分区调整函数实现 以下是基于高通 MSM7627A 平台的一段示例代码,展示如何利用 `FDExtManagerNode` 动态调整 NAND 分区大小: ```c #include <linux/mtd/nand.h> #include <linux/module.h> int adjust_nand_partition(struct mtd_info *mtd, uint32_t new_size_kb) { struct nand_chip *chip = mtd_to_nand(mtd); uint32_t current_size_kb; current_size_kb = chip->page_shift / 10; // 计算当前分区大小 if (new_size_kb > current_size_kb) { printk(KERN_INFO "Increasing partition from %uKB to %uKB\n", current_size_kb, new_size_kb); // 实现具体的扩容逻辑 chip->partition_size = new_size_kb << 10; } else { printk(KERN_WARNING "New size is smaller than existing one.\n"); return -EINVAL; } return 0; } module_init(adjust_nand_partition_init); MODULE_LICENSE("GPL"); ``` --- ### 注意事项 在实际开发过程中需要注意以下几点: - 对于不同型号的高通 SoC,其存储子系统的架构可能存在差异,因此应仔细阅读官方文档或联系技术支持团队获得指导。 - 如果项目依赖第三方工具链构建环境,则务必保持工具链与目标硬件之间的兼容性[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值