文章目录

  • 一、概述
    • 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=false
const.postinstall.fstab.prefix=/system
const.secure=1
security.perf_harden=1
const.allow.mock.location=0
const.debuggable=1
const.build.characteristics=default
const.product.model=test3568
const.product.name="这里写设备名字"
persist.sys.usb.config=hdc
const.sandbox=enable
const.product.devicetype=M3568
const.software.model=default
const.product.manufacturer=这里写公司名字
const.product.brand=default
const.build.product=default
const.product.hardwareversion=default
const.product.bootloader.version=bootloader
const.product.cpu.abilist=default
const.product.software.version=这里写固件名字
const.product.incremental.version=default
const.product.firstapiversion=1
const.product.build.type=default
const.product.build.user=default
const.product.build.host=default
const.product.build.date=default
const.product.hardwareprofile=default
const.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.0
MACHINE_MODEL:rk3568_r
MACHINE_ID:007
MANUFACTURER: rockchip
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: rk3568_r
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: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-1d28000054a9
uuid:boot=a2d37d82-51e0-420d-83f5-470db993dd35
uuid: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 -A
git commit -m 'frist commit'

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/:$PATH
export PRODUCT_PATH=vendor/hihope/rk3568
IMAGE_SIZE=64  # 64M
IMAGE_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_linux
EXTLINUX_PATH=${BUILD_PATH}/extlinux
EXTLINUX_CONF=${EXTLINUX_PATH}/extlinux.conf
#TOYBRICK_DTB=toybrick.dtb
MY3568_DTB=my3568-board-linux.dtbif [ ${KBUILD_OUTPUT} ]; thenOBJ_PATH=${KBUILD_OUTPUT}/
fiID_MODEL=1
ID_ARCH=2
ID_UART=3
ID_DTB=4
ID_IMAGE=5
ID_CONF=6
model_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=$2
found=0
for i in "${model_list[@]}"; doif [ "$(echo $i | awk '{print $1}')" == "$1" ]; thenmake_boot_linux $ifound=1fi
done

4.4 制作补丁

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

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

假设第一次提交,也就是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 patch
bash ${ROOT_DIR}/drivers/hdf_core/adapter/khdf/linux/patch_hdf.sh ${ROOT_DIR} ${KERNEL_SRC_TMP_PATH} ${HDF_PATCH}#kernel patch
for KERNEL_PATCH in $KERNEL_PATCHES
dopatch -p1 < ${KERNEL_PATCH}
done....if [ "enable_ramdisk" == "${9}" ]; then#./make-ohos.sh TB-RK3568X0 enable_ramdisk./make-ohos.sh MYBOARD3568 enable_ramdisk
else#./make-ohos.sh TB-RK3568X0 disable_ramdisk./make-ohos.sh MYBOARD3568 disable_ramdisk
fi

五、编译并烧写即可

这个不用我教了吧

下一篇:[OpenHarmony RK3568] (三)蓝牙芯片适配

