- Linux 基础入门(新版)
- C 语言实现 Linux Shell 命令解释器
- C 语言实现 Linux touch 命令
- C 语言实现多线程排序
- 多线程生产者消费者模型仿真停车场
- 在 Github Pages 上部署自己的简历
- Linux 系统安装及配置邮件服务器
- Shell 脚本实现 Linux 系统监控
- C 语言实现 Linux 网络嗅探器
- Vim 编辑器
- Ansible 基础教程
- C 语言实现聊天室软件
- Linux 防火墙技术
- Linux 系统搭建及配置 DNS 服务器
- Linux 系统监控实战
- 操作系统原理与实践
- 实验环境的工作模式
- 使用方法
- Linux 系统安装配置版本控制服务器
- LAMP 部署及配置
- Linux 内核分析
- 正则表达式基础
- TCP/IP 网络协议基础
- Linux Web 运维(Nginx)实战
- Linux 命令实例练习
- 高级 Bash 脚本编程指南
- Memcache 基础教程
- 操作系统实验-基于 uCore OS
- Linux 系统编程
使用方法
- 准备活动
$ cd ~/oslab
把当前目录切换到 oslab 下,用 pwd 命令确认,用“ls -l”列目录内容。本实验的所有内容都在本目录或其下级目录内完成。
- 编译内核
“编译内核”比“编写内核”要简单得多。首先要进入 linux-0.11 目录,然后执行:
$ make all
因为“all”是最常用的参数,所以可以省略,只用“make”,效果一样。
在多处理器的系统上,可以用-j 参数进行并行编译,加快速度。例如双 CPU 的系统可以:
$ make -j 2
make 命令会显示很多很多很多的信息,你可以尽量去看懂,也可以装作没看见。只要最后几行中没有“error”就说明编译成功。最后生成的目标文件是一个软盘镜像文件——linux-0.11/Image。如果将此镜像文件写到一张 1.44MB 的软盘上,就可以启动一台真正的计算机。
linux-0.11 目录下是全部的源代码,很多实验内容都是要靠修改这些代码来完成。修改后需要重新编译内核,还是执行命令:
$ make all
make 命令会自动跳过未被修改的文件,链接时直接使用上次编译生成的目标文件,从而节约编译时间。但如果重新编译后,你的修改貌似没有生效,可以试试先“make clean”,再“make all”。“make clean”是删除上一次编译生成的所有中间文件和目标文件,确保是在全新的状态下编译整个工程。
- 运行和调试
在 Bochs 中运行最新编译好的内核很简单,在 oslab 目录下执行:
$ ./run
如果出现 Bochs 的窗口,里面显示 linux 的引导过程,最后停止在“[/usr/root/]#”,表示运行成功,如下图所示。
图 1 用 Bochs 启动 Linux 0.11 以后的样子
内核调试分为两种模式:汇编级调试和 C 语言级调试。
汇编级调试需要执行命令:
$ ./dbg-asm
可以用命令 help 来查看调试系统用的基本命令。更详细的信息请查阅 Bochs 使用手册。
C 语言级调试稍微复杂一些。首先执行如下命令:
$ ./dbg-c
然后再打开一个终端窗口,进入 oslab 目录后,执行:
$ ./rungdb
新终端窗口中运行的是 GDB 调试器。关于 gdb 调试器请查阅 GDB 使用手册。
- Ubuntu 和 Linux 0.11 之间的文件交换
oslab 下的 hdc-0.11-new.img 是 0.11 内核启动后的根文件系统镜像文件,相当于在 bochs 虚拟机里装载的硬盘。在 Ubuntu 上访问其内容的方法是( 大家使用 sudo 时,password 是 shiyanlou ):
$ sudo ./mount-hdc
之后,hdc 目录下就是和 0.11 内核一模一样的文件系统了,可以读写任何文件(可能有些文件要用 sudo 才能访问)。读写完毕,不要忘了卸载这个文件系统:
$ sudo umount hdc
经过 sudo ./mount-hdc 这样处理以后,我们可以在 Ubuntu 的 hdc 目录下创建一个 xxx.c 文件,然后利用 Ubuntu 上的编辑工具(如 gedit 等)实现对 xxx.c 文件的编辑工作,在编辑保存以后。执行 sudo umount hdc 后,再进入 Linux 0.11(即 run 启动 bochs 以后)就会看到这个 xxx.c(即如下图所示),这样就避免了在 Linux 0.11 上进行编辑 xxx.c 的麻烦,因为 Linux 0.11 作为一个很小的操作系统,其上的编辑工具只有 vi,使用起来非常不便。
图 2 用 Ubuntu 和 Linux 0.11 完成文件交换以后再启动 Linux 0.11 以后
另外在 Linux 0.11 上产生的文件,如后面实验中产生的 process.log 文件,可以按这种方式”拿到“Ubuntu 下用 python 程序进行处理,当然这个 python 程序在 Linux 0.11 上显然是不好使的,因为 Linux 0.11 上搭建不了 python 解释环境。
注意 1:不要在 0.11 内核运行的时候 mount 镜像文件,否则可能会损坏文件系统。同理,也不要在已经 mount 的时候运行 0.11 内核。
注意 2:在关闭 Bochs 之前,需要先在 0.11 的命令行运行“sync”,确保所有缓存数据都存盘后,再关闭 Bochs。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论