同步操作将从 wawanala/ohos 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
测试目的:本文仅供爱好者学习研究测试ohos-mater中init启动过程,真正开发请选择合适的开发板。
基本流程:编译生成img文件->提取修改ramdisk->制作boot.img->制作qemu-ohos.img->引导验证->PASS
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
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
拟定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
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
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。