1 Star 0 Fork 1

stesen / ohos

forked from wawanala / ohos 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
ohos-master-2021-11-26.md 7.50 KB
一键复制 编辑 原始数据 按行查看 历史
yx7200 提交于 2021-12-03 01:30 . update ohos-master-2021-11-26.md.

ohos-master-2021-11-26

测试目的:本文仅供爱好者学习研究测试ohos-mater中init启动过程,真正开发请选择合适的开发板。
基本流程:编译生成img文件->提取修改ramdisk->制作boot.img->制作qemu-ohos.img->引导验证->PASS

一、生成3516dv镜像文件

1、手工编译

cd /soft/ohos 
./build.sh --product-name Hi3516DV300  \
--build-target images  --build-target hdf_test \
--ccache --target-os ohos --target-cpu arm \
--gn-args is_standard_system=true 

2、每日构建下载(这个更快不需要编译)

http://ci.openharmony.cn/dailybuilds

二、制作ramdisk文件

1、编译前修改
将soc/f9830000.himciv200修改为a00XXXX.virtio_mmio,
XXXX为qemu注册的虚拟磁盘地址,与qemu启动参数注册有关,不是恒定的。
编译前涉及修改的文件在以下几个目录
device/hisilicon/hi3516dv300/build/vendor/
base/startup/init_lite/services/
2、编译后修改
在packages/ramdisk/etc/fstab.required

# fstab file.
#<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags>
/dev/block/platform/a003c00.virtio_mmio/by-name/system   /usr     ext4     ro,barrier=1  wait,required
/dev/block/platform/a003c00.virtio_mmio/by-name/vendor   /vendor  ext4     ro,barrier=1  wait,required
/dev/block/platform/a003c00.virtio_mmio/by-name/userdata /data    ext4     nosuid,nodev,noatime,barrier=1,data=ordered,noauto_da_alloc wait,required
/dev/block/platform/a003c00.virtio_mmio/by-name/misc	 /misc    none     none wait

3、生成ramdisk.img

find . | cpio -c -o -v |gzip  >../ramdisk-qemu.img

三、制作ohos-qemu.img

拟定7个分区
4M(fastboot),60M(boot),20M(updater),2M(misc),3307M(system),256M(vendor),1464M(userdata)
1、分区

dd if=/dev/zero of=ohos-qemu.img bs=1M count=8096
sgdisk -n 0:0:+4M -c 0:fastboot ohos-qemu.img
sgdisk -n 0:0:+60M -c 0:boot ohos-qemu.img
sgdisk -n 0:0:+20M -c 0:updater ohos-qemu.img
sgdisk -n 0:0:+2M -c 0:misc ohos-qemu.img
sgdisk -n 0:0:+3307M -c 0:system ohos-qemu.img
sgdisk -n 0:0:+256M -c 0:vendor ohos-qemu.img
sgdisk -n 0:0:0 -c 0:userdata ohos-qemu.img

2、查看

sgdisk -p ohos-qemu.img

3、删除

#sgdisk -d n ohos-qemu.img

4、加载格式化

sudo losetup /dev/loop10 ohos-qemu.img
sudo partprobe /dev/loop10
sudo mkfs.ext4 /dev/loop10p1
sudo mkfs.ext4 /dev/loop10p2
sudo mkfs.ext4 /dev/loop10p3
sudo mkfs.ext4 /dev/loop10p4
sudo mkfs.ext4 /dev/loop10p5
sudo mkfs.ext4 /dev/loop10p6
sudo mkfs.ext4 /dev/loop10p7

5、复制文件\

