一、前景提要
-
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的命令
- Qemu安装-QEMU Quick Emulator QEMU在Ubuntu下的安装流程;是下载源码后再编译,编译速度很慢,可以make只编译ARM部分的,这样编译速度会快很多
- 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
- 基本概念
- 构建第一个ArkTS应用
- ……
开发基础知识:https://qr21.cn/FV7h05
- 应用基础知识
- 配置文件
- 应用数据管理
- 应用安全管理
- 应用隐私保护
- 三方应用调用管控机制
- 资源分类与访问
- 学习ArkTS语言
- ……
基于ArkTS 开发:https://qr21.cn/FV7h05
- Ability开发
- UI开发
- 公共事件与通知
- 窗口管理
- 媒体
- 安全
- 网络与链接
- 电话服务
- 数据管理
- 后台任务(Background Task)管理
- 设备管理
- 设备使用信息统计
- DFX
- 国际化开发
- 折叠屏系列
- ……
鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH
鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH
1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向