首页 > 其他分享 >《操作系统原型--xv6分析与实验》第一章:qemu启动xv6问题记录

《操作系统原型--xv6分析与实验》第一章:qemu启动xv6问题记录

时间:2023-04-22 13:11:21浏览次数:46  
标签:gcc -- make xv6 rev9 qemu Werror

最近在学习《操作系统原型--xv6分析与实验》,第一章安装qemu和启动xv6就遇到很多障碍,特此记录一下解决办法。

版本信息
系统:Ubuntu 22.04.1 LTS
xv6:rev9
qemu:6.2
gcc:11.2.0

操作步骤
ubuntu勾选了完整安装,默认自带gcc、make等构建工具。


  1. 首先将用到的xv6下载下来解压,我下载的是rev9版本。
tar -xvf xv6-public-xv6-rev9.tar.gz
cd xv6-public-xv6-rev9/

  1. 编译xv6
make

编译报错:

usertests.c: In function ‘sbrktest’:
usertests.c:1461:13: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=]

image

[-Werror=stringop-overflow=]是由于gcc版本过高导致的,换低版本gcc即可解决(如gcc 8)。
但是更换gcc比较麻烦,这个是将警告当做报错了,因此跳过它即可。观察命令行参数有个-Werror,编辑当前目录下的Makefile文件,去掉命令行参数-Werror即可。

vim Makefile
# 搜索Werror,找到后删除
/Werror

image

重新执行make,编译完成,生成了xv6.img文件。

make
ll xv6.img

image

image


  1. 接下来启动qemu
    make qemu

image

报错信息:

***
*** Error: Couldn't find a working QEMU executable.
*** Is the directory containing the qemu binary in your PATH
*** or have you tried setting the QEMU variable in Makefile?
***
serial mon:stdio -drive file=fs.img,index=1,media=disk,format=raw -drive file=xv6.img,index=0,media=disk,format=raw -smp 2 -m 512 
make: serial: No such file or directory
make: [Makefile:216: qemu] Error 127 (ignored)

这是由于没有安装qemu导致的。
安装qemu:

# 安装qemu
sudo apt-get install qemu
# 安装x86架构的qemu(xv6 rev9版本要求x86架构)
sudo apt-get install qemu-system-x86
# 验证安装成功
qemu-system-i386

执行qemu-system-i386会弹出qemu,说明安装完成。
image

重新使用qemu启动xv6
make qemu
image

问题:qemu界面一直闪烁,卡在 Booting from Hard Disk...
一开始以为是qemu的版本问题,装了ubuntu 18和qemu 4版本,发现也不行。
最后搜到这个解决办法:
https://www.cnblogs.com/zsmumu/p/12622898.html
看不懂是什么原因,照着做即可。
定位到xv6目录下的kernel.ld的第25行:
image

/* Include debugging information in kernel memory */
	.stab : {

.stab : {改成.stab : AT(LOADADDR(.rodata) + SIZEOF(.rodata)){
重新执行make qemu

qemu启动成功
image

标签:gcc,--,make,xv6,rev9,qemu,Werror
From: https://www.cnblogs.com/seasonhai/p/17342819.html

相关文章

  • 微信小程序-事件传递数据
    事件对象小程序在触发事件监听方法的时候会自动传递一个事件对象给我们,通过这个事件对象我们可以拿到页面传递过来的一些数据。事件对象的作用拿到触发事件的元素:currentTarget拿到触发事件的位置:detail拿到从页面传递过来的数据:dataset/mark页面传递数据的方法datasetmark通......
  • Avalonia属性编辑器控件(Avalonia.PropertyGrid)
    Nuget: https://www.nuget.org/packages/bodong.Avalonia.PropertyGridGitHub: https://github.com/bodong1987/Avalonia.PropertyGrid ......
  • chatGPT,该如何使用python调用你的接口
    以下是chatGPT的回答:好的,这里是一些使用Python调用OpenAIAPI的基本步骤:安装openaiPython包您可以使用pip安装openai包。在终端或命令行中输入以下命令:pipinstallopenai获取API密钥在使用OpenAIAPI之前,您需要获得OpenAIAPI密钥。要获得API密钥,请访问OpenAI网......
  • lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
    一、lua变量【全局变量和局部变量和表中的域】Lua变量有三种类型:全局变量和局部变量和表中的域。▪全局变量:默认情况下,Lua中所有的变量都是全局变量。▪局部变量:使用local显式声明在函数内的变量,以及函数的参数,都是局部变量。在函数外即使用local去声明,它的作用域也是当前的整......
  • Visual Studio Code开发常用的工具栏选项,查看源码技巧以及【vscode常用的快捷键】
    一、开发常用的工具栏选项1、当前打开的文件快速在左侧资源树中定位:其实打开了当前的文件已经有在左侧资源树木定位了,只是颜色比较浅2、打开太多文件的时候,可以关闭3、设置查看当前类或文件的结构OUTLINE相当于idea查看当前类或接口的结构Structure二、查看源码技巧:(1)Ctr+鼠标......
  • Visual Studio Code 常见的配置、常用好用插件以及【vsCode 开发相应项目推荐安装的插
    一、VsCode常见的配置1、取消更新把插件的更新也一起取消了2、设置编码为utf-8:默认就是了,不用设置了3、设置常用的开发字体:Consolas,默认就是了,不用设置了字体对开发也很重要,不同字体,字母形态都不太一样,尤其是标点符号,逗号和分号的区分,有的字体看着这两者就很像4、设置ctr+滚轮,改......
  • 浏览器打开有些pdf内容不全、打开有些论文页很多红色绿色的框
    问题问题1:edge浏览器打开pdf,只能看到表格,看不到表格里的字,用其他浏览器打开或者pdf阅读器打开都能看到完整的表格内容。问题2:用edge浏览器看pdf论文的时候,会有很多红色或绿色的框,比如:问题产生原因偶然间,我发现导致这些问题是因为我安装的“侧边翻译”插件,由于之前看网页中的pdf......
  • Java 计算两个 LocalDateTime 类型的变量之间差的小时数,保留4位小数
    为了计算两个LocalDateTime对象之间相差的小时数,并精确到小数点后4位,您可以使用Duration类。以下是一个示例:importjava.time.LocalDateTime;importjava.time.Duration;publicclassMain{publicstaticvoidmain(String[]args){LocalDateTimea=Loc......
  • MySQL 时间类型 date、datetime 和 timestamp 的用法与区别
    时间范围datetime和timestamp区别时间范围不一样,TIMESTAMP要小很多,且最大范围为2038-01-1903:14:07.999999,到期也不远了。datetime与时区无关、timestamp与时区有关。对于timestamp,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户......
  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之002 week01 02-02 线性查找法
    1、线性查找法什么是线性查找法?举例:在一沓试卷中,找到属于自己的那张试卷。第1张:不是第2张:不是第3张:不是……第n张:是,找到了!第n+1张:不找了……这个解决问题的思路和过程体现就是线性查找法的思想。2、线性查找法思路梳理线性查找法,就是在线性的数据结构中来完成。例如:在data数......