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使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

docker如何删除悬空镜像

《docker如何删除悬空镜像》文章介绍了如何使用Docker命令删除悬空镜像,以提高服务器空间利用率,通过使用dockerimage命令结合filter和awk工具,可以过滤出没有Tag的镜像,并将... 目录docChina编程ker删除悬空镜像前言悬空镜像docker官方提供的方式自定义方式总结docker

MySQL报错sql_mode=only_full_group_by的问题解决

《MySQL报错sql_mode=only_full_group_by的问题解决》本文主要介绍了MySQL报错sql_mode=only_full_group_by的问题解决,文中通过示例代码介绍的非... 目录报错信息DataGrip 报错还原Navicat 报错还原报错原因解决方案查看当前 sql mo

使用C/C++调用libcurl调试消息的方式

《使用C/C++调用libcurl调试消息的方式》在使用C/C++调用libcurl进行HTTP请求时,有时我们需要查看请求的/应答消息的内容(包括请求头和请求体)以方便调试,libcurl提供了多种... 目录1. libcurl 调试工具简介2. 输出请求消息使用 CURLOPT_VERBOSE使用 C

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas