> 文档中心 > [OpenHarmony RK3568] (二)基础开发

[OpenHarmony RK3568] (二)基础开发

文章目录

    • 一、概述
      • 1.1 设备相关的文件夹
    • 二、准备工作
      • 2.1 修改显示的版本号等
      • 2.2 关闭使用ramdisk
    • 三、分析OpenHarmony系统构成和所需固件
      • 3.1 分区文件
      • 3.2 系统构成所需固件
    • 四、制作内核补丁
      • 4.1 首先第一次编译
      • 4.2 复制内核源码
      • 4.3 将源码作为git仓库
      • 4.4 增加对自己设备的支持
      • 4.4 制作补丁
      • 4.5 修改编译内核脚本
    • 五、编译并烧写即可

一、概述

本文讲述如何修改内核配置等基础修改

1.1 设备相关的文件夹

vendor/hihope/rk3568

device/board/hihope/rk3568

device/soc/rockchip/rk3568

二、准备工作

2.1 修改显示的版本号等

base/startup/init_lite/servcies/etc/param/ohos.para

这个设置修改的是设置->设备信息中的内容

const.actionable_compatible_property.enabled=falseconst.postinstall.fstab.prefix=/systemconst.secure=1security.perf_harden=1const.allow.mock.location=0const.debuggable=1const.build.characteristics=defaultconst.product.model=test3568const.product.name="这里写设备名字"persist.sys.usb.config=hdcconst.sandbox=enableconst.product.devicetype=M3568const.software.model=defaultconst.product.manufacturer=这里写公司名字const.product.brand=defaultconst.build.product=defaultconst.product.hardwareversion=defaultconst.product.bootloader.version=bootloaderconst.product.cpu.abilist=defaultconst.product.software.version=这里写固件名字const.product.incremental.version=defaultconst.product.firstapiversion=1const.product.build.type=defaultconst.product.build.user=defaultconst.product.build.host=defaultconst.product.build.date=defaultconst.product.hardwareprofile=defaultconst.ohos.buildroothash=default

2.2 关闭使用ramdisk

vendor/hihope/rk3568/config.json

我们不需要使用ramdisk进行初始化,找到enable_ramdisk,改为false

"enable_ramdisk": false,

三、分析OpenHarmony系统构成和所需固件

3.1 分区文件

可以参考paramter.txt

FIRMWARE_VER:11.0MACHINE_MODEL:rk3568_rMACHINE_ID:007MANUFACTURER: rockchipMAGIC: 0x5041524BATAG: 0x00200800MACHINE: rk3568_rCHECK_MASK: 0x80PWR_HLD: 0,0,A,0,1TYPE: GPTCMDLINE:mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00030000@0x00008000(boot),0x00002000@0x00038000(resource),0x00002000@0x0003A000(misc),0x000010000@0x0003C000(updater),0x100000@0x004C000(vendor),0x00400000@0x0014C000(system),-@0x0054C000(userdata:grow)uuid:system=614e0000-0000-4b53-8000-1d28000054a9uuid:boot=a2d37d82-51e0-420d-83f5-470db993dd35uuid:userdata=8b13db99-110a-41c2-b16b-dfd44d7ebeca

3.2 系统构成所需固件

uboot:uboot第二部分分区,烧写uboot.img

boot:kernel的分区,同样包含了设备树,烧写boot.img

resource:烧写resource.img,里面包含了logo

misc:空分区,但是以后可能胡有用

updater:存放updater的分区,未验证,烧写update.img

vendor:存放产商相关代码,烧写vendor.img

system:存放OHOS本身系统代码的分区,烧写sysytem.img

userdata:存放用户数据的分区,剩下的空间都给它,烧写userdata.img

除此以外,还需要MiniLoaderAll.bin和paramter.txt本身。

四、制作内核补丁

4.1 首先第一次编译

./build.sh --product-name rk3568 --ccache

4.2 复制内核源码

cp ./out/kernel/src_tmp/linux-5.10 ../ohos-kernel -r

4.3 将源码作为git仓库

进入到刚才复制出来的kernel文件夹中,执行以下命令,完成git仓库的初始化

#初始化文件夹作为git仓库git init#git全局配置git config --global user.name "yourname" git config --global user.email "youremail"#进行第一次提交代码git add -Agit commit -m 'frist commit'

[OpenHarmony RK3568] (二)基础开发

4.4 增加对自己设备的支持

(1) 把自己的设备树放到ohos-kernel/arch/arm64/boot/dts/rockchip

注:设备树一定需要include rk3568-linux.dtsi文件

(2) 修改make-ohos.sh

假设这里我们最终需要生成的设备树文件为my3568-board-linux.dtb