[OpenHarmony RK3568] (二)基础开发相关推荐

  1. c# 无法加载oraops.dll_Robotstudio软件二次开发:基于C#语言的Smart组件开发基础

    Robotstudio软件除了支持Add-Ins插件的二次开发以外,还支持Smart组件的二次开发.开发语言同样是基于.NET框架的C#语言或VB语言.Smart组件是Robotstudio软件中实现 ...

  2. abaqus python二次开发攻略_Python 进行 Abaqus 二次开发的基础知识

    1.Python 一切皆对象的特点 Object(对象):可以是数据,可以是函数,也可以是包含若干数据和函数的打包整体.对象可以包括成员和方法. Member(成员):对象包含的子对象,子对象可以是数 ...

  3. SOMv3.3.3二次开发中LUA脚本对机基础操作指南

    前言 先感谢亲爱的学长,没有他们,我一个人根本无法完成这篇博客 顿首,顿首,再顿首!!! 本篇博客属于实验记录,由于LUA脚本较为简单,所以本博客不多做深入探讨,基本上是把官方的用法更为详细地记录一下 ...

  4. lsdyna如何设置set中的node_list_ANSA中进行二次开发的Python基础知识

    ANSA.META的二次开发均基于Python开发.本文基于ANSA的帮助文档<Introduction to Python>进行一定的扩展,希望能帮助大家快速掌握这门语言. 首先来介绍下 ...

  5. C# Revit二次开发基础/核心编程---建筑建模-标高和轴网

    一.本节课程 C# Revit二次开发基础/核心编程---建筑建模-标高和轴网 二.本节要讲解的知识点 1.标高的高度.创建标高 2.轴网曲线.创建轴网 具体内容 1.标高 标高是有限水平平面,大多数 ...

  6. Bentley ORD(openroads designer) 二次开发(BIM)第二节 基础接口分享

    Bentley ORD(openroads designer) 二次开发(BIM)第二节 基础接口分享 CoderLPF 2021-01-25 07:37:54  89  已收藏 1 分类专栏: Be ...

  7. QGis二次开发基础 -- 构建图层管理器

    为了回应有些同学对上一篇博文的建议,这篇文章主要关注于QGis二次开发中的"图层管理器"的实现. 使用QGis构建独立应用系统,我相信大部分同学应该还是关注于GIS基本功能框架构建 ...

  8. UG/NX10二次开发学习视频目录整理(NXOPEN基础篇)

    为了方便搜索需要的视频资料,整理了唐康林老师发布在B站的视频目录,支持全局目录搜索,点击直达视频. NX10二次开发(NXOPEN基础篇) P1第07章-01-NX10二次开发之与用户界面的结合运用[ ...

  9. C# Revit二次开发基础/核心编程--- Application\Document\Transaction

    一.本节课程 C# Revit二次开发基础/核心编程--- Application\Document\Transaction 二.本节要讲解的知识点 Application\Document\Tran ...

  10. MapGis二次开发——基础地图目录树控件的加载

    MapGis二次开发--基础地图目录树控件的加载 第一步:添加MapGis引用 MapGis动态库位置是在你安装位置下的\Program\plugin下,例如我的安装位置就是:D:\MapGIS 10 ...

最新文章

  1. Java分布式 RPC 框架性能大比拼,Dubbo最差?
  2. java docx word api_javadoc生成word接口文档
  3. Gartner预测:2025年,人工智能将创造200万个新增就业机会
  4. find the OPP in your life
  5. HTML 页面自动刷新
  6. 【转】Glut处理鼠标事件
  7. 2018 “百度之星”程序设计大赛 - 初赛(A)P1002度度熊学队列(双端队列模拟,STL)
  8. 聪聪用计算机计算235乘49,四年级数学题库
  9. Unity游戏开发团队包括哪些角色?
  10. 利用随机矩阵理论(random matrix theory)确定微生物网络构建阈值
  11. 机器视觉检测技术之颜色视觉工具应用
  12. wifi的html页面,WiFi
  13. 【字节跳动实习】后端日常实习的三次面试+hr面 面经
  14. flv 视频播放器代码
  15. matlab求解线性规划问题的实例代码,用matlab求解线性规划问题.doc
  16. Javascript Module Pattern,公共属性不能获取到最新值(Javascript revealing module pattern, public properties)
  17. miniGUI-4.0.2 交叉编译
  18. LabVIEW代码中常见的错误
  19. python 窗口最小化_如何让tkinter窗口最小化
  20. python希腊字母字符串_#10 Python字符串

热门文章

  1. 个子矮s弯如何看点打方向图解_s弯如何看点打方向图解?s弯方向盘打法口诀
  2. Linux配置定时任务
  3. 微信小程序-仿微信朋友圈
  4. 提供几本WEB前端开发电子书(2012/10/31更新)
  5. 时序分析基本概念介绍Slew/Transition
  6. 常用地理坐标系统和投影坐标系统
  7. [Vue]缓存路由组件 activated()与deactivated()
  8. 《微积分:一元函数微分学》——费马定理
  9. 关于个人网贷查询系统网贷信用查询,公司开发图片整合技术
  10. 第一水上软件 Hypack v10.05b 海洋调查和水道测量 HYPACK 2011