1. OpenHarmony 3.1 源码编译¶
1.1. 1. 编译环境搭建¶
编译要求Ubuntu20.04,四线程或多线程,内存8GB以上,硬盘50GB
注册gitee用于repo+ssh下载源代码,不注册可以使用repo+https获取代码.
执行
ssh-keygen -o
一路回车,根目录下.ssh/id_rsa.pub
,复制ssh密钥绑定到gitee ssh key.安装20.04系统的依赖,其他系统自行解决依赖。
sudo apt-get update
sudo apt-get install binutils git git-lfs gnupg flex bison gperf build-essential zlib1g-dev \
gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev \
ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby \
openjdk-8-jdk genext2fs libopencv-dev lz4 libssl-dev libncurses5 git-lfs lib32z1-dev zip curl
# 如果libncurses5这个依赖没安装上,执行apt再次安装依赖
sudo apt install libncurses5
配置git
git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store
安装repo工具
# 1. 执行:sudo su 切换root管理
# 2. 下载工具:
curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo
# 3. 并将其配置到环境变量中
chmod a+x /usr/local/bin/repo
# 4. 执行su <user> 退出管理权限 user是你用户名
# 5. 最后执行:
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
切换Python 3 版本
sudo ln -sf /usr/bin/python3 /usr/bin/python
通过repo获取:使用OpenHarmony-v3.1.3-Release分支
通过repo + ssh 下载 推荐
repo init -u git@gitee.com:openharmony/manifest.git -b refs/tags/OpenHarmony-v3.1.3-Release --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
通过repo + https 下载
repo init -u https://gitee.com/openharmony/manifest.git -b refs/tags/OpenHarmony-v3.1.3-Release --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
下载工具链
bash ./build/prebuilts_download.sh
开始编译
./build.sh --product-name rk3568 --ccache
编译完成结果如下:
[OHOS INFO] global 45 0.2% 45 0.2% 1.00
[OHOS INFO] hdf 523 2.6% 523 2.3% 1.00
[OHOS INFO] hiviewdfx 302 1.5% 302 1.3% 1.00
[OHOS INFO] location 53 0.3% 53 0.2% 1.00
[OHOS INFO] miscservices 218 1.1% 218 1.0% 1.00
[OHOS INFO] msdp 13 0.1% 13 0.1% 1.00
[OHOS INFO] multimedia 525 2.6% 525 2.3% 1.00
[OHOS INFO] multimodalinput 114 0.6% 114 0.5% 1.00
[OHOS INFO] notification 162 0.8% 162 0.7% 1.00
[OHOS INFO] powermgr 162 0.8% 162 0.7% 1.00
[OHOS INFO] resourceschedule 209 1.0% 209 0.9% 1.00
[OHOS INFO] security 351 1.7% 351 1.5% 1.00
[OHOS INFO] sensors 51 0.3% 51 0.2% 1.00
[OHOS INFO] settingsdata 3 0.0% 3 0.0% 1.00
[OHOS INFO] startup 135 0.7% 135 0.6% 1.00
[OHOS INFO] telephony 368 1.8% 368 1.6% 1.00
[OHOS INFO] test 24 0.1% 24 0.1% 1.00
[OHOS INFO] updater 106 0.5% 106 0.5% 1.00
[OHOS INFO] usb 17 0.1% 17 0.1% 1.00
[OHOS INFO] useriam 134 0.7% 134 0.6% 1.00
[OHOS INFO] web 7 0.0% 7 0.0% 1.00
[OHOS INFO] window 87 0.4% 87 0.4% 1.00
[OHOS INFO] wpa_supplicant-2.9 165 0.8% 165 0.7% 1.00
[OHOS INFO] wukong 6 0.0% 6 0.0% 1.00
[OHOS INFO]
[OHOS INFO] c overall build overlap rate: 1.12
[OHOS INFO]
[OHOS INFO]
[OHOS INFO] rk3568 build success
[OHOS INFO] cost time: 0:02:41
=====build successful=====
2022-12-15 09:57:25
++++++++++++++++++++++++++++++++++++++++
dev@dev:~/hmxt$
12.编译后的产物路径在:
dev@dev:~/hmxt/out/rk3568/packages/phone/images$ ll
总用量 754000
drwxrwxr-x 2 d d 4096 12月 15 09:56 ./
drwxrwxr-x 12 d d 4096 12月 15 09:56 ../
-rw-rw-r-- 1 d d 67108864 12月 15 09:56 boot_linux.img
-rw-rw-r-- 1 d d 455104 12月 14 15:36 MiniLoaderAll.bin
-rwxrwxr-x 1 d d 528 12月 14 15:36 parameter.txt*
-rw-rw-r-- 1 d d 133120 12月 14 15:36 resource.img
-rw-rw-r-- 1 d d 1610608640 12月 15 09:57 system.img
-rwxrwxr-x 1 d d 4194304 12月 14 15:36 uboot.img*
-rw-rw-r-- 1 d d 20971520 12月 15 09:56 updater.img
-rw-rw-r-- 1 d d 1468006400 12月 15 09:56 userdata.img
-rw-rw-r-- 1 d d 268431360 12月 15 09:56 vendor.img
1.2. 2. 第二次编译 适配LubanCat2¶
我们提供lubancat2设备树 (百度网盘链接,提供设备树和镜像刷机工具 https://pan.baidu.com/s/1d13kpVyXEmlPxh65M-52Iw 提取码:0n4h)
在当前目录中执行代码复制一份内核到目录下../lbc-kernel
cp ./out/kernel/src_tmp/linux-5.10 ../lbc-kernel -r
进入到刚才复制出来的lbc-kernel文件夹中,执行以下命令,完成git仓库的初始化
# 初始化文件夹作为git仓库
git init
# git全局配置
git config --global user.name "yourname"
git config --global user.email "youremail"
# 进行第一次提交代码
git add .
git commit -m 'lbc2'
添加LubanCat2设备的支持 (百度网盘链接,提供设备树和镜像刷机工具 https://pan.baidu.com/s/1d13kpVyXEmlPxh65M-52Iw 提取码:0n4h )
把rk3568-lubancat2-mipi.dts的设备树放到lbc-kernel/arch/arm64/boot/dts/rockchip下,或者我们可以使用MobaXterm把设备树拖进去
修改make-ohos.sh,需要生成的设备树文件为rk3568-lubancat2-mipi.dts
--- a/make-ohos.sh
+++ b/make-ohos.sh
@@ -12,7 +12,8 @@ MAKE="make CROSS_COMPILE=../../../../prebuilts/gcc/linux-x86/aarch64/gcc-linaro-
BUILD_PATH=boot_linux
EXTLINUX_PATH=${BUILD_PATH}/extlinux
EXTLINUX_CONF=${EXTLINUX_PATH}/extlinux.conf
-TOYBRICK_DTB=toybrick.dtb
+# TOYBRICK_DTB=toybrick.dtb
+LBC2_DTB=rk3568-lubancat2-mipi.dtb
ID_MODEL=1
ID_ARCH=2
@@ -23,6 +24,7 @@ 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"
+ "RK3568-LBC2-MIPI arm64 0xfe660000 rk3568-lubancat2-mipi Image rockchip_linux_defconfig"
@@ -44,7 +46,7 @@ function make_extlinux_conf()
echo "label rockchip-kernel-5.10" > ${EXTLINUX_CONF}
echo " kernel /extlinux/${image}" >> ${EXTLINUX_CONF}
- echo " fdt /extlinux/${TOYBRICK_DTB}" >> ${EXTLINUX_CONF}
+ echo " fdt /extlinux/${LBC2_DTB}" >> ${EXTLINUX_CONF}
if [ "enable_ramdisk" == "${ramdisk_flag}" ]; then
echo " initrd /extlinux/ramdisk.img" >> ${EXTLINUX_CONF}
fi
@@ -109,7 +111,7 @@ function make_boot_linux()
fi
make_extlinux_conf ${dtb_path} ${uart} ${image}
cp -f arch/${arch}/boot/${image} ${EXTLINUX_PATH}/
- cp -f ${dtb_path}/${dtb}.dtb ${EXTLINUX_PATH}/${TOYBRICK_DTB}
+ cp -f ${dtb_path}/${dtb}.dtb ${EXTLINUX_PATH}/${LBC2_DTB}
cp -f logo*.bmp ${BUILD_PATH}/
if [ "enable_ramdisk" != "${ramdisk_flag}" ]; then
make_ext2_image
制作补丁
将我们所有修改的代码完成了,应用保存所有,并执行制作补丁代码来形成patch
# 第二次提交代码
git add .
git commit -m "add lubancat2"
# 最后形成patch
git format-patch HEAD -1
patch形成文件在kernel当前目录下:0000-add-lubancat2.patch
# 把刚修改的patch移植到SDK中,路径为/home/dev/hmxt/kernel/linux/patches/linux-5.10/rk3568_patch下,也可使用MobaXterm拖进去
mv 0000-add-lubancat2.patch /home/dev/hmxt/kernel/linux/patches/linux-5.10/rk3568_patch/
修改编译内核脚本
路径: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/0000-add-lubancat2.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
do
patch -p1 < ${KERNEL_PATCH}
done
....
if [ "enable_ramdisk" == "${9}" ]; then
#./make-ohos.sh TB-RK3568X0 enable_ramdisk
./make-ohos.sh RK3568-LBC2-MIPI enable_ramdisk
else
#./make-ohos.sh TB-RK3568X0 disable_ramdisk
./make-ohos.sh RK3568-LBC2-MIPI disable_ramdisk
if
....
# 内核config配置
./hmxt/kernel/linux/config/linux-5.10/arch/arm64/configs/rk3568_standard_defconfig
修改显示的版本号,可参考我们修改的
路径:base/startup/init_lite/servcies/etc/param/ohos.para
const.build.characteristics=default
const.product.model=EmbedFire LubanCat 2 #型号设备
const.product.name="野火鲁班猫2" #版本信息名称
persist.sys.usb.config=hdc
const.sandbox=enable
const.product.devicetype=default
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.ohos.version.security_patch=2022-09-01
const.product.software.version=OpenHarmony-3.1 Release #固件版本信息
const.product.incremental.version=default
const.product.firstapiversion=1
# 以上全保存后,再次编译
./build.sh --product-name rk3568 --ccache
结束后产物在out/rk3568/packages/phone/images,复制到桌面文件夹,使用RKDevTool线刷烧录进去(百度网盘提供 https://pan.baidu.com/s/1d13kpVyXEmlPxh65M-52Iw 提取码:0n4h )
1.3. 3. 固件烧录¶
1. 准备工作 注:仅支持烧录镜像到EMMC,不支持TF
USB Type-A to Type-C 数据线,用于在PC和LubanCan2之间传输数据;
电脑环境:支持Win7,Win10,Win11环境下使用。
百度网盘提供镜像RKDevTool,含有驱动
2.刷入镜像
将电脑创建新文件,通过MobaXterm在out/rk3568/packages/phone/images目录下把所有固件拖到电脑文件夹里,再次从百度网盘下载RKDevTool存放到电脑文件夹与镜像同在,如图:
先切断电源适配器,接着我们准备好数据线一端连接主机,一端连接开发板,打开RKDevTool文件夹里的RKDevTool.exe (注:烧写前,需安装最新 USB 驱动,驱动文件:DriverAssitant_v5.1.1.zip)
点击①这一列可以选择添加文件,添加的文件与名字一列修改成如上图所示
先将LubanCat2通过USB线缆连接至电脑,后按住MASKROM不动,等待烧录软件识别, 当提示发现一个 Maskrom 设备时,即可松开按键。最后点击 执行 等待写入结束。
2. OpenHarmony 3.2 源码编译¶
1. 通过网盘下载 OpenHarmony 3.2 - 百度云链接:https://pan.baidu.com/s/19t8AZV9SYTdjn2uObBiSGA 提取码:hslu
源码路径:鲁班猫/4.1鸿蒙OpenHarmonyOS镜像/ohos-lubancat-sdk.tar.gz
3.1和3.2编译建构不一样,我们可以通过网盘下载ohos-lubancat-sdk.tar.gz源码来解压编译。
安装好上面的依赖。
在Ubuntu创建文件夹:ohos-lubancat
将 ohos-lubancat.tar.gz 压缩包解压到 ohos-lubancat
进入 ohos-lubancat 目录,执行
./build.sh --product-name rk3568 --ccache
开始编译
编译后的产物路径在:
dev@dev:~/hm/ohos-lubancat/out/rk3568/packages/phone/images$ ll
total 647596
drwxrwxr-x 2 d d 4096 May 5 07:26 ./
drwxrwxr-x 14 d d 4096 May 5 07:26 ../
-rw-rw-r-- 1 d d 67108864 May 5 07:24 boot_linux.img
-rw-rw-r-- 1 d d 52428800 May 5 07:26 chip_prod.img
-rw-rw-r-- 1 d d 7959 May 5 07:24 config.cfg
-rw-rw-r-- 1 d d 455104 May 5 07:24 MiniLoaderAll.bin
-rw-rw-r-- 1 d d 655 May 5 07:24 parameter.txt
-rw-rw-r-- 1 d d 2263650 May 5 07:26 ramdisk.img
-rw-rw-r-- 1 d d 2529792 May 5 07:24 resource.img
-rw-rw-r-- 1 d d 52428800 May 5 07:26 sys_prod.img
-rw-rw-r-- 1 d d 1610608640 May 5 07:26 system.img
-rw-rw-r-- 1 d d 4194304 May 5 07:24 uboot.img
-rw-rw-r-- 1 d d 10305956 May 5 07:26 updater.img
-rw-rw-r-- 1 d d 1468006400 May 5 07:26 userdata.img
-rw-rw-r-- 1 d d 268431360 May 5 07:26 vendor.img
编译lubancat2n
为了方便开发,我们提供第二次开发包源码是直接通过脚本切换选择设备来编译;
通过脚本切换方法如下:
路径:ohos-lubancat/device/board/hihope/rk3568/kernel/build_kernel.sh
修改第25行:LUBANCAT_PATCH=LUBANCAT_2 # 切换设备DTS
切换设备为:LUBANCAT_PATCH=LUBANCAT_2N
然后执行删除kernel :rm -rf /out/kernel
编译:./build.sh --product-name rk3568 --ccache
最后将ohos-lubancat/out/rk3568/packages/phone/images文件夹复制到电脑上
1.打开RKDevTool.exe开发工具,选择镜像下载,然后在白色框里面右键导入配置,选择镜像文件夹images/config.cfg
2.根据添加的文件与名字一列选择进去并点击 执行 等待刷入结束。