代码拉取完成,页面将自动刷新
操作系统:直接通过指令对硬件进行控制
+============================================+ || Operation System (操作系统): Linux, xv6 || +============================================+ | | | Instruction(x86) | v v +============================================+ || Hardware(硬件): 硬盘,鼠标,显示器 || +============================================+
模拟器:直接通过指令对硬件进行控制
+============================================+ || Host OS: Ubuntu || || || || +--------------------------------+ || || | 调试操作系统: xv6-riscv | || || +--------------------------------+ || || | | || || | Instruction(riscv) | || || V v || || +--------------------------------+ || || | Simulator(模拟器): QEMU, Bochs | || || | 作为软件运行在宿主机器 | || || +--------------------------------+ || || | || || | 宿主操作系统指令(x86) || || | || || V || +============================================+ | | | Instruction(x86) | v v +============================================+ || Hardware(硬件): 硬盘,鼠标,显示器 || +============================================+
启动 BIOS
Basic Input/Output System,基本输入输出系统。
供电初始化
按下电源开关后,电源就开始给主板和其他设备供电,CPU 会把所有寄
存器的值都设为默认值,即恢复初始状态。随后 CPU 会执行初始位置的指令,跳转到
BIOS 启动代码位置,开始启动 BIOS。POST 硬件自检
BIOS 首先进行 POST(Power On Self Test,硬件自检),检查计算
机硬件是否满足运行的基本条件,并完成相应的初始化工作。如果发现了问题,主板会
发出不同的蜂鸣声表示不同的问题。搜索可引导的存储设备
BIOS 按照启动顺序开始搜索可引导的存储设备,找到后,会
将存储设备中的引导扇区读入物理内存,并执行引导扇区中的程序,开始系统引导。系统引导
读取 MBR
读取并执行硬盘的第一个扇区,即 MBR(Master Boot Record,主引导记
录,大小为 512 字节)。其作用为告诉计算机到硬盘的哪一个位置去找操作系统。MBR
的结构如下:
查找活动分区
搜索 MBR 中的分区表,找到唯一的活动分区(Active Partition),
并将活动分区的第一个扇区中的引导扇区(称为 卷引导记录,Volume Boot Record,
VBR)读入内存,就能找到操作系统在这个分区中的位置。然后,计算机就会开始加载
操作系统了。启动系统
由于一台计算机中可以安装多个操作系统,所以启动系统时也会有不同的情
况。当有多个操作系统时,会运行启动管理器(Boot Loader),让用户选择启动操作系
统; 当只有一个操作系统时,就会直接从激活分区中启动操作系统(当然也可以选择将
控制权交 给启动管理器,boot loader 可以存在 MBR 中,也可以存在主分区的引导扇
区中)。初始化系统
操作系统启动后,控制权就从 boot loader 转交给了操作系统,之后,
操作系统的内核首先被载入缓存,随后会运行初始化进程进行操作系统的初始化。至此,整个计算机的启动过程就完成了。
存储设备
man qemu
启动 linux 0.11 系统
qemu-system-i386 -boot a -fda Image -hda hdc-0.11.img
启动 xv6, 控制系统硬件参数
ctrl-a x
退出 qemuctrl-a c
切换串口ctrl-a h
帮助
qemu-system-i386 -smp 2 -m 512 -nographic -hda xv6.img -hdb fs.img
另外存储驱动也可以使用下面方法指定
qemu-system-i386 -smp 2 -m 512 -nographic \
-drive file=fs.img,index=1,media=disk,format=raw \
-drive file=xv6.img,index=0,media=disk,format=raw
initrd 全称是 initial RAM disk ,它提供一种让核心可以简单使用 Ramdisk 的能力
MINIX 3 的 initrd 启动
cd /data/os/minix/obj.i386/work
qemu-system-i386 \
--enable-kvm \
-m 1G \
-kernel kernel \
-append "bootramdisk=1" \
-initrd "mod01_ds,mod02_rs,mod03_pm,mod04_sched,mod05_vfs,mod06_memory,mod07_tty,mod08_mib,mod09_vm,mod10_pfs,mod11_mfs,mod12_init"
Linux 内核启动方式
cd /data/os/x86_64/buildroot-2023.02.5/output/images
qemu-system-x86_64 \
-M pc \
-nographic \
-kernel bzImage \
-drive file=rootfs.ext2,if=virtio,format=raw \
-append "rootwait root=/dev/vda console=tty1 console=ttyS0" \
-net nic,model=virtio -net user
qemu 通过 gdb server 来支持 gdb 调试,启动时需要添加下面选项来开启调试
(gdb) target remote :1234
-gdb tcp::1234
的简写,也可以制定其他端口以 xv6-public 为例,通过 make qemu-nox-gdb 可以开启调试
sed "s/localhost:1234/localhost:26000/" < .gdbinit.tmpl > .gdbinit
qemu-system-i386 \
-nographic -drive file=fs.img,index=1,media=disk,format=raw \
-drive file=xv6.img,index=0,media=disk,format=raw -smp 2 -m 512 \
-S -gdb tcp::26000
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。