qemu的编译
- https://wiki.qemu.org/Hosts/Linux
- 官方文档给出了详细的编译指令,不用自己去一个一个排错安装了
- 源码可以使用tar或者直接githttps://github.com/qemu/qemu.git
- git branch -a 查看所有分支
1 | git clone https://gitlab.com/qemu-project/qemu.git |
5 . —prefix =指定编译后目录 —enalbe-sdl 开启图形化显示 —enable-debug 开启调试
- —accel kvm 硬件加速
测试qemu
aarch64-linux-gnu-g++ main.cpp -static
seabios在rom目录下
1 | ADD_PATH="$(pwd)" |
export PATH=/home/jiqiu/cource/qemu/build/install/bin:$PATH
qemu-x86_64 -M help 指定机型
strace -e openat qemu-system-x86_64 查看都打开了哪些文件
qemu启动系统的两种方式
- seabios 也就是lengecy
- utfi 使用ovmf启动
- ovmf可以使用apt安装
- dpkg-query -L ovmf 查看ovmf安装过的文件
- qemu-system-x86_64 -bios /usr/share/ovmf/OVMF.fd 使用bios启动
编译Linux内核并启动
- https://kernel.org/ 下载Linux内核源码
- 解压
- make defconfig 默认配置源码
- 安装依赖
- make bzImage -j8
1 | sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison binutils-dev libcap-dev libreadline-dev pahole -y |
使用-kernel参数指定内核
https://www.qemu.org/docs/master/system/linuxboot.html 具体参数参考qemu文档
x86-bare-mental 可以理解为一些qemu的demo例子
要启动的文件必须是bootable的 bios 0x10
nasm -f bin hello.s可以编译出类似于硬盘的文件 是mbr分区格式
使用busybox制作一份rootfs源码
1 | make menuconfig 开启biuld options 第一项 |
创建init文件
1 | #!/bin/busybox sh |
find . -print0 | cpio –null -ov –format=newc |gzip -9> ../initramfs.cpio.gz
qemu-system-x86_64 -kernel arch/x86/boot/bzImage -initrd ~/cource/busybox-1.36.1/initramfs.cpio.gz
调试qemu
输入gdb —args 接原来的指令即可调试
虚拟化的硬盘启动
mbr启动
1 | dd if=/dev/zero of=mbr.img bs=512 count=1000000 |
img文件要通过loop命令进行挂载
1 | sudo losetup -f --show mbr.img 挂载 |
010editor 模板 driver.bt
fdisk -l mbr.img 查看分区格式
sudo partx -a /dev/loop17 刷新设备
mkfs.ext4 /dev/loop17p1
sudo mount /dev/loop17p1 root
sudo mount /dev/loop17p2 home
sudo apt install grub2-common
安装grub
sudo grub-install –boot-directory=root/boot –target=i386-pc /dev/loop17
创建grub.cfg
1 | set timeout=10 |
grub.cfg要放在grub里面
在init中可以使用
mdev -s 自动挂载设备
uefi+ gpt启动
mbr启动 参考前两步,创建磁盘,分区
sudo grub-install –target=x86_64-efi –efi-directory=esp –boot-directory=root/boot –bootloader-id=ubuntu 安装grub
qemu-system-x86_64 -bios /usr/share/ovmf/OVMF.fd -net none
使用uefi启动
推荐了buildroot工具