看看OpenHarmony编译出的镜像中都有啥

本文介绍了OpenHarmony编译生成的镜像内容,包括其在flash上的分布、根文件系统分析,以及system目录下的结构。镜像结构类似Linux和Android的结合,具有system.img等分区,同时根文件系统包含apex和vendor目录,hap应用与Android的apk有所不同。通过初步分析,揭示了OpenHarmony在某些组件上如bin/toybox、weston的使用,以及 hap 应用的特性。
摘要由CSDN通过智能技术生成

1. 编译生成的镜像

OpenHarmony 编译生成的东西都存放在 out/ohos-arm-release/packages/phone/images/ 目录,看一下里面都有啥

lim@TIM:~/OpenHarmony/code-2.0-canary$ ls -hl out/ohos-arm-release/packages/phone/images/
total 262M
-rwxr-xr-x  2 lim lim 1.3K Jun  2 03:21 Hi3516DV300-emmc.xml
drwxr-xr-x  2 lim lim 4.0K Jun  6 16:59 data
drwxr-xr-x 18 lim lim 4.0K Jun  6 16:59 root
drwxr-xr-x 12 lim lim 4.0K Jun  6 16:59 system
-rw-r--r--  1 lim lim 243M Jun  6 16:59 system.img
-rwxr-xr-x  2 lim lim 235K Jun  2 03:21 u-boot-hi3516dv300_emmc.bin
-rw-r--r--  1 lim lim 4.6M Jun  6 16:20 uImage
drwxr-xr-x  9 lim lim 4.0K Jun  6 16:59 updater
-rw-r--r--  1 lim lim 9.2M Jun  6 16:59 updater.img
-rw-r--r--  1 lim lim 793K Jun  6 16:59 userdata.img
drwxr-xr-x  8 lim lim 4.0K Jun  2 03:22 vendor
-rw-r--r--  1 lim lim 4.1M Jun  6 16:59 vendor.img

2. 镜像在flash上的分布

这里有一个Hi3516DV300-emmc.xml文件,猜测应该是刷机工具用来解析获得镜像文件应该刷到什么地方的。我们看下里面是啥:

cat out/ohos-arm-release/packages/phone/images/Hi3516DV300-emmc.xml
<?xml version="1.0" encoding="GB2312" ?>
<Partition_Info>
<Part Sel="1" PartitionName="fastboot" FlashType="emmc" FileSystem="none" Start="0" Length="1M" SelectFile="Y:\Disk\code\Camera\out\target\product\Hi3559A\u-boot-hi3516dv300_emmc.bin"/>
<Part Sel="1" PartitionName="boot" FlashType="emmc" FileSystem="none" Start="1M" Length="15M" SelectFile="Y:\Disk\code\Camera\out\target\product\Hi3559A\uImage"/>
<Part Sel="1" PartitionName="updater" FlashType="emmc" FileSystem="ext3/4" Start="16M" Length="20M" SelectFile="Y:\Disk\code\Camera\out\target\product\Hi3559A\updater.img"/>
<Part Sel="1" PartitionName="misc" FlashType="emmc" FileSystem="none" Start="36M" Length="1M" SelectFile=""/>
<Part Sel="1" PartitionName="system" FlashType="emmc" FileSystem="ext3/4" Start="37M" Length="3307M" SelectFile="Y:\Disk\code\Camera\out\target\product\Hi3559A\system.img"/>
<Part Sel="1" PartitionName="vendor" FlashType="emmc" FileSystem="ext3/4" Start="3344M" Length="256M" SelectFile="Y:\Disk\code\Camera\out\target\product\Hi3559A\vendor.img"/>
<Part Sel="1" PartitionName="userdata" FlashType="emmc" FileSystem="ext3/4" Start="3600M" Length="1464M" SelectFile="Y:\Disk\code\Camera\out\target\product\Hi3559A\userdata.img"/>
</Partition_Info>

熟悉linux或者Android的人应该明白镜像在flash上是怎么分布的