#!/bin/bashset -eexport PATH=../../../../prebuilts/clang/ohos/linux-x86_64/llvm/bin/:$PATHexport PRODUCT_PATH=vendor/hihope/rk3568IMAGE_SIZE=64  # 64MIMAGE_BLOCKS=4096CPUs=`sed -n "N;/processor/p" /proc/cpuinfo|wc -l`MAKE="make CROSS_COMPILE=../../../../prebuilts/gcc/linux-x86/aarch64/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-"BUILD_PATH=boot_linuxEXTLINUX_PATH=${BUILD_PATH}/extlinuxEXTLINUX_CONF=${EXTLINUX_PATH}/extlinux.conf#TOYBRICK_DTB=toybrick.dtbMY3568_DTB=my3568-board-linux.dtbif [ ${KBUILD_OUTPUT} ]; thenOBJ_PATH=${KBUILD_OUTPUT}/fiID_MODEL=1ID_ARCH=2ID_UART=3ID_DTB=4ID_IMAGE=5ID_CONF=6model_list=("TB-RK3568X0   arm64 0xfe660000 rk3568-toybrick-x0-linux  Image rockchip_linux_defconfig""TB-RK3568X10  arm64 0xfe660000 rk3568-toybrick-x10-linux Image rockchip_linux_defconfig""MYBOARD3568   arm64 0xfe660000 my3568-board-linux     Image rockchip_linux_defconfig")function help(){echo "Usage: ./make-ohos.sh {BOARD_NAME}"echo "e.g."for i in "${model_list[@]}"; doecho "  ./make-ohos.sh $(echo $i | awk '{print $1}')"done}function make_extlinux_conf(){dtb_path=$1uart=$2image=$3echo "label rockchip-kernel-5.10" > ${EXTLINUX_CONF}echo "kernel /extlinux/${image}" >> ${EXTLINUX_CONF}#echo "fdt /extlinux/${TOYBRICK_DTB}" >> ${EXTLINUX_CONF}echo "fdt /extlinux/${MY3568_DTB}" >> ${EXTLINUX_CONF}cmdline="append earlycon=uart8250,mmio32,${uart} root=PARTUUID=614e0000-0000-4b53-8000-1d28000054a9 rw rootwait rootfstype=ext4"echo "  ${cmdline}" >> ${EXTLINUX_CONF}}function make_kernel_image(){arch=$1conf=$2dtb=$3${MAKE} ARCH=${arch} ${conf}if [ $? -ne 0 ]; thenecho "FAIL: ${MAKE} ARCH=${arch} ${conf}"return -1fi${MAKE} ARCH=${arch} ${dtb}.img -j${CPUs}if [ $? -ne 0 ]; thenecho "FAIL: ${MAKE} ARCH=${arch} ${dtb}.img"return -2fireturn 0}function make_ext2_image(){blocks=${IMAGE_BLOCKS}block_size=$((${IMAGE_SIZE} * 1024 * 1024 / ${blocks}))if [ "`uname -m`" == "aarch64" ]; thenecho y | sudo mke2fs -b ${block_size} -d boot_linux -i 8192 -t ext2 boot_linux.img ${blocks}elsegenext2fs -B ${blocks} -b ${block_size} -d boot_linux -i 8192 -U boot_linux.imgfireturn $?}function make_boot_linux(){arch=${!ID_ARCH}uart=${!ID_UART}dtb=${!ID_DTB}image=${!ID_IMAGE}conf=${!ID_CONF}if [ ${arch} == "arm" ]; thendtb_path=arch/arm/boot/dtselsedtb_path=arch/arm64/boot/dts/rockchipfirm -rf ${BUILD_PATH}mkdir -p ${EXTLINUX_PATH}make_kernel_image ${arch} ${conf} ${dtb}if [ $? -ne 0 ]; thenexit 1fimake_extlinux_conf ${dtb_path} ${uart} ${image}cp -f ${OBJ_PATH}arch/${arch}/boot/${image} ${EXTLINUX_PATH}/#cp -f ${OBJ_PATH}${dtb_path}/${dtb}.dtb ${EXTLINUX_PATH}/${TOYBRICK_DTB}cp -f ${OBJ_PATH}${dtb_path}/${dtb}.dtb ${EXTLINUX_PATH}/${MY3568_DTB}cp -f logo*.bmp ${BUILD_PATH}/if [ "enable_ramdisk" != "${ramdisk_flag}" ]; thenmake_ext2_imagefi}ramdisk_flag=$2found=0for i in "${model_list[@]}"; doif [ "$(echo $i | awk '{print $1}')" == "$1" ]; thenmake_boot_linux $ifound=1fidone

4.4 制作补丁

注意:尽量不要在这份代码中编译!,否则产生的日志文件过大,可以复制一份去尝试编译

假设我们做了若干次修改后,我们使用git log命令去查看提交的日志(因为我的源码里面日志比较敏感,就不全放了)

[OpenHarmony RK3568] (二)基础开发

假设第一次提交,也就是first commit的日志id为 8148df7c6fdc0bfc5f7549c0eae011043320a461,最新提交的日志id为fd459ec617481a6d3b6ae6b311c58cc9f95ea38d

那么就是git diff 8148df7c6fdc0bfc5f7549c0eae011043320a461 fd459ec617481a6d3b6ae6b311c58cc9f95ea38d > 0001-fixed-kernel-for-myboard.patch

然后移植到SDK中,这里建议用mv,防止下次生成补丁的时候,把补丁文件本身也生成进去

mv 0001-fixed-kernel-for-myboard.patch  /home/fenix/SDK/kernel/linux/patches/linux-5.10/rk3568_patch

4.5 修改编译内核脚本

device/board/hihope/rk3568/kernel/build_kernel.h

增加编译时候对补丁的调用,并更改编译内核的目标板子为我们自己的

...KERNEL_PATCHES="${ROOT_DIR}/kernel/linux/patches/linux-5.10/rk3568_patch/kernel.patch ${ROOT_DIR}/kernel/linux/patches/linux-5.10/rk3568_patch/0001-fix-m3568.patch"...#HDF patchbash ${ROOT_DIR}/drivers/hdf_core/adapter/khdf/linux/patch_hdf.sh ${ROOT_DIR} ${KERNEL_SRC_TMP_PATH} ${HDF_PATCH}#kernel patchfor KERNEL_PATCH in $KERNEL_PATCHESdo    patch -p1 < ${KERNEL_PATCH}done....if [ "enable_ramdisk" == "${9}" ]; then#./make-ohos.sh TB-RK3568X0 enable_ramdisk./make-ohos.sh MYBOARD3568 enable_ramdiskelse    #./make-ohos.sh TB-RK3568X0 disable_ramdisk./make-ohos.sh MYBOARD3568 disable_ramdiskfi

五、编译并烧写即可

这个不用我教了吧

Python学习手册