xv6-x86在ubuntu14.04 i386下正常编译、调试,在ubuntu23.04下编译各种报错--google镜像

本文主要是介绍xv6-x86在ubuntu14.04 i386下正常编译、调试,在ubuntu23.04下编译各种报错--google镜像,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

来源

原git仓库 xv6-x86(xv6-public)

文档 mit 6.828/2023/

文档 MIT 6.828/2018/xv6/book-rev11.pdf

原readme

注:

  • xv6-x86(xv6-public) 已经被放弃了, 原作者转向了xv6-riscv
  • xv6-x86文档来源:mit-pdos/xv6-book.git, 它需要 heirloom-doctools 来编译成pdf,但 heirloom-doctools太旧了 ,估计要ubuntu16或14能编译此pdf?猜测 编译出来的pdf就是 MIT 6.828/2018/xv6/book-rev11.pdf,因此不需要自己编译pdf了

环境

uname -a
#Linux xx 5.15.0-56-generic #62-Ubuntu SMP Tue Nov 22 19:54:14 UTC 2022 x86_64 x86_64 x86_64 GNU/Linuxcat /etc/issue
#Linux Mint 21.1 Vera \n \lcat /etc/debian_version
#bookworm/sid

准备

sudo  apt install    qemu-system-x86
 make -nB qemu

make_-nB_qemu.log

展开的Makefile比对: xv6-x86 和 xv6-riscv (仅kernel部分)

在ubuntu23.04 x64下编译 xv6-x86代码, make时各种报错. 需要转移到老版本ubuntu14.04 i386下编译xv6-x86

比如

z@mm:/crk/xv6-x86$ make qemugcc -fno-pic -static -fno-builtin -fno-strict-aliasing -O2 -Wall -MD -ggdb -m32 -Werror -fno-omit-frame-pointer -fno-stack-protector -fno-pie -no-pie   -c -o sh.o sh.c
sh.c: In function ‘runcmd’:
sh.c:58:1: error: infinite recursion detected [-Werror=infinite-recursion]gcc -fno-pic -static -fno-builtin -fno-strict-aliasing -O2 -Wall -MD -ggdb -m32 -Werror -fno-omit-frame-pointer -fno-stack-protector -fno-pie -no-pie   -c -o sh.o sh.c
sh.c:57:1: error: attributes should be specified before the declarator in a function definition57 | void| ^~~~
sh.c: In function ‘main’:
sh.c:168:7: error: implicit declaration of function ‘runcmd’ [-Werror=implicit-function-declaration]168 |       runcmd(parsecmd(buf));gcc -fno-pic -static -fno-builtin -fno-strict-aliasing -O2 -Wall -MD -ggdb -m32 -Werror -fno-omit-frame-pointer -fno-stack-protector -fno-pie -no-pie   -c -o mp.o mp.c
In function ‘mpconfig’,inlined from ‘mpinit’ at mp.c:101:14:
mp.c:83:10: error: array subscript -48806446 is outside array bounds of ‘void[2147483647]’ [-Werror=array-bounds]83 |   if(conf->version != 1 && conf->version != 4)

ubuntu14.04 i386 @docker

docker安装

省略

docker镜像加速

cat /etc/docker/daemon.json 
{
"registry-mirrors":"https://xxxx.mirror.aliyuncs.com"
}#登陆阿里云官网 --->  docker镜像加速 ---> https://xxxx.mirror.aliyuncs.com  (xxxx是每个个人阿里云账户不同)

xxx

ubuntu 14.04 docker镜像

在这里找到了 ubuntu 14.04 docker镜像名: hub.docker

sudo docker pull i386/ubuntu:14.04
sudo docker run --name ubuntu-1404-i386-a -itd -v /crk:/crk i386/ubuntu:14.04

ubuntu 14.04 docker实例 内 编译 xv6-x86

进入docker实例终端

进入docker该实例终端sudo docker exec -it ubuntu-1404-i386-a bash

apt国内源配置

apt国内源:

# https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
echo '清华ubunt14.04 apt源' >  /etc/apt/sources.list
apt update
安装 gcc、gdb、qemu
apt install build-essential gdb
apt install qemu-system-x86
编译、运行
cd /crk/xv6-x86/
make clean
make qemu-nox
#正常编译, 正常启动qemu#备注:  qemu-nox: 即 -nographic 
调试
准备
echo 'add-auto-load-safe-path /crk/xv6-x86/.gdbinit' >   /root/.gdbinit
gdb调试

详见:两窗口调试:gdb-server、gdb

以下简单描述 ‘两窗口调试:gdb-server、gdb’

  1. gdb-server窗口
cd /crk/xv6-x86/
make qemu-nox-gdb
#gdb-server在25000端口等待
  1. gdb窗口

cd /crk/xv6-x86/
gdb
#即连接到25000端口的gdb-server,可以开始正常调试#备注:  /crk/xv6-x86/.gdbinit 中配置了 连接25000端口

这篇关于xv6-x86在ubuntu14.04 i386下正常编译、调试,在ubuntu23.04下编译各种报错--google镜像的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/374244

相关文章

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法

《Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法》本文解析Spring框架中BeanCreationExce... 目录引言一、问题描述1.1 报错示例假设我们有一个简单的Java类,代表一个用户信息的实体类:然后,

Conda国内镜像源及配置过程

《Conda国内镜像源及配置过程》文章介绍Conda镜像源使用方法,涵盖临时指定单个/多个源、永久配置及恢复默认设置,同时说明main(官方稳定)、free(逐渐弃用)、conda-forge(社区更... 目录一、Conda国内镜像源二、Conda临时使用镜像源指定单个源临时指定多个源创建环境时临时指定源

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本