OpenHarmony开源鸿蒙NEXT星河版内核嵌入式编程

一、前景提要

  • 2024年1月18日,华为放出HarmonyOS NEXT 鸿蒙星河版开发者预览版本(不是HarmonyOS NEXT版,是HarmonyOS NEXT星河版),首次提到用鸿蒙内核(暂命名)取代了Linux内核。

    • 该内核源码还未放出,当前能下载到的还是OpenHarmony4.1的版本,里面的轻型小型系统使用的还是LiteOS内核,标准系统使用的还是Linux内核。
    • 等纯国产内核释出后,我会重新修改此文档。
  • 开源鸿蒙OpenHarmony和华为HarmonyOS是两样东西!华为鸿蒙里面包含非开源代码。因为很多嵌入式产品单价低、利润薄、出货量大,所以我只会跟踪开源鸿蒙OpenHarmony的鸿蒙内核和底层代码,对华为鸿蒙不涉及。

二、OpenHarmony源码下载、编译与运行

1、源码整体感知
  • 这是OpenHarmony的源码目录:
jim@ubuntu:~/OpenHarmony$ ls -a
.             build          developtools  foundation     .repo
..            build.py       device        .gn            test
applications  build.sh       docs          kernel         third_party
base          commonlibrary  drivers       productdefine  vendor159,898 items, totalling 11.6 GB当前下载的是单一芯片单一系统类型的代码,总量11G,如果是全量代码,OpenHarmony4.0会有30G。
  • OpenHarmony有Gitee源码仓库:https://gitee.com/openharmony ,但是和其它简单的Git仓库不一样,它不是通过 git clone xxx 一个命令就能下载全量代码的,而是和安卓类似,需要用到manifest这个顶层仓库,并且通过repo工具把很多个Git仓库的特定版本拉到本地同一个目录。

    • 顶层目录下没有.git的文件夹,只有.repo的文件夹,而底下的每个文件夹可能就是单独的Git仓库,有自己的.git隐藏文件夹
2、源码下载
2.1、最简单的下载方式
  • 推荐你下载OpenHarmony4.1全量代码,最简单,直接网址下载,总共30G左右,不用解决Linux环境下的各种依赖错误。
    • 下载网址 https://repo.huaweicloud.com/openharmony/os/4.1-Beta1/code-v4.1-Beta1.tar.gz
    • 出了新版本后也是进入上面类似的网址,进入新版本的文件夹种下载压缩包即可。
2.2、常规的下载方式
  • 如果你有过Linux内核开发经验,知道接下来要使用OpenHarmony在哪款板子上运行,则建议你下载特定类型(轻型小型标准)、特定芯片的系统,此下载步骤需要在Linux发行版如Ubuntu下进行,总共11G左右;
    • 安装VMware或者VMware-Player或者Virual Box虚拟机,初学者建议使用VMware,网上教程更多,过程略;
    • 安装Ubuntu系统,过程略,我使用的是Ubuntu18.04.6;
    • 执行命令:
	推荐使用Ubuntu18.04及以上版本,Ubuntu16.04不行,Windows + MSYS2 + MinGW64不行;安装Ubuntu后把“电源”和“隐私”的设置都改成永远不锁屏,否则一锁屏后下载就会停住,需要退出重新来,容易导致文件冲突;建议在你创建好的文件夹内打开命令行,如果你在~家目录打开命令行,则下载的源码文件都在家目录下,会和其它文件混在一起,文件夹很多,分辨不出哪个是系统原有的,想再剪切到别的文件就困难了。进入Ubuntu系统后,在桌面上按鼠标右键,然后点击打开终端这一项,老系统可以按Ctrl + Alt + T打开命令行终端,默认是在~家目录mkdir ~/openHarmony			/* 家目录下新建文件夹 */cd ~/openHarmony			/* 进入新建的文件夹 */sudo apt-get install git	/* 安装Git软件 */git config --global user.name jimXXX	/* 配置Git,输入你自己的名字 */git config --global user.email jimXXX@163.com	/* 配置Git,输入你自己的邮箱 */git config --global credential.helper store	/* 配置Git为自动保存账号密码 */ssh-keygen -t rsa -C jimXXX@163.com	/* 生成Gitee网站要用到的密钥,这里是输入你自己的邮箱,回车三次 */gedit ~/.ssh/id_rsa.pub /* 复制密钥,复制里面全部的文本内容 */打开网址 https://gitee.com/ 注册账号,点击齿轮状的设置,点击安全设置中的SSH公钥,将刚刚复制的内容填入到“公钥”这个文本框内,点击确定,输入密码,即添加完Git公钥

	mkdir ~/binsudo apt install curlcurl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 -o ~/bin/repo chmod a+x ~/bin/reposudo apt install python3-pip如果用了Ubuntu老版本系统,如Ubuntu18.04,则还要继续执行下面步骤:sudo apt-get install python3echo alias python=python3 >> ~/.bashrcsource ~/.bashrcpython3 --versionwhereis python3sudo ln -s /usr/bin/python3 /usr/bin/pythonpip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests如果使用了Ubuntu16.04及以前的系统,这条命令可能会报错,需要你自己解决gedit ~/.bashrc  打开桌面~下的.bashrc隐藏文件夹在最后面加上一句 export PATH=~/bin:$PATH,保存退出source ~/.bashrc 生效环境变量echo $PATH 查看环境变量repo init -u https://gitee.com/openharmony/manifest -b master -m chipsets/niobe407.xml -g ohos:mini 做好下载指定开发板指定芯片源码的准备,我这里是下载ARM Cortex-M内核的Niobe407开发板的STM32F407IGT6芯片如果下载全量代码,则使用 repo init -u git@github.com:openharmony/manifest.git -b master --no-repo-verify如果下载QEMU模拟器的代码,则使用 repo init -u https://gitee.com/openharmony/manifest -b master -m chipsets/qemu.xml -g ohos:minirepo sync -c 开始下载,等待时间会比较久需要设置电脑不待机,如果中途卡住,可以Ctrl + C退出当前命令,并再次repo sync -c继续下载如果继续下载有冲突,则手动删除有冲突的文件夹后继续使用repo sync -c你在哪个文件夹路径使用repo init,就会在这个路径形成一个.repo隐藏文件夹,已经下载完的文件夹会在当前目录中出现sudo apt-get install git-lfsrepo forall -c 'git lfs pull'继续拉取大文件
  • 下载完之后的文件结构如下:
jim@ubuntu:~/OpenHarmony$ ls -a
.             build          developtools  foundation     .repo
..            build.py       device        .gn            test
applications  build.sh       docs          kernel         third_party
base          commonlibrary  drivers       productdefine  vendor159,898 items, totalling 11.6 GB当前下载的是单一芯片单一系统类型的代码,总量11G,如果是全量代码,OpenHarmony4.0会有30G。
  • repo仓库是由多个git仓库拼起来的,源码根目录下是.repo隐藏文件夹,里面的某些子文件夹下如果有.git隐藏文件夹,那么它就是一个独立的git仓库
3、编译系统,生成OHOS_Image可执行文件
  • 编译OpenHarmony源码前先下载源码

    • 步骤见:[ #### OpenHarmony4.1源码下载和编译流程
  • 确定你要编译哪一块开发板,我这里使用QEMU模拟器虚拟开发板:

    • 可以编译的开发板和芯片列表,含QEMU模拟器 - 编译形态整体说明
    • QEMU模拟器 + ARM Coterx-M核 + mini轻型系统的配置有:
      • qemu_mini_system_demo arm_mps2_an386 qemu liteos_m mini arm-cortex-m4
      • qemu_cm55_mini_system_demo arm_mps3_an547 qemu liteos_m mini arm-cortex-m55
      • Qemu Arm Cortex-m4 mps2-an386 教程
      • Qemu Arm Cortex-m55 mps3-an547 教程
      • QEMU(Quick Emulator)鸿蒙QEMU模拟器操作指南
  • 下载:安装VMware虚拟机 + Ubuntu发行版系统 + Git软件 + repo软件 + Python

    • 如果你之前不是下载的全量30G代码,是下载的别的开发板的代码,那么在下载的openHarmony目录下再执行一次下面的命令,多下一份qemu模拟器的源码;
    • 使用 repo init -u https://gitee.com/openharmony/manifest -b master -m chipsets/qemu.xml -g ohos:mini 初始化对应于QEMU模拟器(类似于开发板)的全套源码
    • 按之前的的步骤接着下载鸿蒙源码
      • repo sync -c
      • repo forall -c ‘git lfs pull’
3.1、最简单的编译流程,使用Docker
  • 使用鸿蒙官方已经准备好的Docker环境
    • Docker编译环境
    • sudo apt install docker.io
    • sudo docker pull swr.cn-south-1.myhuaweicloud.com/openharmony-docker/docker_oh_mini:3.2
    • cd ~/openHarmony 进入到你下载的开源鸿蒙源码的路径,再执行下面这一条
    • docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/docker_oh_mini:3.2
    • 这时已经进入到docker的虚拟环境
jim@ubuntu:~/openHarmony$ sudo docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/docker_oh_mini:3.2
root@949f932a2f80:/home/openharmony# ls
applications  build     build.sh       developtools  docs     foundation  ohos_config.json  prebuilts      qemu-run  third_party
base          build.py  commonlibrary  device        drivers  kernel      out               productdefine  test      vendor
root@949f932a2f80:/home/openharmony#
  • python3 build.py -p qemu_mini_system_demo@ohemu

    • 你要编译什么板子,就使用什么命令,我这里是编译qemu的轻型系统
    • 开始编译轻型系统,编译时间会需要很久,十几分钟……
    • 编译工具分为轻型、小型、标准,而芯片、开发板的归属也分为这三种,下载的工具和你编译的参数必须属于同一种类,否则会编译各种报错!!!
  • 在编译结束后,编译所生成的文件都会被存放在out/{device_name}/目录下,结果镜像输出在out/{device_name}/packages/phone/images/目录下。

  • 如果遇到报错,则解决报错

  • 编译成功后是这样的打印:

[OHOS INFO] [1614/1615] STAMP obj/build/ohos/images/make_images.stamp
[OHOS INFO] [1615/1615] STAMP obj/build/core/gn/images.stamp
[OHOS INFO] ccache_dir = /root/.ccache, ccache_exec = /usr/bin/ccache
[OHOS INFO] --------------------------------------------
[OHOS INFO] ccache summary:
[OHOS INFO] ccache version: 3.7.7
[OHOS INFO] cache hit (direct): 0
[OHOS INFO] cache hit (preprocessed): 0
[OHOS INFO] cache miss: 0
[OHOS INFO] hit rate: 0.00% 
[OHOS INFO] miss rate: 0.00% 
[OHOS INFO] Cache size (GB): 
[OHOS INFO] ---------------------------------------------
[OHOS INFO] c targets overlap rate statistics
[OHOS INFO] subsystem       	files NO.	percentage	builds NO.	percentage	overlap rate
[OHOS INFO] hiviewdfx       	      12	0.8%	      12	0.8%	1.00
[OHOS INFO] kernel          	     902	63.5%	     902	63.5%	1.00
[OHOS INFO] security        	      61	4.3%	      61	4.3%	1.00
[OHOS INFO] startup         	      26	1.8%	      26	1.8%	1.00
[OHOS INFO] systemabilitymgr	      15	1.1%	      15	1.1%	1.00
[OHOS INFO] thirdparty      	     393	27.7%	     393	27.7%	1.00
[OHOS INFO] 
[OHOS INFO] c overall build overlap rate: 1.00
[OHOS INFO] 
[OHOS INFO] 
[OHOS INFO] qemu_mini_system_demo@ohemu build success
[OHOS INFO] Cost time:  0:05:47
root@ff38bf1e3e75:/home/openharmony# jim@ubuntu:~/openHarmony/out/arm_mps2_an386/qemu_mini_system_demo$ ls
all_parts_host.json           build_configs   config.h         kconfig_files.txt  OHOS_Image.bin              src_installed_parts.json
all_parts_info.json           build.log       error.log        libs               OHOS_Image.map              src_sa_infos_tmp.json
args.gn                       build.ninja     etc              NOTICE_FILES       OHOS_Image.sym.sorted       startup
binary_installed_parts.json   build.ninja.d   gen              obj                packages                    thirdparty
build.1709259296.3884952.log  build.trace.gz  hiviewdfx        OHOS_Image         security                    toolchain.ninja
build.1709259767.6772568.log  config.gni      kconfig_env.txt  OHOS_Image.asm     sorted_action_duration.txt
jim@ubuntu:~/openHarmony/out/arm_mps2_an386/qemu_mini_system_demo$ 
  • 生成的系统镜像image是这里面的OHOS_Image文件

  • 如需退出Docker,执行exit命令即可。这个命令会停止当前的Docker容器,并返回到您的操作系统。

  • 下一步就可以把编译好的操作系统在QEMU模拟器中运行起来啦。

3.2、使用ohos-build工具编译
  • 最常用的编译方式是使用hb命令,也就是ohos-build工具,这是鸿蒙自己的Python工具
    • 了解OpenHarmony-编译

    • OpenHarmony支持hb和build.sh两种编译方式。

    • 安装hb编译工具

    • 安装库和工具集

    • .sh方式编译构建指导

    • python3 -V 查看python版本,如果是3.8以下,则:

      • sudo apt install python3.8
      • sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
      • sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2
      • sudo update-alternatives --config python3
      • python3 -V
    • python3 -m pip install --user ohos-build

      • pip3是Python的包管理工具,用于安装、升和管理Python包
      • 需要python3.8以上的版本
  • 安装流程介绍:
    • hb安装异常处理
    • 快速入门-如何编译程序
    • 安装库和工具集-编译流程
  • 如果你是Ubuntu18.04,则先执行
    • cd /usr/lib/python3/dist-packages
    • cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so apt_pkg.cpython-39m-x86_64-linux-gnu.so apt_pkg.so
    • cd -
  • 再安装依赖库
sudo apt-get update && sudo apt-get install binutils binutils-dev git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib gcc-arm-linux-gnueabi libc6-dev-i386 libc6-dev-amd64 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby genext2fs device-tree-compiler make libffi-dev e2fsprogs pkg-config perl openssl libssl-dev libelf-dev libdwarf-dev u-boot-tools mtd-utils cpio doxygen liblz4-tool openjdk-8-jre gcc g++ texinfo dosfstools mtools default-jre default-jdk libncurses5 apt-utils wget scons python3.8-distutils tar rsync git-core libxml2-dev lib32z-dev grsync xxd libglib2.0-dev libpixman-1-dev kmod jfsutils reiserfsprogs xfsprogs squashfs-tools pcmciautils quota ppp libtinfo-dev libtinfo5 libncurses5-dev libncursesw5 libstdc++6 gcc-arm-none-eabi vim ssh locales libxinerama-dev libxcursor-dev libxrandr-dev libxi-dev
  • 仔细看安装后的信息,如果提示有哪些包未安装成功,则你需要单独安装

    • sudo apt-get install g++-multilib
    • sudo apt-get install gcc-arm-linux-gnueabi
    • sudo apt-get install gcc-multilib
    • sudo apt-get install lib32ncurses5-dev
    • sudo apt-get install lib32z1-dev
    • sudo apt-get install libc6-dev-i386
    • sudo apt-get install gcc-7-arm-linux-gnueabi
    • sudo apt-get install libc6-amd64:i386
    • sudo aptitude install gcc-multilib:i386 使用aptitude命令可以自动解决包依赖关系,需要先安装aptitude软件
  • 已经按前面的流程下载好源码

  • cd ~/openHarmony 进入到你下载的源码根目录

  • bash build/prebuilts_download.sh 安装和芯片相关的编译器和二进制工具,全自动的,会下载的同时进行安装,要等待一段时间,有进度条

  • python3 -m pip install --user build/hb

  • gedit ~/.bashrc

  • 将 export PATH=~/.local/bin:$PATH 加入到最后一行并保存退出

  • source ~/.bashrc

  • hb --help 这个命令执行时可能有报错,有什么错误就解决什么错误,例如用下面方法解决报错

    • python3 -m pip uninstall ohos-build
    • python3 -m pip install --user ohos-build==0.4.3
  • hb set 进行编译设置

    • 第一步目录输入. 选择源码根目录的当前目录
    • 第二步选择开发板,我使用上下方向键选择qemu_mini_system_demo这款qemu的模拟器开发板,ARM Cortex-M4内核的虚拟芯片
      • 编译形态整体说明,含QEMU,可以编译哪些开发板和芯片
      • Qemu Arm Cortex-m4 mps2-an386 教程
      • qemu_mini_system_demo arm_mps2_an386 qemu liteos_m mini arm-cortex-m4
jim@ubuntu:~/openHarmony$ hb set
[OHOS INFO] Input code path: .
OHOS Which product do you need?  qemu_mini_system_demo
  • hb build -f 开始编译,有报错则处理报错

  • 出现build success表示编程成功,然后进行烧录,或者直接用QEMU模拟器进行运行。

3.3 使用传统Linux脚本方式编译
  • 如果你用hb的方式编译始终出错,那么可以试试使用传统.sh脚本的方式

    • 使用build.sh脚本编译源码
  • ./build.sh --product-name qemu_mini_system_demo --ccache /* 需要换成你自己开发板的名称,我这里使用的是QEMU模拟器的虚拟开发板 */

    • 有报错则解决报错
  • 检查编译结果。编译完成后,log中显示如下:

    • post_process
    • =====build name successful.
    • 编译所生成的文件都归档在out/{device_name}/目录下,结果镜像输出在out/{device_name}/packages/phone/images/ 目录下。
  • 如果依然编译有报错,那还可以试试Docker

  • 如果你只是想编译应用程序,那么可以使用DevEco Device Tool

    • 应用编译
3、系统运行
  • 如果你是在某一块开发板上运行开源鸿蒙系统,那么请参照该开发板对应的sdk文档
  • 我准备在QEMU模拟器中运行ARM Cortex-M4的轻型开源鸿蒙系统
    • 官方支持的开发板和模拟器种类-编译形态整体说明
    • 已支持的示例工程,Qemu模拟器: arm_mps2_an386、esp32、riscv32_virt、SmartL_E802
    • Qemu Arm Cortex-m4 mps2-an386 教程
  • 在电脑上安装QEMU模拟器软件,可以在Windows下安装,也可以在Linux发行版下安装
    • Qemu安装-QEMU Quick Emulator QEMU在Ubuntu下的安装流程;是下载源码后再编译,编译速度很慢,可以make只编译ARM部分的,这样编译速度会快很多
      • …/configure --target-list=arm-softmmu,arm-linux-user
      • make -j4
      • sudo make install
    • 在Windows下的安装流程更简单
    • Windows的所有安装包 安装6.2.0及以上的版本都可以
    • 官网下载很慢,可以用国内网站下载 https://www.mydown.com/soft/172/726002172.shtml
    • Windows下安装后需要手动配置好QEMU的环境变量,或者直接进入到D:\Program Files\qemu的目录下打开CMD命令行界面,这样才能调用qemu的命令
  • Ubuntu回到OpenHarmony源码根目录下,使用命令行用QEMU模拟器运行开源鸿蒙系统
    • ./qemu-run --help
    • ./qemu-run -e out/arm_mps2_an386/qemu_mini_system_demo/OHOS_Image
    • qemu-run是个脚本,可以用文本文件打开,它里面也是调用的qemu-system-arm这个命令,只是自动传入了需要的参数
  • 这是开源鸿蒙在QEMU硬件模拟器中运行的结果,当前源码中对QEMU Cortex-M4的适配有点问题,会有程序跑飞的报错,你可以再尝试一下别的QEMU开发板,或者以后用OpenHarmony新版本的程序再试一次:
jim@ubuntu:~/openHarmony$ ./qemu-run -e out/arm_mps2_an386/qemu_mini_system_demo/OHOS_Image
board: arm_mps2_an386Enter to start qemu[y/n]:entering kernel init...
LfsLowLevelInit: DiskPartition succeed
LfsLowLevelInit: PartitionFormat succeed
LfsLowLevelInit: mount fs on '/littlefs' succeed
LfsLowLevelInit: mkdir '/littlefs' succeed
tcpip_init start
*************Exception Information**************
Type      = 11
ThrdPid   = 25
Phase     = exc in task
FaultAddr = 0xabababab
Current task info:
Task name = (null)
Task ID   = 25
Task SP   = (nil)
Task ST   = 0x0
Task SS   = 0x0
Exception reg dump:
PC        = 0x2100e62a
LR        = 0x2101b045
SP        = 0x210b18e0
R0        = 0x210a725c
R1        = 0x200
R2        = 0x210a725c
R3        = 0x2108a9b3
R4        = 0x0
R5        = 0x0
R6        = 0x0
R7        = 0x210b18e8
R8        = 0x0
R9        = 0x0
R10       = 0x0
R11       = 0x0
R12       = 0xc8000000
PriMask   = 0x0
xPSR      = 0x610f0000
----- backtrace start -----
backtrace 0 -- lr = 0x21015178
backtrace 1 -- lr = 0x2101b044
backtrace 2 -- lr = 0x210235da
backtrace 3 -- lr = 0x210235e2
backtrace 4 -- lr = 0x2102379a
----- backtrace end -----
qemu: fatal: Lockup: can't escalate 3 to HardFault (current priority -1)R00=210b2ad0 R01=2109fa3f R02=210a18f8 R03=6c0da998
R04=00000000 R05=00000060 R06=00000018 R07=210b1708
R08=00000019 R09=000003e8 R10=218ba1e8 R11=00000000
R12=00000000 R13=210b1708 R14=210011db R15=21000fcc
XPSR=21030006 --C- T handler
s00=00000000 s01=00000000 d00=0000000000000000
s02=00000000 s03=00000000 d01=0000000000000000
s04=00000000 s05=00000000 d02=0000000000000000
s06=00000000 s07=00000000 d03=0000000000000000
s08=00000000 s09=00000000 d04=0000000000000000
s10=00000000 s11=00000000 d05=0000000000000000
s12=00000000 s13=00000000 d06=0000000000000000
s14=00000000 s15=00000000 d07=0000000000000000
s16=00000000 s17=00000000 d08=0000000000000000
s18=00000000 s19=00000000 d09=0000000000000000
s20=00000000 s21=00000000 d10=0000000000000000
s22=00000000 s23=00000000 d11=0000000000000000
s24=00000000 s25=00000000 d12=0000000000000000
s26=00000000 s27=00000000 d13=0000000000000000
s28=00000000 s29=00000000 d14=0000000000000000
s30=00000000 s31=00000000 d15=0000000000000000
FPSCR: 00000000
/home/jim/openHarmony/vendor/ohemu/qemu_mini_system_demo/qemu_run.sh: line 95: 50440 Aborted                 (core dumped) qemu-system-arm -M mps2-an386 -m 16M -kernel $elf_file $qemu_option -append "root=dev/vda or console=ttyS0" -nographic
jim@ubuntu:~/openHarmony$ 
  • 在Windows的QEMU下可以用这个命令
    • qemu-system-arm -M mps2-an386 -cpu cortex-m4 -kernel OHOS_Image -serial stdio -nodefaults -nographic
    • 另外一个可供你参考的命令 qemu-system-arm -machine versatileab -cpu cortex-a9 -nographic -monitor null -semihosting -append ‘some program arguments’ -kernel program.axf
D:\Program Files\qemu>qemu-system-arm -M mps2-an386 -cpu cortex-m4 -kernel OHOS_Image -serial stdio -nodefaults -nographic
qemu-system-arm: warning: nic lan9118.0 has no peer
entering kernel init...
LfsLowLevelInit: DiskPartition succeed
LfsLowLevelInit: PartitionFormat succeed
LfsLowLevelInit: mount fs on '/littlefs' succeed
LfsLowLevelInit: mkdir '/littlefs' succeed
tcpip_init start
*************Exception Information**************
Type      = 11
ThrdPid   = 25
Phase     = exc in task
FaultAddr = 0xabababab
Current task info:
Task name = (null)
Task ID   = 25
Task SP   = (nil)
Task ST   = 0x0
Task SS   = 0x0
Exception reg dump:
PC        = 0x2100e62a
LR        = 0x2101b045
SP        = 0x210b18e0
R0        = 0x210a725c
R1        = 0x200
R2        = 0x210a725c
R3        = 0x2108a9b3
R4        = 0x0
R5        = 0x0
R6        = 0x0
R7        = 0x210b18e8
R8        = 0x0
R9        = 0x0
R10       = 0x0
R11       = 0x0
R12       = 0xc8000000
PriMask   = 0x0
xPSR      = 0x610f0000
----- backtrace start -----
backtrace 0 -- lr = 0x21015178
backtrace 1 -- lr = 0x2101b044
backtrace 2 -- lr = 0x210235da
backtrace 3 -- lr = 0x210235e2
backtrace 4 -- lr = 0x2102379a
----- backtrace end -----
qemu: fatal: Lockup: can't escalate 3 to HardFault (current priority -1)R00=210b2ad0 R01=2109fa3f R02=210a18f8 R03=6c0da998
R04=00000000 R05=00000060 R06=00000018 R07=210b1708
R08=00000019 R09=000003e8 R10=218ba1e8 R11=00000000
R12=00000000 R13=210b1708 R14=210011db R15=21000fcc
XPSR=21030006 --C- T handler
s00=00000000 s01=00000000 d00=0000000000000000
s02=00000000 s03=00000000 d01=0000000000000000
s04=00000000 s05=00000000 d02=0000000000000000
s06=00000000 s07=00000000 d03=0000000000000000
s08=00000000 s09=00000000 d04=0000000000000000
s10=00000000 s11=00000000 d05=0000000000000000
s12=00000000 s13=00000000 d06=0000000000000000
s14=00000000 s15=00000000 d07=0000000000000000
s16=00000000 s17=00000000 d08=0000000000000000
s18=00000000 s19=00000000 d09=0000000000000000
s20=00000000 s21=00000000 d10=0000000000000000
s22=00000000 s23=00000000 d11=0000000000000000
s24=00000000 s25=00000000 d12=0000000000000000
s26=00000000 s27=00000000 d13=0000000000000000
s28=00000000 s29=00000000 d14=0000000000000000
s30=00000000 s31=00000000 d15=0000000000000000
FPSCR: 00000000D:\Program Files\qemu>

三、源码讲解

  • 这是下载好的源码文件夹:
jim@ubuntu:~/openHarmony$ tree -a -L 1
.
├── applications
├── base
├── build
├── build.py -> build/build_scripts/build.py
├── build.sh -> build/build_scripts/build.sh
├── commonlibrary
├── developtools
├── device
├── docs
├── drivers
├── foundation
├── .gn -> build/core/gn/dotfile.gn
├── kernel
├── ohos_config.json
├── out
├── prebuilts
├── productdefine
├── qemu
├── qemu-run -> vendor/ohemu/common/qemu-run
├── .repo
├── test
├── third_party
└── vendor18 directories, 5 files
jim@ubuntu:~/openHarmony$ tree -a -L 2
.
├── applications
│   └── sample
├── base
│   ├── global
│   ├── hiviewdfx
│   ├── iothardware
│   ├── powermgr
│   ├── security
│   ├── sensors
│   ├── startup
│   └── update
├── build
│   ├── build_scripts
│   ├── bundle.json
│   ├── common
│   ├── compile_env_allowlist.json
│   ├── compile_standard_whitelist.json
│   ├── component_compilation_whitelist.json
│   ├── config
│   ├── core
│   ├── docs
│   ├── .git
│   ├── .gitattributes
│   ├── .gitee
│   ├── .gitignore
│   ├── gn_helpers.py
│   ├── hb
│   ├── LICENSE
│   ├── lite
│   ├── misc
│   ├── OAT.xml
│   ├── ohos
│   ├── ohos.gni
│   ├── ohos_system.prop
│   ├── ohos_var.gni
│   ├── prebuilts_download_config.json
│   ├── prebuilts_download.py
│   ├── prebuilts_download.sh
│   ├── print_python_deps.py
│   ├── __pycache__
│   ├── README_zh.md
│   ├── rust
│   ├── scripts
│   ├── subsystem_compoents_whitelist.json
│   ├── subsystem_config_example.json
│   ├── subsystem_config.json
│   ├── templates
│   ├── test
│   ├── test.gni
│   ├── toolchain
│   ├── tools
│   ├── version.gni
│   └── zip.py
├── build.py -> build/build_scripts/build.py
├── build.sh -> build/build_scripts/build.sh
├── commonlibrary
│   ├── c_utils
│   └── utils_lite
├── developtools
│   ├── global_resource_tool
│   ├── integration_verification
│   ├── packing_tool
│   └── syscap_codec
├── device
│   └── qemu
├── docs
│   ├── CODEOWNERS
│   ├── DCO.txt
│   ├── docker
│   ├── en
│   ├── .git
│   ├── .gitattributes
│   ├── .gitignore
│   ├── image.png
│   ├── LICENSE
│   ├── OAT.xml
│   ├── README.md
│   ├── README_zh.md
│   └── zh-cn
├── drivers
│   ├── hdf_core
│   ├── liteos
│   └── peripheral
├── foundation
│   ├── ability
│   ├── ai
│   ├── arkui
│   ├── bundlemanager
│   ├── communication
│   ├── distributedhardware
│   ├── graphic
│   ├── multimedia
│   ├── systemabilitymgr
│   └── window
├── .gn -> build/core/gn/dotfile.gn
├── kernel
│   ├── liteos_a
│   ├── liteos_m
│   └── uniproton
├── ohos_config.json
├── out
│   ├── arm_mps2_an386
│   ├── arm_virt
│   ├── hb_args
│   ├── ohos_config.json
│   ├── preloader
│   └── sdk
├── prebuilts
│   ├── ark_tools
│   ├── build-tools
│   ├── clang
│   ├── cmake
│   ├── develop_tools
│   ├── gcc
│   ├── mingw-w64
│   ├── packing_tool
│   ├── python
│   └── rustc
├── productdefine
│   └── common
├── qemu
│   ├── qemu-6.2.0
│   └── qemu-6.2.0.tar.xz
├── qemu-run -> vendor/ohemu/common/qemu-run
├── .repo
│   ├── manifests
│   ├── manifests.git
│   ├── manifest.xml
│   ├── project.list
│   ├── project-objects
│   ├── projects
│   ├── repo
│   └── .repo_fetchtimes.json
├── test
│   ├── ostest
│   ├── testfwk
│   └── xts
├── third_party
│   ├── bounds_checking_function
│   ├── cJSON
│   ├── cmsis
│   ├── curl
│   ├── FatFs
│   ├── ffmpeg
│   ├── FreeBSD
│   ├── freetype
│   ├── glslang
│   ├── gn
│   ├── googletest
│   ├── harfbuzz
│   ├── jerryscript
│   ├── jinja2
│   ├── json
│   ├── libjpeg-turbo
│   ├── libpng
│   ├── libunwind
│   ├── littlefs
│   ├── ltp
│   ├── lwip
│   ├── lzma
│   ├── markupsafe
│   ├── mbedtls
│   ├── mksh
│   ├── mtdev
│   ├── musl
│   ├── nghttp2
│   ├── NuttX
│   ├── openssl
│   ├── optimized-routines
│   ├── popt
│   ├── PyYAML
│   ├── qrcodegen
│   ├── spirv-headers
│   ├── spirv-tools
│   ├── sqlite
│   ├── toybox
│   ├── unity
│   ├── vk-gl-cts
│   ├── wpa_supplicant
│   └── zlib
└── vendor└── ohemu140 directories, 42 files
jim@ubuntu:~/openHarmony$ 
编译工具
  • 编译源码可以使用hb命令(ohos-build),可以使用build.sh脚本,也可以使用build.py脚本,其中编译脚本在build这个git仓库里,hb命令的ohos-build源码也在build/lite目录下,可以通过这个仓库学习编译整套源码的流程。
    • 对应的仓库地址为:https://gitee.com/openharmony/build
    • 使用了Gn、Ninja、Python工具,类似于Linux中的Cmake、Makefile、Kconfig、Kbuild这些
  • Ninja是谷歌用于替代Makefile的开源编译工具,使用并行机制提高速度,源码地址是 https://gitee.com/openharmony/third_party_ninja

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/642040.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电厂水泵远程自动化控制系统解决方案介绍

水泵将原动机的机械能或其他外部能量传送给液体,使液体能量增加,可以用于电力供水系统、城市供水系统、石油化工系统、农业水利系统等等行业,水泵远程自动化监测控制系统,可实时监测电厂水泵的运行状态,实现对水电厂排…

电力调度自动化中智能电网技术的应用

电力调度自动化中智能电网技术的应用 在现代电网的现代化发展和电网重组工作中起着关键作用,由于此项技术开发时间短,目前还没有形成一个相对清晰的概念,但此技术在未来的电网发展工作中的地位已得到了一些国家的认可。由于智能电网具有良好的兼容性以及交互性等优势,一经推出就…

XML OR MYsql 报错:Could not create connection to database server.

mybaits文件少复制了一个部分&#xff0c;或缺少部分&#xff1a; 添加至表头即可解决 代码&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE configuration SYSTEM "http://mybatis.org/dtd/mybatis-3-config.dtd" &g…

SpringMVC中的文件上传和中英文名称文件下载

一、文件上传 前端&#xff1a; <% page language"java" contentType"text/html;charsetUTF-8"pageEncoding"UTF-8"%> <! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4…

【Elasticsearch】Elasticsearch 从入门到精通(一):基本介绍

《Elasticsearch 从入门到精通》共包含以下 2 2 2 篇文章&#xff1a; Elasticsearch 从入门到精通&#xff08;一&#xff09;&#xff1a;基本介绍Elasticsearch 从入门到精通&#xff08;二&#xff09;&#xff1a;基础使用 &#x1f60a; 如果您觉得这篇文章有用 ✔️ 的…

24V转2.8V2A降压芯片WT6030

24V转2.8V2A降压芯片WT6030 WT6030是一种高效同步整流降压开关模式转换器&#xff0c;集成内部功率MOSFET。该器件在宽输入电源范围内提供3A峰值输出电流&#xff0c;展现出卓越的负载和线路调节性能。其设计仅需要最小数量的外部现成组件&#xff0c;并且采用了节省空间的ESO…

【LeetCode热题100】【多维动态规划】最小路径和

题目链接&#xff1a;64. 最小路径和 - 力扣&#xff08;LeetCode&#xff09; 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 经典动态规…

【行为型模型】迭代器模式

一、迭代器模式概述 迭代器模式定义&#xff1a;提供一种方法顺序访问一个聚合对象中的各个元素&#xff0c;而又不暴露其内部的表示。把游走的任务放在送代器上&#xff0c;而不是聚合上。这样简化了聚含的接口和实现,也让责任各得其所。(对象行为型) 迭代器模式的优缺点&…

等保测评之主机测评详解(二级)

等保测评之主机测评详解&#xff08;二级&#xff09;服务器——Windows 身份鉴别: 测评项a&#xff09;&#xff1a; a&#xff09;应对登录的用户进行身份标识和鉴别&#xff0c;身份标识具有唯一性&#xff0c;身份鉴别信息具有复杂度要求并定期更换&#xff1b; 整改方…

HTTP慢连接攻击的原理和防范措施

随着互联网的快速发展&#xff0c;网络安全问题日益凸显&#xff0c;网络攻击事件频繁发生。其中&#xff0c;HTTP慢速攻击作为一种隐蔽且高效的攻击方式&#xff0c;近年来逐渐出现的越来越多。 为了防范这些网络攻击&#xff0c;我们需要先了解这些攻击情况&#xff0c;这样…

Java、Spring、Dubbo三者SPI机制原理与区别

Java、Spring、Dubbo三者SPI机制原理与区别 什么是SPI SPI全称为Service Provider Interface&#xff0c;是一种动态替换发现的机制&#xff0c;一种解耦非常优秀的思想&#xff0c;SPI可以很灵活的让接口和实现分离&#xff0c;让api提供者只提供接口&#xff0c;第三方来实…

用户实践:从 HBase 升级为OceanBase,仟传实现110000 TPS的千亿级KV性能优化

本文作者&#xff1a;仟传网络科技技术专家 刘贵宗 & 肖旺生 一、业务需求及选型背景 仟传网络科技&#xff08;TargetSocial&#xff09;&#xff0c;是国内知名的内容社交平台整合营销服务商&#xff0c;为企业级客户提供高效的KOL&#xff08;关键意见领袖&#xff09;…