XV6源码解读:安装与编译

本文详细介绍了XV6操作系统的安装和编译过程,包括从获取源码开始,通过Makefile配置编译内核和用户程序,链接器脚本的作用,以及如何生成文件系统镜像。最后,文章阐述了XV6在QEMU虚拟机中的启动方式,为理解XV6的运行机制打下基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章目录

第一章:XV6源码解读:安装与编译



一、Xv6介绍

Xv6是MIT6.S081教学用的操作系统。

Xv6源码下载:

git clone git://github.com/mit-pdos/xv6-riscv.git

Xv6参考书下载:

git clone git://github.com/mit-pdos/xv6-riscv-book.git

二、编译

1. 从make qemu开始

编译系统时,在命令行键入命令make qemu
关于qemu的Makefile片段:

K=kernel
qemu: $K/kernel fs.img
	$(QEMU) $(QEMUOPTS)

由此可知,qemu这个目标依赖于K/kernelfs.img。其中K/kernel负责生成内核的可执行文件,运行Xv6就是运行这个可执行文件;fs.img负责生成文件系统的镜像,用于模拟一块保护所有用户程序的硬盘。

2. 编译kernel生成可执行文件

关于kernel的Makefile片段:

U=user

OBJS = \
  $K/entry.o \
  $K/start.o \
  $K/console.o \
  $K/printf.o \
  $K/uart.o \
  $K/kalloc.o \
  $K/spinlock.o \
  $K/string.o \
  $K/main.o \
  $K/vm.o \
  $K/proc.o \
  $K/swtch.o \
  $K/trampoline.o \
  $K/trap.o \
  $K/syscall.o \
  $K/sysproc.o \
  $K/bio.o \
  $K/fs.o \
  $K/log.o \
  $K/sleeplock.o \
  $K/file.o \
  $K/pipe.o \
  $K/exec.o \
  $K/sysfile.o \
  $K/kernelvec.o \
  $K/plic.o \
  $K/virtio_disk.o
  
$K/kernel: $(OBJS) $K/kernel.ld $U/initcode
	$(LD) $(LDFLAGS) -T $K/kernel.ld -o $K/kernel $(OBJS) 
	$(OBJDUMP) -S $K/kernel > $K/kernel.asm
	$(OBJDUMP) -t $K/kernel | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > $K/kernel.sym

内核的所有源代码及其编译后生成的二进制文件保存在./kernel/目录中,OBJS变量是编译出内核可执行文件所需要的的所有.o文件的文件名的合集,内核可执行文件由.o文件链接而成。
kernel目标生成除了依赖OBJS变量包含的文件之外,还依赖两个目标:./kernel/kernel.ld./user/initcode

2.1 链接器脚本:kernel.ld

./kernel/kernel.ld是链接器脚本,链接器ld将按照脚本内的指令链接多个.o文件以生成可执行文件,主要描述了处理链接文件的方式以及生成kernel可执行文件的内容布局。

OUTPUT_ARCH( "riscv" )
ENTRY( _entry )

SECTIONS
{
   
   
  /*
   * ensure that entry.S / _entry is at 0x80000000,
   * where qemu's -kernel jumps.
   */
  . = 0x80000000;

  .text : {
   
   
    *
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值