代码拉取完成,页面将自动刷新
大致流程:
qemu加载两个flash固件=>引导efi-groub分区=>挂载ohos分区=>加载驱动=>正常启动
注:这只是一个实验,实际目前无需grub。\
(一)test.img(efi分区镜像)
/boot/grub.efi zImage ramdisk.img
/boot/grub/grub.cfg
#/boot/grub/fonts
#/boot/grub/image
#/boot/grub/locale
#这个比较合理/boot/efi/EFI/openharmony/
(二)qemu 固件
flash0.img flash1.img
elf_file=/home/wawa/master/out/qemu-arm-linux/packages/phone/images
sudo qemu-system-arm -M virt -smp 4 -m 1024M \
-drive if=pflash,file=./flash0.img,format=raw,readonly=on \
-drive if=pflash,file=./flash1.img,format=raw \
-drive if=none,file=./test.img,format=raw,id=grub,index=4 -device virtio-blk-device,drive=grub \
-drive if=none,file=$elf_file/userdata.img,format=raw,id=userdata,index=3 -device virtio-blk-device,drive=userdata \
-drive if=none,file=$elf_file/vendor.img,format=raw,id=vendor,index=2 -device virtio-blk-device,drive=vendor \
-drive if=none,file=$elf_file/system.img,format=raw,id=system,index=1 -device virtio-blk-device,drive=system \
-drive if=none,file=$elf_file/updater.img,format=raw,id=updater,index=0 -device virtio-blk-device,drive=updater \
-nographic -display gtk,gl=on -device virtio-gpu-pci \
-vnc :20 \
-device qemu-xhci,id=xhci -device usb-kbd -device usb-mouse \
-device usb-tablet -k en-us -device virtio-mouse-device
efi引导使用,格式fat32 msdos,也可以用gpt
(一)手动fdisk(msdos)
sudo apt install kpartx
touch test.img
dd if=/dev/zero of=./test.img bs=1M count=100
fdisk test.img
n p t ef w
sudo losetup /dev/loop6 test.img
sudo kpartx -av /dev/loop6
sudo mkfs.vfat /dev/mapper/loop6p1
sudo mount /dev/mapper/loop6p1 /mnt/temp
sudo cp -r ~/boot /mnt/temp
sudo umount /dev/mapper/loop6p1
sudo dmsetup remove /dev/mapper/loop6p1
sudo losetup -d /dev/loop6
(二)parted脚本化(msdos,也可gpt)
dd if=/dev/zero of=test.img bs=1M count=100
sudo losetup /dev/loop6 test.img
sudo partprobe /dev/loop6
sudo parted /dev/loop6 --script -- mklabel msdos
#gpt分区
#sudo parted /dev/loop6 --script -- mklabel gpt
sudo parted /dev/loop6 --script -- mkpart primary fat32 1MiB 100%
sudo parted /dev/loop6 --script set 1 esp
sudo mkfs.vfat -F32 /dev/loop6p1
sudo mount /dev/loop6p1 /mnt/temp
sudo cp -r /soft/wawa/boot /mnt/temp
sudo umount /mnt/temp
sudo losetup -d /dev/loop6
#mbr 磁盘号可修改
#sudo printf "\x78\x56\x34\x12" | dd of=test.img seek=440 bs=1 count=4 conv=notrunc
(三)sgdisk脚本化(gpt)
dd if=/dev/zero of=test2.img bs=1M count=100
sgdisk -n 0:0:0 -t=0:ef00 -c 0:efi_boot test2.img
sudo losetup /dev/loop6 test2.img
sudo partprobe /dev/loop6
sudo mkfs.vfat -F 32 /dev/loop6p1
sudo mount /dev/loop6p1 /mnt/temp
sudo cp -r /soft/wawa/boot /mnt/temp
sudo umount /mnt/temp
sudo sgdisk /dev/loop6 --partition-guid=1:b5b7d023-3138-4331-bd4a-0e0168a74430
sudo losetup -d /dev/loop6
##--partition-guid=partnum:guid
##--disk-guid=guid
参考文档\
https://blog.fpmurphy.com/2010/11/boot-fedora-14-using-uefi-and-grub2.html
#/boot/grub/grub.cfg
timeout=30
default=0
set color_normal=white/black
set color_highlight=black/white
#set locale_dir=/boot/efi/EFI/openharmony/locale
#set gfxmode=1024x768,auto
#set gfxpayload=keep
#loadfont /boot/efi/EFI/openharmony/fonts/unicode.pf2
#set gfxterm_font=/boot/efi/EFI/openharmony/unicode.pf2
#insmod gfxterm
#terminal_output gfxterm
# 中文字体
menuentry 'Qemu-Arm-Linux-Min' {
insmod gzio
insmod part_gpt
insmod fat
set root='hd5,msdos1'
#set root='hd5,gpt1'
linux /boot/zImage-dtb console=ttyAMA0,115200 init=/bin/init hardware=qemu.arm.linux default_boot_device=a003e00.virtio_mmio root=/dev/ram0
initrd /boot/ramdisk.img
}
文档\
https://www.gnu.org/software/grub/manual/grub/grub.html
下载
wget https://ftp.gnu.org/gnu/grub/grub-2.06.tar.xz
git clone https://github.com/rhboot/grub2
组件安装
sudo apt install libzfslinux-dev unifont liblzma-dev
sudo apt install ttf-dejavu-core ttf-dejavu-extra
sudo apt install libsdl-gfx1.2-dev
sudo apt install libfuse-dev
配置
export PATH=/home/wawa/master/prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin:$PATH
./configure --with-platform=efi --target=arm-linux-gnueabi --enable-mm-debug --enable-boot-time --enable-grub-themes --enable-device-mapper --enable-grub-mkfont --enable-grub-mount
编译grub
make CROSS_COMPILE=arm-linux-gnueabi- clean
make CROSS_COMPILE=arm-linux-gnueabi- -j32
制作grub.efi
vi user.cfg
search.file /boot/efi/EFI/openharmony/grub.cfg root
set prefix=($root)/boot/efi/EFI/openharmony
configfile ($root)/boot/efi/EFI/openharmony/grub.cfg
sudo ./grub-mkimage -O arm-efi -d ./grub-core -o ~/boot/grub.efi -p /boot/grub \
part_gpt part_msdos ntfs ntfscomp hfsplus fat ext2 normal chain boot configfile linux gfxterm videoinfo efi_gop all_video video video_fb loadenv help reboot raid6rec raid5rec mdraid1x mdraid09 lvm diskfilter zfsinfo zfscrypt gcry_rijndael gcry_sha1 zfs true test sleep search search_fs_uuid search_fs_file search_label png password_pbkdf2 gcry_sha512 pbkdf2 part_apple minicmd memdisk lsacpi lssal lsefisystab lsefimmap lsefi disk keystatus jpeg iso9660 halt gfxterm_background gfxmenu trig bitmap_scale video_colors bitmap font fshelp efifwsetup echo terminal gettext efinet net priority_queue datetime bufio cat btrfs gzio lzopio crypto acpi extcmd mmap
最终生成~/boot/ohos.efi文件
#后面一大堆全是加载模块
#-O 架构 arm-efi
#-o 生成文件 grub.efi
#-p cfg配置文件路径。
#-d 模块目录
#-c user.cfg预配置文件
#编译有问题--with-platform=emu --enable-grub-emu-sdl --enable-grub-emu-pci暂时去掉
QEMU-ARM-LINUX-MIN
初次未配置默认从网络等引导,过几分钟会自动进入 shell
(一)命令行配置
bcfg boot add 0 fs0:\boot\grub.efi "QEMU-ARM-LINUX-MIN-mbr"
#bcfg boot add 0 fs0:\boot\efi\EFI\grub.efi "QEMU-ARM-LINUX-MIN-gpt"
(二)图形配置
#boot main ->boot options->add boot->chang boot
#boot main ->boot file
(三)命令行参考
#exit
#启动菜单的修改
#shell #exit #help #f0: #ls
#add driver chage boot
#boot file
#bcfg boot add 0 fs0:\boot\grub.efi
#exit 命令行到图形
#删除启动项 bcfg boot rm 6
#移动 bcfg boot mv 3 7
#drivers #devices #devtree #smbiosview
(一)网上下载\
https://wiki.osdev.org/EDK2
http://snapshots.linaro.org/components/kernel/leg-virt-tianocore-edk2-upstream/4431/QEMU-ARM/DEBUG_GCC5/
(二)从qemu安装程序复制[推荐使用速度快]
#qemu /usr/local/share/qemu
#edk2-arm-code.fd
#edk2-arm-vars.fd
dd if=/dev/zero of=flash0.img bs=1M count=64
dd if=/dev/zero of=flash1.img bs=1M count=64
dd if=edk2-arm-code.fd bs=1M of=flash0.img conv=notrunc
dd if=edk2-arm-vars.fd bs=1M of=flash1.img conv=notrunc
(三)手工编译[后期可以定制] 下载\
git clone https://github.com/tianocore/edk2
更新
cd edk2
git submodule update --init
组件安装
sudo apt install bison build-essential flex uuid-dev
sudo apt install acpica-tools
配置环境
export GCC5_ARM_PREFIX=/home/wawa/master/prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin/arm-linux-gnueabi-
source ./edksetup.sh
准备
make -C ./BaseTools
关闭网络
edk2/ArmVirtPkg/ArmVirtQemu.dsc
DEFINE NETWORK_ALLOW_HTTP_CONNECTIONS = FALSE
DEFINE NETWORK_ISCSI_ENABLE = FALSE
注释
#!include NetworkPkg/NetworkDefines.dsc.inc
qemu引导保存文件调用QemuFwCfgLib
#QemuBootOrderLib.c
构建
build -a ARM -t GCC5 -p ArmVirtPkg/ArmVirtQemu.dsc
输出文件
#edk2/Build/ArmVirtQemu-ARM/DEBUG_GCC5/FV/QEMU_VARS.fd
#edk2/Build/ArmVirtQemu-ARM/DEBUG_GCC5/FV/QEMU_EFI.fd
制作两个flash固件
dd if=/dev/zero of=flash0.img bs=1M count=64
dd if=/dev/zero of=flash1.img bs=1M count=64
dd if=QEMU_EFI.fd bs=1M of=flash0.img conv=notrunc
dd if=QEMU_VARS.fd bs=1M of=flash1.img conv=notrunc
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。