#新建两个目录
sudo mkdir temp1 temp2
#挂载复制内容
sudo mount -t ext4 /dev/loop10p3 temp1
sudo mount -t ext4 ./updater.img temp2
sudo cp -ra temp2/* temp1/
sudo umount temp1 temp2
//其他分区类同....
//也可以这样
//sudo dd if=./system.img of=/dev/loop10p5

6、卸载分区

sudo losetup -d /dev/loop10

四、qemu测试

sudo qemu-system-arm -M virt -m 512M -nographic \
-kernel zImage  \
-netdev bridge,id=net0,br=virbr0 -device virtio-net-device,netdev=net0,mac=12:22:33:44:55:66 \
-drive if=none,file=./ohos-qemu.img,format=raw,id=ohos,index=0 -device virtio-blk-device,drive=ohos \
-initrd ramdisk-qemu.img \
-append 'console=ttyAMA0,115200 clk_ignore_unused androidboot.selinux=permissive hardware=Hi3516DV300 default_boot_device=a003c00.virtio_mmio init=init root=/dev/ram0 rw ip=dhcp'

五、启动日志

[    3.061995] [pid=1][INIT][INFO] [init_mount.c:25)] Mount required partitions
[    3.599355] EXT4-fs (vda5): mounted filesystem with ordered data mode. Opts: barrier=1
[fstab_mount.c:211][fs_manager] Mount /dev/block/platform/a003c00.virtio_mmio/by-name/system to /usr successful
[    4.162655] EXT4-fs (vda7): mounted filesystem with ordered data mode. Opts: barrier=1,data=ordered,noauto_da_alloc
[fstab_mount.c:211][fs_manager] Mount /dev/block/platform/a003c00.virtio_mmio/by-name/userdata to /data successful
[    4.669397] EXT4-fs (vda6): mounted filesystem with ordered data mode. Opts: barrier=1
[fstab_mount.c:211][fs_manager] Mount /dev/block/platform/a003c00.virtio_mmio/by-name/vendor to /vendor successful

六、其他方式加载

1、模拟uboot(这种方式几乎OHOS启动一样)
ohos-master-standard
2、单独镜像加载(OHOS主线代码应该会调整,后期估计会很麻烦)
vda1 ...vde1

dd if=/dev/zero of=test-updater.img bs=1M count=128
sgdisk -n 0:0:0 -c 0:updater test-updater.img
sudo losetup  /dev/loop0 test-updater.img
sudo partprobe /dev/loop0
sudo mkfs.ext4 /dev/loop0p1
sudo dd if=./updater.img of=/dev/loop0p1
sudo losetup -d /dev/loop0


dd if=/dev/zero of=test-system.img bs=1M count=2048
sgdisk -n 0:0:0 -c 0:system test-system.img
sudo losetup  /dev/loop0 test-system.img
sudo partprobe /dev/loop0
sudo mkfs.ext4 /dev/loop0p1
sudo dd if=./system.img of=/dev/loop0p1
sudo losetup -d /dev/loop0

dd if=/dev/zero of=test-vendor.img bs=1M count=512
sgdisk -n 0:0:0 -c 0:vendor test-vendor.img
sudo losetup  /dev/loop0 test-vendor.img
sudo partprobe /dev/loop0
sudo mkfs.ext4 /dev/loop0p1
sudo dd if=./vendor.img of=/dev/loop0p1
sudo losetup -d /dev/loop0

dd if=/dev/zero of=test-userdata.img bs=1M count=2048
sgdisk -n 0:0:0 -c 0:userdata test-userdata.img
sudo losetup  /dev/loop0 test-userdata.img
sudo partprobe /dev/loop0
sudo mkfs.ext4 /dev/loop0p1
sudo dd if=./userdata.img of=/dev/loop0p1
sudo losetup -d /dev/loop0

dd if=/dev/zero of=test-misc.img bs=1M count=8
sgdisk -n 0:0:0 -c 0:misc test-misc.img
sudo losetup  /dev/loop0 test-misc.img
sudo partprobe /dev/loop0
sudo mkfs.ext4 /dev/loop0p1
sudo losetup -d /dev/loop0

分区解析加载

# fstab file.
#<src>                                                      <mnt_point> <type>    <mnt_flags and options>   <fs_mgr_flags>
/dev/block/platform/a003800.virtio_mmio/by-name/system      /usr        ext4      ro,barrier=1              wait,required
/dev/block/platform/a003a00.virtio_mmio/by-name/vendor      /vendor     ext4      ro,barrier=1              wait,required
/dev/block/platform/a003c00.virtio_mmio/by-name/userdata    /data       ext4      ro,barrier=1              wait,required wait
/dev/block/platform/a003e00.virtio_mmio/by-name/misc        /misc       ext4      ro,barrier=1              wait,required

启动

sudo qemu-system-arm -M virt -cpu cortex-a7 -smp 4 -m 2048 -nographic -drive if=none,file=test-misc.img,id=misc,format=raw -device virtio-blk-device,drive=misc -drive if=none,file=test-userdata.img,format=raw,id=userdata -device virtio-blk-device,drive=userdata  -drive if=none,file=test-vendor.img,format=raw,id=vendor -device virtio-blk-device,drive=vendor  -drive if=none,file=test-system.img,format=raw,id=system -device virtio-blk-device,drive=system  -drive if=none,file=test-updater.img,id=updater,format=raw -device virtio-blk-device,drive=updater -kernel zImage  -append "console=ttyAMA0,115200 init=init root=/dev/ram0 ip=dhcp clk_ignore_unused androidboot.selinux=permissive hardware=Hi3516DV300"  -netdev bridge,id=net0,br=virbr0 -device virtio-net-device,netdev=net0,mac=12:22:33:44:55:66 -initrd ramdisk-qemu.img
1
https://gitee.com/stesen/ohos.git
git@gitee.com:stesen/ohos.git
stesen
ohos
ohos
master

搜索帮助