【xv6-labs】02 Lab: system calls

GDB

如何启动gdb

  • 启动 make CPUs=1 qemu-gdb
  • 在另一个终端启动 gdb-multiarch kernel/kernel
  • 进入gdb后输入 target remote localhost:26000

GDB 的一些命令

  • shell clear # 清屏
  • layout src # 显示源码
  • layout regs # 显示寄存器
  • layout split # 同时显示源码和寄存器
  • backtrace # 显示函数调用栈

在XV6 如何添加系统调用

  1. user/user.h 中添加系统调用函数的定义. 比如:
struct stat;

// system calls
int fork(void);
int exit(int) __attribute__((noreturn));
int wait(int*);
int pipe(int*);
int write(int, const void*, int);
int read(int, void*, int);
int close(int);
  1. user/usys.pl 中添加入口, 这个文件会在 make 后生成 user/usys.S 文件, 在该汇编文件中,每个函数就只有三行,将系统调用号通过 li(load imm) 存入 a7 寄存器,之后使用 ecall 进入内核态,最后返回。
sub entry {
   
    my $name = shift;
    print ".global $name\n";
    print "${name}:\n";
    print " li a7, SYS_${name}\n";
    print " ecall\n";
    print " ret\n";
}
	
entry("fork");
entry("exit");
  1. kernel/syscall.h中定义系统调用号
#define SYS_mkdir  20
#define SYS_close  21
#define SYS_trace  22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值