首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
  • SC-3568HA

    • 简介

      • SC-3568HA简介
    • 快速上手

      • OpenHarmony概述
      • 镜像烧录
      • 开发环境准备
      • Hello World应用以及部署
    • 应用开发

      • ArkUI

        • 第一章 ArkTS语言简介
        • 第二章 UI组件介绍和实际应用(上)
        • 第三章 UI组件介绍和实际应用(中)
        • 第四章 UI组件介绍和实际应用(下)
      • 拓展

        • 第一章 入门指引
        • 第二章 三方库的引用和使用
        • 第三章 应用编译以及部署
        • 第四章 命令行恢复出厂设置
        • 第五章 系统调试--HDC调试
        • 第六章 APP 稳定性测试
        • 第七章 应用测试
    • 设备开发

      • 第一章 环境搭建
      • 第二章 下载源码
      • 第三章 编译源码
    • 外设与接口

      • 树莓派接口
      • GPIO 接口
      • I2C 接口
      • SPI通信
      • PWM控制
      • 串口通讯
      • TF Card
      • 屏幕
      • 触摸
      • 音频
      • RTC
      • Ethernet
      • M.2
      • MINI-PCIE
      • Camera
      • WIFI&BT
      • 树莓派拓展板
    • 常见问题

      • 资源下载
  • M-K1HSE

    • 简介

      • M-K1HSE 简介
    • 快速开始

      • 开发环境搭建
      • 源码获取
      • 编译说明
      • 烧录指南
    • 外设与接口

      • 01 Audio
      • 02 RS485
      • 03 Display
    • 系统定制开发

      • 系统移植
      • 系统定制
      • 驱动开发
      • 系统调试
      • OTA升级

系统移植

添加定制方案

和产品方案相关的几个关键仓库和如下:

build: 添加构建白名单,主要修改文件为: compile_standard_whitelist.json 和 subsystem_compoents_whitelist.json

vendor/spacemit: 进迭厂商定制适配目录

device/board/spacemit: 进迭厂商板级适配目录

device/soc/spacemit: 进迭厂商芯片适配目录

kernel/linux/spacemit_kernel-6.6: 进迭厂商内核

添加定制方案有 2 种方式:

通过修改现有方案来适配新方案,例如需要重新适配一款开发板,源码中已经适配好的开发板有 deb1 ,可以通过修改这个方案中的配置来适配新的开发板, 添加 1 个全新的方案

下面分别对两种定制方案的操作进行说明:

通过修改现有方案定制

定制 uboot

目前 uboot 未上传源码,可以提供原理图,配置并编译好后,提供 uboot 相关的 bin 文件。下面说明 uboot 文件如何添加到系统中。 通用的 uboot 文件在 device/soc/spacemit/k1/kernel/boot 目录下,这些 uboot 文件适用于所有的方案,如下:

