K1 JOH5.0 方案添加移植说明
SDK 目前支持方案
生态产品 | 形态 | 启动方式 | 显示 | 触摸 | wifi | BT | eth | usb | 键鼠 | camera |
MUSEPaper2 | 平板 | Emmc tf卡 | Mipi dsi | √ | √ | √ | × | √ | × | √ |
MUSEPaper | 平板 | Emmc tf卡 | Mipi dsi | √ | √ | √ | × | √ | × | √ |
添加定制方案
和产品方案相关的几个关键仓库和如下:
- 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 和 MUSEPi,可以通过修改这 2 个方案中的配置来适配新的开发板
- 添加 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
| |-- musepaper
| |-- musepaper2
| |-- musepapermini4g
| |-- 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:一些命令行工具