xv6 操作系统的环境搭建
xv6 是 MIT 设计的一个教学型操纵系统。xv6 可在 Intel X86 框架上运行,为了方便,建议将 xv6 运行在 QEMU 虚拟机器上,本人的实验环境是 ubuntu 18.04 。
1. 安装系统
安装 QEMU 软件。
sudo apt-get install qemu # 安装软件
man qemu-system-i386 # 查看使用说明
下载 xv6 ,本人学习的版本是基于 X86 框架的 xv6-rev11,如果安装了
git可以直接拉取我的仓库主分支。sudo apt-get install git # 安装 git 工具
git clone https://github.com/professordeng/xv6-expansion.git # 拉取代码
cd xv6-expansion # 进入目录
编译运行
sudo apt-get install gcc # gcc 负责编译
make # 编译
make qemu-nox # 运行
运行上面的指令若没有出错就会进入 xv6 系统操作界面,显示信息如下:
qemu-system-i386 -nographic -drive file=fs.img,index=1,media=disk,format=raw -drive file=xv6.img,index=0,media=disk,format=raw -smp 2 -m 512
xv6...
cpu1: starting 1
cpu0: starting 0
sb: size 1000 nblocks 941 ninodes 200 nlog 30 logstart 2 inodestart 32 bmap start 58
init: starting sh
其中
qemu-system-i386就是模拟下的 X86 平台,-nographic不需要图形设备(对服务器友好),-smp是选择启动 CPU 的核数(2 核),-m是指给此系统分配的内存大小。使用 QEMU 调试功能
按
ctrl + a,再按c,进入 QEMU 调试功能,包括但不限于以下功能- 按
q退出虚拟机器。 - 输入
info registers查看所有寄存器信息。 - 按
ctrl + a,再按c又回到 xv6 系统。 - 输入
info mem显示映射的虚拟地址和权限。 - 输入
info pg显示当前页表结构。
- 按
补充
xv6 也可以使用
make qemu启动,此时会启动两个窗口。鼠标被捕捉后可以用Alt + Ctrl组合键解脱。
2. 简单使用系统
执行 make qemu-nox 进入 xv6 操作系统后,就可以使用系统了。xv6 实现了一小部分 Linux 系统上通用的命令,例如:
ls # 显示当前目录下的文件
cat README.md # 将 README.md 的内容打印到屏幕上
echo hello # 输出 hello 到屏幕上
cat README.md | grep qemu # 用管道连接两个命令
wc README.md # 对 README.md 的内容进行统计
rm wc # 删除 wc 文件
这是一些常见的命令,还有一些其他命令可用 ls 查看。
拓展(可以跳过)
通过
ctrl + p查看进程信息(由proc.c文件中的procdump()内核函数实现)。可以看到sleep进程后面跟着一串数字,是调用栈中关于函数调用的地址。例如1 sleep init 80103e27 80103ec7 80104879 80105835 8010564f
2 sleep sh 80103dec 801002ca 80100f9c 80104b62 80104879 80105835 8010564f
打开另一个终端,利用
addr2line工具,执行如下命令addr2line -e kernel 80103e27
可以知道地址
0x80103e27对应于kernel内核代码proc.c文件的第 445 行,显示信息如下:/home/ubuntu/xv6-expansion/proc.c:445
查看
proc.c文件的第 445 行可知,该行代码位于sleep()函数中。
2. 修改系统代码
接下来做个最简单的热身动作,打开 main.c 文件,将 cprintf() 函数打印的启动提示信息 cpu0: starting 0 修改成 cpu0: let 0 go,然后执行下面指令进入系统
make
make qemu-nox
你会发现系统提示信息已经改变,恭喜你,你开始动手修改 xv6 操作系统了。
xv6 操作系统的环境搭建的更多相关文章
- xv6实验环境搭建
安装bochs 因为要运行的是xv6,所以不能直接使用 apt-get 直接获取软件.apt-get获取到的软件不支持SMP (Symmetric Multi-Processing).因此,需要下载源 ...
- 【MIT6.828】centos7下使用Qemu搭建xv6运行环境
title:[MIT6.828]centos7下使用Qemu搭建xv6运行环境 date: "2020-05-05" [MIT6.828]centos7下搭建xv6运行环境 1. ...
- 1-web应用之LAMP源码环境搭建
目录 一.LAMP环境的介绍 1.LAMP环境的重要性 2.LAMP组件介绍 二.Apache源码安装 1.下载Apache以及相关依赖包 2.安装Apache以及相关 ...
- Linux环境搭建-在虚拟机中安装Centos7.0
最近在空闲时间学习Linux环境中各种服务的安装与配置,都属于入门级别的,这里把所有的学习过程记录下来,和大家一起分享. 我的电脑系统是win7,所以我需要在win7上安装一个虚拟机-VMware,然 ...
- Win7+Eclipse+Hadoop2.6.4开发环境搭建
Hadoop开发环境搭建 感谢参考网站:http://www.cnblogs.com/huligong1234/p/4137133.html 一.软件准备 JDK:jdk-7u80-windows-x ...
- 【转】RHadoop实践系列之一:Hadoop环境搭建
RHadoop实践系列之一:Hadoop环境搭建 RHadoop实践系列文章,包含了R语言与Hadoop结合进行海量数据分析.Hadoop主要用来存储海量数据,R语言完成MapReduce 算法,用来 ...
- Xamarin环境搭建
Xamarin的环境搭建 Xamarin在osx下面的环境搭建包括开发者帐号申请,下载安装Xamarin以及Xcode,以及Xamarin Studio上编写第一个应用程序.Xamarin是一个跨平台 ...
- iOS开发教程之:iPhone开发环境搭建
安装条件: 硬件:一台拥有支持虚拟技术的64位双核处理器和2GB以上内存的PC. 注意:运行MAC OS,需要电脑支持虚拟技术(VT),安装时,需要将VT启动,在BIOS中开启. 软件: Window ...
- linux内核学习之一:环境搭建--安装Debian7.3
本系列文章假设读者已对linux有一定的了解,其实学习linux内核不需要有很深的关于linux的知识,只需要了解以下内容:linux基础知识及基本shell命令:现代操作系统的基本概念:C语言和gc ...
随机推荐
- 【Linux常见命令】cp命令
cp - copy files and directories 拷贝文件或目标文件夹,默认不能直接拷贝目录,通过-r参数设置递归复制目录 copy 语法: cp [OPTION]... [-T] SO ...
- Vue移动端项目中下拉刷新和上拉加载
Vue2.0中引入Mint-UI的下拉刷新和上拉加载.简单粗暴 安装Mint-UI npm i mint-ui -S 引入 打开项目的main.js入口文件,引入并使用.注意,为了方便,这里是全部引入 ...
- Java Web:jstl处理字符串
用法:${fn:methodName(args....)} 在使用这些函数之前必须在JSP中引入标准函数的声明<%@ taglib prefix="fn" uri=" ...
- SAAS 何以“免费”实现盈利
本文讲的是SAAS 何以"免费"实现盈利,[IT168 资讯]"天下没有免费的午餐",然而众多厂商却恰恰打出了免费这张王牌,且做出了不小的成绩,淘宝就凭借免费淘 ...
- Arduino编程基础1.1
Arduino编程语言是建立在C/C++语言基础上的,即以C/C++语言为基础,把AVR单片机(微控制器)相关的一些寄存器参数设置等进行函数化,以利于开发者更加快速地使用.其主要使用的函数包括数字I/ ...
- 虚拟机上图片服务器搭建(FastDFS+nginx)
文件服务器 0.提前建好需要的文件夹(/home/fastdfs) /home/fastdfs/tracker /home/fastdfs/storage /home/fastdfs/storage/ ...
- OSG程序设计之Hello World 3.0
直接上代码: #include <osgDB/ReadFile> #include <osgViewer/Viewer> #include <osgViewer/View ...
- 基于tp3开发的cms-前台代码执行
内核 thinkphp PbootCMS-V1.2.1 ├─ apps 应用程序 │ ├─ admin 后台模块 │ ├─ api api模块 │ ├ ...
- HashMap 底层探索
其实HashMap就是一个Node数组,只是这个数组很奇怪它的每一个Node节点都有自己的下一个Node;这个是hashMap的Node的源码: static class Node<K,V> ...
- Spring Cloud Alibaba系列(一)nacos作为服务注册中心
Spring Cloud Alibaba各组件版本关系 Spring Cloud Alibaba Version Sentinel Version Nacos Version RocketMQ Ver ...