起始地址 长度 镜像 作用
0 1M u-boot-hi3516dv300_emmc.bin uboot
1M 15M uImage linux 内核
16M 20M updater.img
36M 1M
37M 3307M system.img 文件系统
3344M 256M vendor.img 文件系统
3600M 1464M userdata.img 用户数据

看到这里,熟悉linux的人可能要说了,这不就是标准的linux么,uboot引导linux内核,内核启动后挂载根文件系统;熟悉Android的人可能忍不住了,什么?system.img、vendor.img、userdata.img这部就是Android么?但是我呢,是什么都不会说的,一来本人才疏学浅,二来这本来就是个公说公有理婆说婆有理的事情,比如煮方便面算不算做饭呢?电动自行车算不算自行车呢?争下去没完没了。

3. 分析根文件系统

  1. 首先我们看下 root 根目录:
lim@TIM:~/OpenHarmony/code-2.0-canary/out/ohos-arm-release/packages/phone/images$ ls -hl root/
total 124K
drwxr-xr-x 2 lim lim 4.0K Jun  6 16:59 acct
drwxr-xr-x 2 lim lim 4.0K Jun  6 16:59 apex
lrwxrwxrwx 1 lim lim   11 Jun  2 03:22 bin -> /system/bin
lrwxrwxrwx 1 lim lim   50 Jun  2 03:22 bugreports -> /data/user_de/0/com.android.shell/files/bugreports
drwxr-xr-x 2 lim lim 4.0K Jun  6 16:59 cache
lrwxrwxrwx 1 lim lim   19 Jun  2 03:22 charger -> /system/bin/charger
drwxr-xr-x 2 lim lim 4.0K Jun  6 16:59 config
lrwxrwxrwx 1 lim lim   17 Jun  2 03:22 d -> /sys/kernel/debug
drwxr-xr-x 2 lim lim 4.0K Jun  6 16:59 data
drwxr-xr-x 2 lim lim 4.0K Jun  6 16:59 debug_ramdisk
lrwxrwxrwx 1 lim lim   23 Jun  2 03:22 default.prop -> system/etc/prop.default
drwxr-xr-x 2 lim lim 4.0K Jun  6 16:59 dev
lrwxrwxrwx 1 lim lim   11 Jun  2 03:22 etc -> /system/etc
lrwxrwxrwx 1 lim lim   16 Jun  2 03:22 init -> /system/bin/init
-rw-r--r-- 1 lim lim  987 Jun  2 03:22 init.environ.rc
-rw-r--r-- 1 lim lim  33K Jun  2 03:22 init.rc
-rw-r--r-- 1 lim lim 7.6K Jun  2 03:22 init.usb.configfs.rc
-rw-r--r-- 1 lim lim 5.5K Jun  2 03:22 init.usb.rc
drwxr-xr-x 2 lim lim 4.0K Jun  6 16:59 mnt
drwxr-xr-x 2 lim lim 4.0K Jun  2 03:22 odm
drwxr-xr-x 2 lim lim 4.0K Jun  6 16:59 oem
drwxr-xr-x 2 lim lim 4.0K Jun  6 16:59 proc
lrwxrwxrwx 1 lim lim   15 Jun  2 03:22 product -> /system/product
lrwxrwxrwx 1 lim lim   24 Jun  2 03:22 product_services -> /system/product_services
drwxr-xr-x 2 lim lim 4.0K Jun  6 16:59 sbin
lrwxrwxrwx 1 lim lim   21 Jun  2 03:22 sdcard -> /storage/self/primary
drwxr-xr-x 2 lim lim 4.0K Jun  6 16:59 storage
drwxr-xr-x 2 lim lim 4.0K Jun  6 16:59 sys
drwxr-xr-x 2 lim lim 4.0K Jun  6 16:59 system
-rw-r--r-- 1 lim lim 2.6K Jun  2 03:22 ueventd.rc
drwxr-xr-x 2 lim lim 4.0K Jun  6 16:59 vendor

果然不出意外,和Android一样的软链接,真正的根文件系统是system:

bin -> /system/bin
etc -> /system/etc
init -> /system/bin/init

etc -> /system/etc
sdcard -> /storage/self/primary
  1. 那么我们再看下system下都有什么文件:
lim@TIM:~/OpenHarmony/code-2.0-canary/out/ohos-arm-release/packages/phone/images$ ls -hl system
total 72K
drwxr-xr-x  3 lim lim 4.0K Jun  2 03:22 apex
drwxr-xr-x  2 lim lim 4.0K Jun  6 16:59 app
drwxr-xr-x  3 lim lim  12K Jun  6 16:59 bin
-rw-r--r--  1 lim lim 3.1K Jun  6 16:59 build.prop
-rw-r--r--  1 lim lim   20 Jun  6 16:59 buildz.prop
drwxr-xr-x 11 lim lim 4.0K Jun  6 16:59 etc
drwxr-xr-x  2 lim lim 4.0K Jun  6 16:59 fonts
drwxr-xr-x  4 lim lim  20K Jun  6 16:59 lib
drwxr-xr-x  3 lim lim 4.0K Jun  2 03:22 product
drwxr-xr-x  2 lim lim 4.0K Jun  6 16:59 profile
drwxr-xr-x  3 lim lim 4.0K Jun  6 16:59 usr
lrwxrwxrwx  1 lim lim    7 Jun  2 03:22 vendor -> /vendor
drwxr-xr-x  2 lim lim 4.0K Jun  2 03:22 xbin

熟悉linux的人说,这里除了apex和vendor两个文件夹,其他的标准的linux根文件系统啊,熟悉Android的人又坐不住了,apex和vendor那是我的!!!
好吧,安卓你坐下,谁还不是个类Unix系统,还不是个Linux发行版。

4. 进system目录下看一看

  1. apex 目录
lim@TIM:~/OpenHarmony/code-2.0-canary/out/ohos-arm-release/packages/phone/images/system$ ls -hl apex/com.android.runtime-hos.debug/
total 20K
-rw-r--r-- 1 lim lim  148 Jun  2 03:22 apex_manifest.json
-rw-r--r-- 1 lim lim 1.1K Jun  2 03:22 apex_pubkey
drwxr-xr-x 2 lim lim 4.0K Jun  2 03:22 bin
drwxr-xr-x 2 lim lim 4.0K Jun  2 03:22 etc
drwxr-xr-x 3 lim lim 4.0K Jun  2 03:22 lib

这里放的是安卓运行时,看后缀加了hos,应该是OpenHarmony改了这里,二进制也看不出改了啥,咱们继续看后面的

lim@TIM:~/OpenHarmony/code-2.0-canary/out/ohos-arm-release/packages/phone/images/system$ cat apex/com.android.runtime-hos.debug/apex_manifest.json
{
  "name": "com.android.runtime",
  "version": 1,
  "preInstallHook": "bin/art_preinstall_hook",
  "postInstallHook": "bin/art_postinstall_hook"
}
  1. app 目录
lim@TIM:~/OpenHarmony/code-2.0-canary/out/ohos-arm-release/packages/phone/images/system$ ls -hl app
total 14M
-rwxr-xr-x 1 lim lim 145K Jun  6 16:59 Airquality_Demo.hap
-rwxr-xr-x 1 lim lim  77K Jun  6 16:59 Calc_Demo.hap                ## 电话
-rwxr-xr-x 1 lim lim 153K Jun  6 16:59 Clock_Demo.hap               ## 时钟
-rwxr-xr-x 1 lim lim 191K Jun  6 16:59 Ecg_Demo.hap
-rwxr-xr-x 1 lim lim  99K Jun  6 16:59 Flashlight_Demo.hap
-rwxr-xr-x 1 lim lim 3.1M Jun  6 16:59 Gallery_Demo.hap             ## 相册
-rwxr-xr-x 1 lim lim 1.8M Jun  6 16:59 Launcher.hap                 ## 桌面
-rwxr-xr-x 1 lim lim 295K Jun  6 16:59 Launcher_Recents.hap
-rwxr-xr-x 1 lim lim 350K Jun  6 16:59 Settings.hap                 ## 设置
-rwxr-xr-x 1 lim lim 7.2M Jun  6 16:59 Shopping_Demo.hap            ## 商店
-rwxr-xr-x 1 lim lim  33K Jun  6 16:59 SystemUI-NavigationBar.hap   ## 导航栏
-rwxr-xr-x 1 lim lim  34K Jun  6 16:59 SystemUI-StatusBar.hap       ## 状态栏

