一、前景提要
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 vendor 159,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 ~/bin sudo apt install curl curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 -o ~/bin/repo chmod a+x ~/bin/repo sudo apt install python3-pip 如果用了Ubuntu老版本系统,如Ubuntu18.04,则还要继续执行下面步骤: sudo apt-get install python3 echo alias python=python3 >> ~/.bashrc source ~/.bashrc python3 --version whereis python3 sudo ln -s /usr/bin/python3 /usr/bin/python pip3 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:mini repo sync -c 开始下载,等待时间会比较久 需要设置电脑不待机,如果中途卡住,可以Ctrl + C退出当前命令,并再次repo sync -c继续下载 如果继续下载有冲突,则手动删除有冲突的文件夹后继续使用repo sync -c 你在哪个文件夹路径使用repo init,就会在这个路径形成一个.repo隐藏文件夹,已经下载完的文件夹会在当前目录中出现 sudo apt-get install git-lfs repo 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 vendor 159,898 items, totalling 11.6 GB 当前下载的是单一芯片单一系统类型的代码,总量11G,如果是全量代码,OpenHarmony4.0会有30G。
- repo仓库是由多个git仓库拼起来的,源码根目录下是.repo隐藏文件夹,里面的某些子文件夹下如果有.git隐藏文件夹,那么它就是一个独立的git仓库
3、编译系统,生成OHOS_Image可执行文件
编译OpenHarmony源码前先下载源码
确定你要编译哪一块开发板,我这里使用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支持hb和build.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以上的版本
- 安装流程介绍:
- 如果你是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 --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_an386 Enter 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: 00000000 D:\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 └── vendor 18 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 └── ohemu 140 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.鸿蒙南向开发方向