cHIT-OSLab0
实验环境搭建:
1 2 3
| git clone https://github.com/DeathKing/hit-oslab.git cd hit-oslab ./setup.sh
|
- 在用户目录下会生成一个 oslab 目录,这里面就是实验的环境(阉割版的 Linux 0.11)
Linux 0.11 需要 gcc-3.4 进行编译,使用如下命令添加并切换 gcc-3.4 的链接组:
1 2
| sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.4 50 sudo update-alternatives --config gcc
|
再使用如下命令进行切换:
1 2 3 4 5 6 7 8
| 选择 路径 优先级 状态 ------------------------------------------------------------ 0 /usr/bin/gcc-5 50 自动模式 1 /usr/bin/gcc-11 50 手动模式 * 2 /usr/bin/gcc-3.4 50 手动模式 3 /usr/bin/gcc-5 50 手动模式 4 /usr/bin/gcc-7 50 手动模式 5 /usr/bin/gcc-9 50 手动模式
|
Linux 0.11 是 Linux 操作系统的第一版本,于 1991 年发布,它的源码结构反映了 Linux 的发展历程和设计思想
Linux 0.11 的源码结构比较简单,主要由以下几个部分组成:
- 内核(kernel)
- 系统调用(syscall)
- 用户空间应用程序(userland apps)
- 配置文件(config files)
实验目录的结构如下:(部分缺失的功能将由后续实验完成)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
| . ├── bochs │ ├── BIOS-bochs-latest │ ├── bochsrc.bxrc │ ├── bochsrc-gdb.bxrc │ └── vgabios.bin ├── files │ ├── memtest │ ├── process.c │ ├── stat_log.py │ ├── testlab2.c │ └── testlab2.sh ├── hdc │ └── umounted ├── hdc-0.11.img ├── linux-0.11 │ ├── boot │ │ ├── bootsect.s │ │ ├── head.s │ │ └── setup.s │ ├── fs │ │ ├── bitmap.c │ │ ├── block_dev.c │ │ ├── buffer.c │ │ ├── char_dev.c │ │ ├── exec.c │ │ ├── fcntl.c │ │ ├── file_dev.c │ │ ├── file_table.c │ │ ├── inode.c │ │ ├── ioctl.c │ │ ├── Makefile │ │ ├── namei.c │ │ ├── open.c │ │ ├── pipe.c │ │ ├── read_write.c │ │ ├── stat.c │ │ ├── super.c │ │ └── truncate.c │ ├── include │ │ ├── a.out.h │ │ ├── asm │ │ │ ├── io.h │ │ │ ├── memory.h │ │ │ ├── segment.h │ │ │ └── system.h │ │ ├── const.h │ │ ├── ctype.h │ │ ├── errno.h │ │ ├── fcntl.h │ │ ├── linux │ │ │ ├── config.h │ │ │ ├── fdreg.h │ │ │ ├── fs.h │ │ │ ├── hdreg.h │ │ │ ├── head.h │ │ │ ├── kernel.h │ │ │ ├── mm.h │ │ │ ├── sched.h │ │ │ ├── sched.h.cur1 │ │ │ ├── sched.h.old │ │ │ ├── sys.h │ │ │ └── tty.h │ │ ├── signal.h │ │ ├── stdarg.h │ │ ├── stddef.h │ │ ├── string.h │ │ ├── sys │ │ │ ├── stat.h │ │ │ ├── times.h │ │ │ ├── types.h │ │ │ ├── utsname.h │ │ │ └── wait.h │ │ ├── termios.h │ │ ├── time.h │ │ ├── unistd.h │ │ └── utime.h │ ├── init │ │ └── main.c │ ├── kernel │ │ ├── asm.s │ │ ├── blk_drv │ │ │ ├── blk.h │ │ │ ├── floppy.c │ │ │ ├── hd.c │ │ │ ├── ll_rw_blk.c │ │ │ ├── Makefile │ │ │ └── ramdisk.c │ │ ├── chr_drv │ │ │ ├── console.c │ │ │ ├── keyboard.S │ │ │ ├── Makefile │ │ │ ├── rs_io.s │ │ │ ├── serial.c │ │ │ ├── tty_io.c │ │ │ └── tty_ioctl.c │ │ ├── exit.c │ │ ├── fork.c │ │ ├── Makefile │ │ ├── math │ │ │ ├── Makefile │ │ │ └── math_emulate.c │ │ ├── mktime.c │ │ ├── panic.c │ │ ├── printk.c │ │ ├── sched.c │ │ ├── signal.c │ │ ├── sys.c │ │ ├── system_call.s │ │ ├── traps.c │ │ └── vsprintf.c │ ├── lib │ │ ├── close.c │ │ ├── ctype.c │ │ ├── dup.c │ │ ├── errno.c │ │ ├── execve.c │ │ ├── _exit.c │ │ ├── Makefile │ │ ├── malloc.c │ │ ├── open.c │ │ ├── setsid.c │ │ ├── string.c │ │ ├── wait.c │ │ └── write.c │ ├── Makefile │ ├── mm │ │ ├── Makefile │ │ ├── memory.c │ │ └── page.s │ ├── tags │ └── tools │ └── build.c ├── linux-0.11.tar.gz ├── mount-hdc └── run
|
常见报错处理
1
| bochs-x 已经是最新版 (2.6.11+dfsg-1build1)
|
1 2 3
| sudo ./configure --with-x11 --with-x --enable-all-optimizations --enable-readline --enable-debugger-gui --enable-x86-debugger --enable-a20-pin --enable-fast-function-calls --enable-debugger --prefix=/home/yhellow/hit-oslab-all/oslab/bochs-2.6.11/test make -j8 make install
|
1 2
| Bochs is exiting with the following message: [ ] dlopen failed for module 'vga_update_interval' (libbx_vga_update_interval.so): file not found
|
- 在
/bochs/bochsrc.bxrc
中注释 vga_update_interval: 300000
1 2
| Bochs is exiting with the following message: [ ] ./bochs/bochsrc.bxrc:10: 'keyboard_serial_delay' is deprecated - use 'keyboard' option instead.
|
- 在
/bochs/bochsrc.bxrc
中注释 keyboard_serial_delay: 200
1 2
| Bochs is exiting with the following message: [ ] ./bochs/bochsrc.bxrc:11: 'keyboard_paste_delay' is deprecated - use 'keyboard' option instead.
|
- 在
/bochs/bochsrc.bxrc
中注释 keyboard_paste_delay: 100000
1 2
| Bochs is exiting with the following message: [ ] dlopen failed for module 'i440fxsupport' (libbx_i440fxsupport.so): file not found
|
- 在
/bochs/bochsrc.bxrc
中注释 i440fxsupport: enabled=0
1 2
| Bochs is exiting with the following message: [ ] ./bochs/bochsrc.bxrc:19: display library 'sdl' not available
|
- 在
/bochs/bochsrc.bxrc
中注释 display_library: sdl
1 2
| Bochs is exiting with the following message: [HD ] ata0-0: could not open hard drive image file './hdc-0.11.img'
|
1 2
| Bochs is exiting with the following message: [BIOS ] No bootable device.
|
- 没有编译 Linux 0.11 内核,需要先切换 gcc-3.4 然后在
linux-0.11
中执行 make all
搭建效果展示