这里放的是预置的应用,比较少,Android预置的是apk后缀的,OpenHarmony预置的是hap后缀的
再看下hap后缀的是什么东西:

lim@TIM:~/OpenHarmony/code-2.0-canary/out/ohos-arm-release/packages/phone/images/system$ file app/Launcher.hap 
app/Launcher.hap: Java archive data (JAR)

哦,是java包,file命令直接能识别,看来确实只是改了下后缀, 那么我们打开看下里面都有啥:

lim@TIM:~/OpenHarmony/code-2.0-canary/out/ohos-arm-release/packages/phone/images/system/app$ jar vtf Launcher.hap
 15106 Thu Jan 01 00:00:00 CST 2009 assets/js/default/app.js
  5979 Thu Jan 01 00:00:00 CST 2009 assets/js/default/common/pics/icon_default.png
1694253 Thu Jan 01 00:00:00 CST 2009 assets/js/default/common/pics/img_wallpaper_default.jpg
     0 Thu Jan 01 00:00:00 CST 2009 assets/js/default/compile_success.txt
   477 Thu Jan 01 00:00:00 CST 2009 assets/js/default/i18n/en-US.json
   439 Thu Jan 01 00:00:00 CST 2009 assets/js/default/i18n/zh-CN.json
   339 Thu Jan 01 00:00:00 CST 2009 assets/js/default/manifest.json
 22750 Thu Jan 01 00:00:00 CST 2009 assets/js/default/pages/AppGridView/AppGridView.js
 20653 Thu Jan 01 00:00:00 CST 2009 assets/js/default/pages/AppListView/AppListView.js
  5581 Thu Jan 01 00:00:00 CST 2009 assets/js/default/pages/EntryView/EntryView.js
 11819 Thu Jan 01 00:00:00 CST 2009 assets/js/default/pages/SettingsView/SettingsView.js
   425 Thu Jan 01 00:00:00 CST 2009 assets/launcher/resources.index
     1 Thu Jan 01 00:00:00 CST 2009 assets/launcher/resources/base/media/attributes.key
     1 Thu Jan 01 00:00:00 CST 2009 assets/launcher/resources/base/media/constants.key
     1 Thu Jan 01 00:00:00 CST 2009 assets/launcher/resources/base/media/contents.key
  6320 Thu Jan 01 00:00:00 CST 2009 assets/launcher/resources/base/media/icon.png
  5448 Thu Jan 01 00:00:00 CST 2009 assets/launcher/resources/base/media/icon_small.png
     1 Thu Jan 01 00:00:00 CST 2009 assets/launcher/resources/base/media/nodes.key
  1040 Thu Jan 01 00:00:00 CST 2009 config.json
  1136 Thu Jan 01 00:00:00 CST 2009 pack.info
  1. bin 目录
    大家知道linux下bin一般是busybox,Android下是toybox,那么OpenHarmony是什么呢?对,没错,还是toybox;
lim@TIM:~/OpenHarmony/code-2.0-canary/out/ohos-arm-release/packages/phone/images/system$ ls -hl bin/
total 9.8M
-rwxr-xr-x 1 lim lim 112K Jun  6 16:59 LayerManagerControl
-rwxr-xr-x 1 lim lim  31K Jun  6 16:59 aa
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 acpi -> toybox
-rwxr-xr-x 1 lim lim 310K Jun  2 03:22 apexd
-rwxr-xr-x 1 lim lim 9.5K Jun  6 16:59 appexec
-rwxr-xr-x 1 lim lim 9.4K Jun  6 16:59 appspawn
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 base64 -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 basename -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 bc -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 blockdev -> toybox
-rwxr-xr-x 1 lim lim  48K Jun  6 16:59 bm
-rwxr-xr-x 1 lim lim  46K Jun  6 16:59 bootanimation
-rwxr-xr-x 1 lim lim  92K Jun  2 03:22 bootstat
drwxr-xr-x 2 lim lim 4.0K Jun  2 03:22 bootstrap
lrwxrwxrwx 1 lim lim    5 Jun  2 03:22 bunzip2 -> bzip2
-rwxr-xr-x 1 lim lim 112K Jun  6 16:59 bytrace
lrwxrwxrwx 1 lim lim    5 Jun  2 03:22 bzcat -> bzip2
-rwxr-xr-x 1 lim lim  41K Jun  2 03:22 bzip2
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 cal -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 cat -> toybox
-rwxr-xr-x 1 lim lim  35K Jun  6 16:59 cem
-rwxr-xr-x 1 lim lim 263K Jun  2 03:22 charger
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 chcon -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 chgrp -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 chmod -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 chown -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 chroot -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 chrt -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 cksum -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 clear -> toybox
-rwxr-xr-x 1 lim lim  35K Jun  2 03:22 cmd
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 cmp -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 comm -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 cp -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 cpio -> toybox
-rwxr-xr-x 1 lim lim 105K Jun  2 03:22 crash_dump32
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 cut -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 date -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 dd -> toybox
-rwxr-xr-x 1 lim lim  12K Jun  2 03:22 debuggerd
-rwxr-xr-x 1 lim lim 327K Jun  6 16:59 deviceauth_service
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 devmem -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 df -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 diff -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 dirname -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 dmesg -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 dos2unix -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 du -> toybox
-rwxr-xr-x 1 lim lim  41K Jun  2 03:22 dumpsys
-rwxr-xr-x 1 lim lim 119K Jun  2 03:22 e2fsdroid
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 echo -> toybox
lrwxrwxrwx 1 lim lim    4 Jun  2 03:22 egrep -> grep
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 env -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 expand -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 expr -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 fallocate -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 false -> toybox
-rwxr-xr-x 1 lim lim 9.6K Jun  6 16:59 faultloggerd
lrwxrwxrwx 1 lim lim    4 Jun  2 03:22 fgrep -> grep
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 file -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 find -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 flock -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 fmt -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 free -> toybox
-rwxr-xr-x 1 lim lim 1.1K Jun  2 03:22 fsverity_init
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 fsync -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 getconf -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 getenforce -> toybox
lrwxrwxrwx 1 lim lim    7 Jun  2 03:22 getevent -> toolbox
lrwxrwxrwx 1 lim lim    7 Jun  2 03:22 getprop -> toolbox
-rwxr-xr-x 1 lim lim  28K Jun  2 03:22 grep
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 groups -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 gunzip -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 gzip -> toybox
-rwxr-xr-x 1 lim lim 1.2M Jun  6 16:59 hdcd
-rwxr-xr-x 1 lim lim 9.5K Jun  6 16:59 hdf_devhost
-rwxr-xr-x 1 lim lim  30K Jun  6 16:59 hdf_devmgr
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 head -> toybox
-rwxr-xr-x 1 lim lim  67K Jun  6 16:59 hilog
-rwxr-xr-x 1 lim lim  92K Jun  6 16:59 hilogd
-rwxr-xr-x 1 lim lim 124K Jun  6 16:59 hiview
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 hostname -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 hwclock -> toybox
-rwxr-xr-x 1 lim lim  75K Jun  2 03:22 hwservicemanager
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 i2cdetect -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 i2cdump -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 i2cget -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 i2cset -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 iconv -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 id -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 ifconfig -> toybox
-rwxr-xr-x 1 lim lim 522K Jun  2 03:22 init
lrwxrwxrwx 1 lim lim    6 Jun  2 03:22 inotifyd -> toybox
lrwxrwxrwx 1 lim lim    6 Jun  
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值