|-- bootfs
|   |-- boot_logo_spacemit_0.bmp
|   |-- boot_logo_spacemit_180.bmp
|   |-- boot_logo_spacemit_270.bmp
|   `-- boot_logo_spacemit_90.bmp
|-- env.bin
|-- factory
|   |-- bootinfo_emmc.bin
|   |-- bootinfo_sd.bin
|   |-- bootinfo_spinand.bin
|   |-- bootinfo_spinor.bin
|   `-- FSBL.bin
|-- fastboot.yaml
|-- fw_dynamic.itb
|-- genimage.cfg
|-- partition_2M.json
|-- partition_flash.json
`-- u-boot.itb

经常更新的文件包括 env.bin,FSBL.bin,u-boot.bin,这些文件在 device/board/spacemit/xxx/kernel/build_kernel.sh 中拷贝到打包目录,如下:

cp ${OHOS_SOURCE_ROOT}/device/soc/${DEVICE_BOARD}/k1/kernel/boot/bootfs/boot_logo_spacemit_0.bmp ${OHOS_IMAGES_DIR}/bootfs/bianbu.bmp
cp ${OHOS_SOURCE_ROOT}/device/board/${DEVICE_BOARD}/${DEVICE_NAME}/kernel/boot/bootfs/env_k1-x.txt ${OHOS_IMAGES_DIR}/bootfs/env_k1-x.txt
cp ${OHOS_SOURCE_ROOT}/device/soc/${DEVICE_BOARD}/k1/kernel/boot/env.bin ${OHOS_IMAGES_DIR}/env.bin
cp ${OHOS_SOURCE_ROOT}/device/soc/${DEVICE_BOARD}/k1/kernel/boot/u-boot.itb ${OHOS_IMAGES_DIR}/u-boot.itb
cp ${OHOS_SOURCE_ROOT}/device/soc/${DEVICE_BOARD}/k1/kernel/boot/fw_dynamic.itb ${OHOS_IMAGES_DIR}/fw_dynamic.itb
cp ${OHOS_SOURCE_ROOT}/device/board/${DEVICE_BOARD}/${DEVICE_NAME}/kernel/boot/partition_universal.json ${OHOS_IMAGES_DIR}/partition_universal.json
cp ${OHOS_SOURCE_ROOT}/device/soc/${DEVICE_BOARD}/k1/kernel/boot/fastboot.yaml ${OHOS_IMAGES_DIR}/fastboot.yaml
cp ${OHOS_SOURCE_ROOT}/device/soc/${DEVICE_BOARD}/k1/kernel/boot/genimage.cfg ${OHOS_IMAGES_DIR}/genimage.cfg
cp -r ${OHOS_SOURCE_ROOT}/device/soc/${DEVICE_BOARD}/k1/kernel/boot/factory ${OHOS_IMAGES_DIR}/

某些方案的 uboot 有特殊定制的情况下,需要将 uboot 的 bin 单独放置在该方案的目录 device/board/spacemit/xxx/kernel/boot 下,同时也需要修改 build_kernel.sh 文件,拷贝方案目录下的 uboot 文件到打包目录。

定制 kernel

修改 dts

内核的 dts 文件统一放置在:kernel/linux/spacemit_kernel-6.6/arch/riscv/boot/dts/spacemit,如下所示:

|-- k1-x-camera-reserved-mm.dtsi
|-- k1-x-camera-sdk.dtsi
|-- k1-x-camera-sensor.dtsi
|-- k1-x_deb1.dts
|-- k1-x_deb2.dts
|-- k1-x.dtsi
|-- k1-x-efuse.dtsi
|-- k1-x_evb.dts
|-- k1-x-hdmi.dtsi
|-- k1-x_hs450.dts
|-- k1-x_kx312.dts
|-- k1-x-lcd.dtsi
|-- k1-x_lpi3a.dts
|-- k1-x_milkv-jupiter.dts
|-- k1-x_mingo.dts
|-- k1-x_MINI-PC.dts
|-- k1-x_MUSE-Book.dts
|-- k1-x_MUSE-Card.dts
|-- k1-x_MUSE-N1.dts
|-- k1-x_MUSE-Paper2.dts
|-- k1-x_MUSE-Paper.dts
|-- k1-x_MUSE-Paper-mini-4g.dts
|-- k1-x_MUSE-Pi.dts
|-- k1-x_opp_table.dtsi
|-- k1-x_pinctrl.dtsi
|-- k1-x_SMT001.dts
|-- k1-x_thermal_cooling.dtsi
|-- k1-x_ZT001H.dts
|-- lcd
|   |-- lcd_ft8201sinx101_mipi.dtsi
|   |-- lcd_gc9503v_mipi.dtsi
|   |-- lcd_gx09inx101_mipi.dtsi
|   |-- lcd_icnl9911c_mipi.dtsi
|   |-- lcd_icnl9951r_mipi.dtsi
|   |-- lcd_jd9365dah3_mipi.dtsi
|   |-- lcd_jd9365da_mipi_1280x800.dtsi
|   |-- lcd_lt8911_edp_1920x1080.dtsi
|   |-- lcd_lt8911_edp_1920x1200.dtsi
|   |-- lcd_lt9711_dp_1920x1080.dtsi
|   `-- lcd_orisetech_ota7290b_mipi.dtsi
|-- m1-x_milkv-jupiter.dts
`-- Makefile

可以根据方案名称修改对应的 dts 文件即可,修改完成后,重新编译内核,如下:

./build.sh --product-name xxx --ccache -T build_kernel

修改 defconfig

内核的 defconfig 文件放在:kernel/linux/spacemit_kernel-6.6/arch/riscv/configs/k1_defconfig,该 defconfig 是所有方案共用的,修改后,对所有的方案生 效,如果只是针对某个特定方案的修改,需要以打 patch 的形式来修改,过程如下:

生成 patch:fix.patch 将 fix.patch 放置于 device/board/spacemit/xxx/kernel/kernel_patch 中 device/board/spacemit/musebook/kernel/build_kernel.sh 中打 patch,如下:

patch -p1 <${OHOS_SOURCE_ROOT}/device/board/${DEVICE_BOARD}/${DEVICE_NAME}/kernel/kernel_patch/fix.patch

定制 vendor 目录

这里简要说明 vendor/spacemit/xxx 下面的目录和文件的用途:

bluetooth:蓝牙厂商适配层,适配蓝牙模组主要修改该文件夹
config.json:该方案包含的组件,可以对组件进行增删和组件属性添加
default_app_config:暂无修改
etc:添加一些系统属性,如 const.product.name=“XXX”
hals:内部 audio 目录主要适配音频通路等
hdf_config:方案的 hdf 配置文件
image_conf:暂无修改
ohos.build:添加构建模块
power_config:配置电源管理模式,分为 NORMAL,POWER_SAVE,PERFORMANCE,EXTREME_POWER_SAVE 几种,可以配置每种模式的行为,包括关屏时间,待机时间等
preinstall-config:安装的应用 hap 包管理和权限管理
product.gni:一些属性配置
resourceschedule:暂无修改
security_config:暂无修改
updater_config:暂无修改
window_config:窗口相关配置,比如屏幕旋转方向,过场动画时间配置等

定制 device 目录

device 下面分为 board 和 soc 这 2 个目录,soc 中的内容是针对 K1 芯片的适配,board 中的内容是针对个产品方案的适配,device 下面的目录结构如下所示:

|-- board
|   `-- spacemit
|       |-- common
|       |-- deb1
|       |-- kernel_patches
|       |-- musebook
|       |-- musecard
|       |-- musepi
|       |-- smt001
|       `-- zt001h
`-- soc
    `-- spacemit
        |-- common
        `-- k1

