Lab1.初探xv6
框架代码初探
xv6-riscv
├── kernel
│ ├── bio.c # 文件系统的磁盘块缓存
│ ├── buf.h
│ ├── console.c # 连接到用户的键盘和屏幕
│ ├── defs.h
│ ├── elf.h
│ ├── entry.S # 首次启动指令
│ ├── exec.c # exec()系统调用
│ ├── fcntl.h
│ ├── file.c # 文件描述符支持
│ ├── file.h
│ ├── fs.c # 文件系统
│ ├── fs.h
│ ├── kalloc.c # 物理页面分配器
│ ├── kernel.ld
│ ├── kernelvec.S # 处理来自内核的陷入指令以及计时器中断
│ ├── log.c # 文件系统日志记录以及崩溃修复
│ ├── main.c # 在启动过程中控制其他模块初始化
│ ├── memlayout.h
│ ├── param.h
│ ├── pipe.c # 管道
│ ├── plic.c # RISC-V中断控制器
│ ├── printf.c # 格式化输出到控制台
│ ├── proc.c # 进程和调度
│ ├── proc.h
│ ├── ramdisk.c
│ ├── riscv.h
│ ├── sleeplock.c # 会让出CPU的锁
│ ├── sleeplock.h
│ ├── spinlock.c # 不让出CPU的锁
│ ├── spinlock.h
│ ├── start.c # machine mode启动代码
│ ├── stat.h
│ ├── string.c # 字符串和字节数组库
│ ├── swtch.S # 线程切换
│ ├── syscall.c # 系统调用相关
│ ├── syscall.h
│ ├── sysfile.c # 文件相关的系统调用
│ ├── sysproc.c # 进程相关的系统调用
│ ├── trampoline.S # 用于在用户和内核之间切换的汇编代码
│ ├── trap.c # 对陷入指令和中断进行处理并返回
│ ├── types.h
│ ├── uart.c # 串口控制台设备驱动程序
│ ├── virtio.h
│ ├── virtio_disk.c # 磁盘设备驱动程序
│ └── vm.c # 管理页表和地址空间
├── mkfs
│ └── mkfs.c
└── user
├── cat.c
├── echo.c
├── forktest.c
├── grep.c
├── grind.c
├── init.c
├── initcode.S
├── kill.c
├── ln.c
├── ls.c
├── mkdir.c
├── printf.c
├── rm.c
├── sh.c
├── stressfs.c
├── ulib.c
├── umalloc.c
├── user.h
├── user.ld
├── usertests.c
├── usys.pl
├── wc.c
└── zombie.cxv6的启动过程
观察make的执行命令
🗨️ 扩展阅读
🖊️ make执行了什么命令?
逐步调试启动过程
🖊️ 用gdb调试xv6的启动过程
🗨️ 扩展阅读
🖋️ 调试main函数
定制化xv6的界面
🖊️ 定制属于自己的xv6界面
🖋️ 继续定制shell
💡 关于实验报告
最后更新于