:link_to_translation:`en:[English]`

分区修改规范
========================


物理地址与逻辑地址的关系介绍
--------------------------------

为确保存储在flash中数据的准确性,每32个字节会增加2个字节crc校验位(crc检验由硬件自动完成。对比关系见下图1:(左侧为逻辑地址,右侧为物理地址,红色字体为crc校验)

.. figure:: ../../_static/logic.png
    :align: center
    :alt: logic
    :figclass: align-center

    图1物理地址与逻辑地址的对比

分区修改的组成
----------------------------
修改分区涉及到四个部分:

.. important::
  - 分区表规划
  - 打包脚本的配置文件修改
  - bootloader的分区表修改



案例
----------------------------

以bk7238为例,当用户在SDK基础上加入代码后,出现以下编译错误时见图2,该如何操作?

.. figure:: ../../_static/build_fail_1.png
    :align: center
    :alt: build_fail_1
    :figclass: align-center

    图2 编译报错图示


.. figure:: ../../_static/out_bin_1.png
    :align: center
    :alt: out_bin_1
    :figclass: align-center

    图3 编译输出的固件

有两个解决方案:

.. important::
  - 方案一:查看bk7238_crc.bin 大小超出的APP 分区很小,可关闭一些不需要的功能,减小code size;如果超出的code size很大,则只能实行方案二。
  - 方案二:如果超出的code size很大,则需要重新修改分区表,



分区表制作步骤如下:

- 1.app分区表制作:

  如flash物理总长度为2M,需在beken378/func/user_driver/BkDriverFlash.c 设定各个分区的partition_start_addr(物理地址)和partition_length(物理长度);

.. figure:: ../../_static/bk_partition.png
    :align: center
    :alt: bk_partition
    :figclass: align-center

    图4 分区表(partition)图示

- 2.打包脚本配置:

  将tools/beken_packager/beken_packager_wrapper 中的start_addr和size根据图4分区表中各分区大小修改即可,(其中start_addr = partition_start_addr,
  size = partition_length;

.. figure:: ../../_static/bk_package.png
    :align: center
    :alt: bk_package
    :figclass: align-center

    图5 打包脚本配置图示

  
- 3.使用tools/rt_partition_tool/rt_partition_tool.exe 工具修改插入新的bootloader的分区表见 图6简要步骤如下:

  - 打开rt_partition_tool.exe工具
  - 加载tools/beken_packager/bootloader_bk7238_uart1_v1.0.14.bin
  - 修改对应分区表,注意这里offset 和length 都是逻辑地址,也就是不带CRC的
  - 文件/保存分区表到bootloader

.. figure:: ../../_static/bk_partition_tool.png
    :align: center
    :alt: bk_partition_tool
    :figclass: align-center

    图6 rt_partition_tool图示


分区功能介绍
----------------------------

各分区功能介绍如表格所示

+------------------+---------------+----------------+--------------------------------------------+
| partition name   | start address | length         | functional description                     |
+==================+===============+================+============================================+
| bootloader       | 0x00000000    | 0xf000         | Store bootloader                           |
+------------------+---------------+----------------+--------------------------------------------+
| app              | 0x11000       | 0x121000       | Store application image                    |
+------------------+---------------+----------------+--------------------------------------------+
| ota              | 0x132000      | 0xAE000        | store updating image                       |
+------------------+---------------+----------------+--------------------------------------------+
| RF_Firmware      | 0x1E1000      | 0x1000         | Store calibration parameter                |
+------------------+---------------+----------------+--------------------------------------------+
| NEI_info         | 0x1E2000      | 0x1000         | Store wifi mac address and fast connection |
|                  |               |                | parameter                                  |
+------------------+---------------+----------------+--------------------------------------------+