device/board/spacemit/xxx 下面的主要修改点包括:

cfg/default.para:一些系统配置参数
cfg/fstab.xxx:文件系统挂载配置
cfg/init.xxx.cfg:启动配置
cfg/init.xxx.usb.cfg:usb 启动配置
kernel:内核相关的配置和文件
kernel/boot:uboot 相关文件
kernel/build_kernel.sh:内核构建脚本
kernel/kernel_patch:内核补丁
kernel/ko:需要加载的 ko
device/soc/spacemit/k1 下面的主要修改点包括:
hardware:K1 适配硬件的适配层,包括硬件编解码,GPU 等
kernel/boot:uboot 相关文件
tools:一些命令行工具

通过添加全新方案定制

定制 uboot

目前 uboot 未上传源码,可以提供原理图,并提供一个方案的代号,比如 ABC,进迭配置并编译好后,提供 uboot 相关的 bin 文件。下面说明对于进迭提供的 uboot 文件如何添加到系统中。

通用的 uboot 文件在 device/soc/spacemit/k1/kernel/boot 目录下,如下:

|-- bootfs
|   |-- boot_logo_spacemit_0.bmp
|   |-- boot_logo_spacemit_180.bmp
|   |-- boot_logo_spacemit_270.bmp
|   `-- boot_logo_spacemit_90.bmp
|-- env.bin
|-- factory
|   |-- bootinfo_emmc.bin
|   |-- bootinfo_sd.bin
|   |-- bootinfo_spinand.bin
|   |-- bootinfo_spinor.bin
|   `-- FSBL.bin
|-- fastboot.yaml
|-- fw_dynamic.itb
|-- genimage.cfg
|-- partition_2M.json
|-- partition_flash.json
`-- u-boot.itb

经常更新的文件包括 env.bin,FSBL.bin,u-boot.bin,这些文件在 device/board/spacemit/xxx/kernel/build_kernel.sh 中拷贝到打包目录,如下:

cp ${OHOS_SOURCE_ROOT}/device/soc/${DEVICE_BOARD}/k1/kernel/boot/bootfs/boot_logo_spacemit_0.bmp ${OHOS_IMAGES_DIR}/bootfs/bianbu.bmp
cp ${OHOS_SOURCE_ROOT}/device/board/${DEVICE_BOARD}/${DEVICE_NAME}/kernel/boot/bootfs/env_k1-x.txt ${OHOS_IMAGES_DIR}/bootfs/env_k1-x.txt
cp ${OHOS_SOURCE_ROOT}/device/soc/${DEVICE_BOARD}/k1/kernel/boot/env.bin ${OHOS_IMAGES_DIR}/env.bin
cp ${OHOS_SOURCE_ROOT}/device/soc/${DEVICE_BOARD}/k1/kernel/boot/u-boot.itb ${OHOS_IMAGES_DIR}/u-boot.itb
cp ${OHOS_SOURCE_ROOT}/device/soc/${DEVICE_BOARD}/k1/kernel/boot/fw_dynamic.itb ${OHOS_IMAGES_DIR}/fw_dynamic.itb
cp ${OHOS_SOURCE_ROOT}/device/board/${DEVICE_BOARD}/${DEVICE_NAME}/kernel/boot/partition_universal.json ${OHOS_IMAGES_DIR}/partition_universal.json
cp ${OHOS_SOURCE_ROOT}/device/soc/${DEVICE_BOARD}/k1/kernel/boot/fastboot.yaml ${OHOS_IMAGES_DIR}/fastboot.yaml
cp ${OHOS_SOURCE_ROOT}/device/soc/${DEVICE_BOARD}/k1/kernel/boot/genimage.cfg ${OHOS_IMAGES_DIR}/genimage.cfg
cp -r ${OHOS_SOURCE_ROOT}/device/soc/${DEVICE_BOARD}/k1/kernel/boot/factory ${OHOS_IMAGES_DIR}/

某些方案的 uboot 有特殊定制的情况下,需要将 uboot 的 bin 单独放置在该方案的目录 device/board/spacemit/xxx/kernel/boot 下,同时也需要修改 build_kernel.sh 文件,拷贝方案目录下的 uboot 文件到打包目录。

定制 kernel

修改 dts 内核的 dts 文件统一放置在:kernel/linux/spacemit_kernel-6.6/arch/riscv/boot/dts/spacemit,如下所示:

|-- k1-x-camera-reserved-mm.dtsi
|-- k1-x-camera-sdk.dtsi
|-- k1-x-camera-sensor.dtsi
|-- k1-x_deb1.dts
|-- k1-x_deb2.dts
|-- k1-x.dtsi
|-- k1-x-efuse.dtsi
|-- k1-x_evb.dts
|-- k1-x-hdmi.dtsi
|-- k1-x_hs450.dts
|-- k1-x_kx312.dts
|-- k1-x-lcd.dtsi
|-- k1-x_lpi3a.dts
|-- k1-x_milkv-jupiter.dts
|-- k1-x_mingo.dts
|-- k1-x_MINI-PC.dts
|-- k1-x_MUSE-Book.dts
|-- k1-x_MUSE-Card.dts
|-- k1-x_MUSE-N1.dts
|-- k1-x_MUSE-Paper2.dts
|-- k1-x_MUSE-Paper.dts
|-- k1-x_MUSE-Paper-mini-4g.dts
|-- k1-x_MUSE-Pi.dts
|-- k1-x_opp_table.dtsi
|-- k1-x_pinctrl.dtsi
|-- k1-x_SMT001.dts
|-- k1-x_thermal_cooling.dtsi
|-- k1-x_ZT001H.dts
|-- lcd
|   |-- lcd_ft8201sinx101_mipi.dtsi
|   |-- lcd_gc9503v_mipi.dtsi
|   |-- lcd_gx09inx101_mipi.dtsi
|   |-- lcd_icnl9911c_mipi.dtsi
|   |-- lcd_icnl9951r_mipi.dtsi
|   |-- lcd_jd9365dah3_mipi.dtsi
|   |-- lcd_jd9365da_mipi_1280x800.dtsi
|   |-- lcd_lt8911_edp_1920x1080.dtsi
|   |-- lcd_lt8911_edp_1920x1200.dtsi
|   |-- lcd_lt9711_dp_1920x1080.dtsi
|   `-- lcd_orisetech_ota7290b_mipi.dtsi
|-- m1-x_milkv-jupiter.dts
`-- Makefile

可以根据方案名称添加对应的 dts 文件,比如 k1-x_ABC.dts,修改完成后,添加到上述目录中,并修改 Makefile 文件,如下:

diff --git a/arch/riscv/boot/dts/spacemit/Makefile b/arch/riscv/boot/dts/spacemit/Makefile
index ea48d28cedda..36beb0761dd7 100644
--- a/arch/riscv/boot/dts/spacemit/Makefile
+++ b/arch/riscv/boot/dts/spacemit/Makefile
@@ -3,5 +3,5 @@ dtb-$(CONFIG_SOC_SPACEMIT_K1X) += k1-x_evb.dtb k1-x_deb2.dtb k1-x_deb1.dtb k1-x_
                                  k1-x_MUSE-Pi.dtb k1-x_milkv-jupiter.dtb m1-x_milkv-jupiter.dtb \
                                  k1-x_MUSE-Book.dtb k1-x_lpi3a.dtb k1-x_MUSE-Card.dtb \
                                  k1-x_MUSE-Paper.dtb k1-x_MUSE-Paper-mini-4g.dtb \
-                                 k1-x_ZT001H.dtb k1-x_MUSE-Paper2.dtb
+                                 k1-x_ZT001H.dtb k1-x_MUSE-Paper2.dtb k1-x_ABC.dtb
 obj-$(CONFIG_BUILTIN_DTB) += $(addsuffix .o, $(dtb-y))

重新编译内核,如下:

./build.sh --product-name xxx --ccache -T build_kernel

修改 defconfig 内核的 defconfig 文件放在:kernel/linux/spacemit_kernel-6.6/arch/riscv/configs/k1_defconfig,该 defconfig 是所有方案共用的,修改后,对所有的方案生 效,如果只是针对某个特定方案的修改,需要以打 patch 的形式来修改,过程如下:

生成 patch:fix.patch 将 fix.patch 放置于 device/board/xxx/musebook/kernel/kernel_patch 中 device/board/spacemit/xxx/kernel/build_kernel.sh 中打 patch,如下:

patch -p1 <${OHOS_SOURCE_ROOT}/device/board/${DEVICE_BOARD}/${DEVICE_NAME}/kernel/kernel_patch/fix.patch

定制 vendor 目录 vendor 目录的定制和 2.1.3 章节有差别,因为添加全新方案,vendor/spacemit 下面还没有这个目录,定制方法为拷贝一个现有方案目录,然后统一修改其中的关于方案的字 样,然后在进行具体内容的修改。 拷贝现有方案:选择一个相似的方案进行拷贝,比如要做开发板,就选择 deb1,新建方案以开发板 smt001 为例,如下:

cd vendor/spacemit
cp -r deb1 smt001

统一修改方案名,将所有 deb1 字样修改为 smt001,将所有带有 deb1 字样的文件名修改为带有 smt001 的文件名

# sed -i "s/deb1/smt001/g" `grep -rl deb1 ./`
# find . -name *deb1*
./etc/param/product_deb1.para
./etc/param/hardware_deb1.para
# mv ./etc/param/product_deb1.para ./etc/param/product_smt001.para
# mv ./etc/param/hardware_deb1.para ./etc/param/hardware_smt001.para

进行修改定制

定制 device 目录 device 目录的定制和 2.1.4 章节有差别,因为添加全新方案,device/board/spacemit 下面还没有这个目录,定制方法为拷贝一个现有方案目录,然后统一修改其中的关于 方案的字样,然后在进行具体内容的修改。

拷贝现有方案:选择一个相似的方案进行拷贝,比如要做开发板,就选择 deb1 新建方案以开发板 smt001 为例,如下:

cd device/board/spacemit
cp -r deb1 smt001

统一修改方案名,将所有 deb1 字样修改为 smt001,将所有带有 deb1 字样的文件名修改为带有 smt001 的文件名

# sed -i "s/deb1/smt001/g" `grep -rl deb1 ./`
# find . -name *deb1*
./etc/param/product_deb1.para
./etc/param/hardware_deb1.para
# mv ./etc/param/product_deb1.para ./etc/param/product_smt001.para
# mv ./etc/param/hardware_deb1.para ./etc/param/hardware_smt001.para

进行修改定制 build 目录添加权限 subsystem_compoents_whitelist.json 中添加方案配置

diff --git a/subsystem_compoents_whitelist.json b/subsystem_compoents_whitelist.json
index ee125742..a01e2e1c 100644
--- a/subsystem_compoents_whitelist.json
+++ b/subsystem_compoents_whitelist.json
@@ -15,6 +15,7 @@
    "device_musepi" :"device_musepi",
   "device_musecard" :"device_musecard",
+  "device_smt001" :"device_smt001",
    "device_zt001h" :"device_zt001h",

compile_standard_whitelist.json 中添加模块的白名单,改动相对较对,方法是搜索该方案拷贝的原方案的名字,比如 deb1,包含 deb1 的模块都拷贝一份,并将方案名 称修改为 smt001

在 GitHub 上编辑此页
上次更新:
贡献者: yhs
Next
系统定制