1. OpenHarmony 3.1 源码编译

1.1. 1. 编译环境搭建

  1. 编译要求Ubuntu20.04,四线程或多线程,内存8GB以上,硬盘50GB

  2. 注册gitee用于repo+ssh下载源代码,不注册可以使用repo+https获取代码.

  3. 执行 ssh-keygen -o 一路回车,根目录下 .ssh/id_rsa.pub,复制ssh密钥绑定到gitee ssh key.

  4. 安装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
  1. 配置git

git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store
  1. 安装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
  1. 切换Python 3 版本 sudo ln -sf /usr/bin/python3 /usr/bin/python

  2. 通过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'
  1. 下载工具链

bash ./build/prebuilts_download.sh
  1. 开始编译

./build.sh --product-name rk3568 --ccache
  1. 编译完成结果如下:

[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

  1. 我们提供lubancat2设备树 (百度网盘链接,提供设备树和镜像刷机工具 https://pan.baidu.com/s/1d13kpVyXEmlPxh65M-52Iw 提取码:0n4h)

  1. 在当前目录中执行代码复制一份内核到目录下../lbc-kernel

cp ./out/kernel/src_tmp/linux-5.10 ../lbc-kernel -r
  1. 进入到刚才复制出来的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'
  1. 添加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
  1. 制作补丁

  • 将我们所有修改的代码完成了,应用保存所有,并执行制作补丁代码来形成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/
  1. 修改编译内核脚本

  • 路径: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
  1. 修改显示的版本号,可参考我们修改的

路径: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
  1. 结束后产物在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存放到电脑文件夹与镜像同在,如图:

../../_images/hmsjgj.png
  • 先切断电源适配器,接着我们准备好数据线一端连接主机,一端连接开发板,打开RKDevTool文件夹里的RKDevTool.exe (注:烧写前,需安装最新 USB 驱动,驱动文件:DriverAssitant_v5.1.1.zip)

  • 点击①这一列可以选择添加文件,添加的文件与名字一列修改成如上图所示

../../_images/tianjiawenjian.png
  • 先将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 开始编译

  1. 编译后的产物路径在:

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
  1. 编译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
  1. 最后将ohos-lubancat/out/rk3568/packages/phone/images文件夹复制到电脑上

  • 1.打开RKDevTool.exe开发工具,选择镜像下载,然后在白色框里面右键导入配置,选择镜像文件夹images/config.cfg

  • 2.根据添加的文件与名字一列选择进去并点击 执行 等待刷入结束。

../../_images/shuajiffadier.jpg