实验1 熟悉实验环境
实验1主要是介绍了在Ubuntu下如何编译、运行和调试linux0.11内核程序。课程中的说明非常详细了,目前照着做没有发现什么问题。
实验环境是用Ubuntu桌面版,我自己用Linux也有10多年了,指示用命令行版比较多,桌面版用着怪别扭的,幸好实验的操作大都是命令处理。
从难度来说,满星5颗星,我给1颗星,基本没啥难度。只是如果不熟悉Linux的使用,估计还是会有些难度的。
准备环境
进入oslab目录,解压压缩包。
# 进入到 oslab 所在的文件夹
$ cd /home/shiyanlou/oslab/
# 解压,并指定解压到 /home/shiyanlou/
# 这样的话,在 /home/shiyanlou/oslab/ 中就能找到解压后的所有文件
$ tar -zxvf hit-oslab-linux-20110823.tar.gz -C /home/shiyanlou/
# 查看是否解压成功
$ ls -al
# 除了压缩包 hit-oslab-linux-20110823.tar.gz 之外,其他的就是压缩包中的内容
解压后查看目录:
文件结构
文中有提到有一个image文件,刚解压后在linux0.11目录下并没有找到,下一步编译linux0.11内核后,就可以看到了。
编译内核
先切换到oslab目录进行确认查看:
# 切换目录
$ cd /home/shiyanlou/oslab/
# 确认路径
$ pwd
# 查看目录内容
$ ls -l
进入linux0.11内核,然后使用make命令进行编译:
$ cd ./linux-0.11/
$ make all
编译完成后,在linux0.11下就会生成一个Image文件:
运行
运行上面编译好的内核,进入 ~/oslab/ 目录,运行 run:
# 注意是在上层目录
# 刚刚编译是在 oslab/linux-0.11/ 文件夹下
$ cd ~/oslab/
# 执行 run 脚本
$ ./run
运行成功后查看截图:
调试
开发过程中调试是必不可少的,Linux0.11用了汇编和C语言,所有需要两种调试方法。
汇编调试
进入 ~/oslab/ 目录,运行 dbg-asm 命令:
# 确认在 oslab 目录下
$ cd ~/oslab/
# 运行脚本前确定已经关闭刚刚运行的 Bochs
$ ./dbg-asm
运行后查看截图:
Bochs可以通过help指令查看帮助,如果英文不好,网上也有中文的教程哈。
C语言调试
C语言调试需要打开两个终端。
第一个终端运行 dbg-c 命令:
$ cd ~/oslab
$ ./dbg-c
查看运行截图:
第二个终端运行 rungdb 命令:
$ cd ~/oslab
$ ./rungdb
查看运行截图:
这个就是gdb调试器。
此时查看第一个终端,出现连接 Connected to 127.0.0.1,表示连接成功。
文件交换
进入 ~/oslab/ 目录,运行 mount-hdc 命令:
$ cd ~/oslab/
# 启动挂载脚本
$ sudo ./mount-hdc
查看 hdc 目录:
使用后卸载文件系统:
$ cd ~/oslab/
# 卸载
$ sudo umount hdc
试验一下文件交换,首先通过 sudo ./mount-hdc 进行挂载。然后在 Ubuntu 的 ~/oslab/hdc/usr/root 目录下创建一个 xxx.c 文件,写入 hello 内容
sudo echo 'hello' > ~/oslab/hdc/usr/root/xxx.c
最后执行 sudo umount hdc 后,再进入 Linux 0.11(即 run 启动 bochs 以后)就会看到这个 xxx.c 。
这样就非常方便和在宿主机和linux0.11内核中交换文件。
完!