Setup Bochs in Ubuntu

本文介绍如何通过Synaptic包管理器安装Bochs及其相关组件,并详细说明了配置bochsrc文件的过程,以便正确设置VGABIOS映像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Install the following package through Synaptic Package Manager:
bochs
bochsbios
bochs-x
vgabios

By default, when you mark bochs  to install,  bochsbios, bochs-wx and vgabios will be marked automatically. But you'd better to unmark bochs-wx and mark bochs-x.

After successfully installed those packages, edit the bochsrc file which is used as the configuration file for bochs.
In this file, set the vgaromimage to the bin file you installed, on my computer it is :
vgaromimage: file="/usr/share/vgabios/vgabios.bin"
When set cpu, I don't know why I can not set reset-on-triple-fault. Every time when I set it, it cause the bochs to fail, and after I remove it, the bochs can launch successfully. So I just delete it from the original configure file.
操作系统任务描述 本关任务:修改 Linux 0.11 内核程序,将系统启动时显示的字符串由原来的Partition table ok.变为Hello, world!。 通过本关任务,可以熟悉 Linux 0.11 内核实验环境,掌握内核程序的编辑、编译和测试方法。 相关知识 为了完成本关任务,你需要: 1.了解实验环境; 2.测试内核是否正常; 3.查看内核源码; 4.修改内核源码; 5.重新编译内核; 6.测试新内核是否正常。 1.了解实验环境 本课程将会在 Ubuntu 16.04 下进行学习,Ubuntu 属于Linux衍生出来的以桌面应用为主的Linux操作系统,Linux操作系统的使用与Windows基本上不同,所以最初会觉得无法理解,但是本质上还是差不多的。 本实验将使用 Bochs 模拟硬件环境,在完成对代码的修改或编译之后将使用run去启动新的虚拟机,环境都是准备好,可以直接使用的,只需要使用脚本去启动就行了。 本实验中已经给出了完整的linux 0.11内核文件放在/root/os/linux-0.11-lab/0/linux中,可以直接使用。 本课程的实验在目录~/os/linux-0.11-lab下进行,此目录下的内容如下: 其中各目录和文件的含义是: 脚本文件run*:以不同模式运行虚拟机,脚本 run 采用正常模式,脚本 rundbg 采用 bochs 调试模式(汇编级),脚本 rungdb 采用 gdb 调试模式( C 语句级),这三个模式都用于内核测试。 用于启动虚拟机的内核映像文件是cur/linux/目录下的Image; 虚拟机的根文件系统是images文件夹下的rootimage-0.11; 目录0:存放有 Linux 0.11 内核的源代码及其 Source-Insight 工程文件,本实训中使用 VSCode 代替 Source-Insight ,不需要使用到 Source-Insight ,只需要使用到linux文件夹中的源码; 目录conf:存放有虚拟机的配置文件,这些配置文件描述了虚拟机的硬盘、软盘、内存大小等参数; 目录images:包含虚拟机的硬盘(根文件系统)和软盘的映像文件; 其中映像文件hdimage-devel用作应用开发模式的硬盘,里面包含应用程序编译所需的 gcc 等软件。脚本run、rundbg和rungdb用软盘作为启动盘,对应的软盘映像文件是cur/linux/Image。 cur是一个符号链接,指向当前分析的内核目录,现在指向目录0,可以当作是一个快捷方式。 2.测试内核是否正常 运行run脚本就会使用在~/os/linux-0.11-lab目录下的内核映像cur/linux/Image启动 Linux 0.11 。 虽然这个虚拟机的硬盘容量只有 1 MB ,但它目前可以满足内核分析的需要。 3.查看内核源程序 关闭虚拟机,然后使用 VSCode 打开源码所在文件夹,选择 File ,然后选择 Open Folder ; 找到linux文件夹,然后确认打开; 可以看到文件夹下所有的源码都已经被导入了,可以在这里开始对源码进行修改了。 4.修改内核源码 在源码中可以修改很多东西,例如修改开机画面中的字符串Loading system ...,将其修改为Loading linux 0.11,这里需要注意一点,不能太长而影响生成的目标文件的大小。 使用搜索功能,搜索关键词Loading,在结果中找到Loading system ...,将其修改为Loading linux 0.11。 如果知道文件的具体位置,也可以在命令行中使用vim对配置文件进行修改,只需要找到文件中对应的地方进行修改,和在 VSCod 里面修改结果都是一样的。 修改完毕之后点击 File 然后选择 Save All ,保存所有修改即可。 5.重新编译内核 在内核源码目录~/os/linux-0.11-lab/0/linux中使用make命令重新编译内核; 下图是编译输出的结果,可以看到被修改的文件bootsect.s已经重新编译成功,这是只编译修改过的文件,有时为了可靠也可以完全编译; 完全编译需要将旧的编译文件清除,使用make clean命令清除编译文件,然后重新使用make命令编译,只不过完全编译的时间相对较长; 上图是编译之后的结果,Image 即为生成的完整内核映像,包含引导代码;tools 目录下有内核的主体可执行文件 system ,其符号文件是 System.map ,包含变量和函数的地址,其链接时的详细布局信息在文件 System.map.2
03-10
<think>嗯,用户想在Linux 0.11内核里把启动时显示的“Partition table ok.”改成“Hello, world!”。这需要修改内核源码然后重新编译。我得先确定哪个文件包含这个字符串。记得Linux 0.11的代码结构比较老,可能是在boot目录下的某个汇编文件里? 首先,用户需要安装编译环境,可能得用老版本的gcc和as,因为新版本可能不兼容。然后,找到源码里的字符串,可能是在boot/setup.s或者boot/bootsec.s里?或者可能在init/main.c附近?可能需要用grep命令搜索“Partition table ok.”来定位具体文件。 找到之后,直接修改那个字符串。比如如果是汇编文件,字符串可能以.db或者.ascii指令存在,替换成“Hello, world!”然后保存。接下来编译内核,可能需要执行make或者make clean之前先清理旧的编译文件。编译完成后,用bochs或qemu这样的模拟器来测试,看看启动时是否显示新的字符串。 用户可能遇到的问题包括编译错误,比如工具链不兼容,或者修改了错误的文件。这时候需要检查工具版本,确保环境变量设置正确。另外,字符串长度如果超过原来的,可能会导致内存覆盖问题,所以要确保新字符串长度不超过原字符串,或者调整后续的内存分配,但Linux 0.11可能结构简单,直接替换相同长度应该没问题。</think>### 修改Linux 0.11内核启动字符串的步骤 #### 1. **环境准备** - 安装编译工具链:需支持16位编译环境(例如`gcc-3.4`、`binutils-2.9`等)[^1] - 下载Linux 0.11内核源码:可从官方仓库或镜像获取 - 配置编译环境变量: ```bash export PATH="$PATH:/path/to/old_toolchain/bin" ``` #### 2. **定位字符串源码** - 目标字符串`Partition table ok.`位于`boot/setup.s`汇编文件 - 使用文本编辑器打开文件: ```bash vim boot/setup.s ``` - 搜索以下代码段(约第508行): ```asm ok: db 'Partition table ok.',13,10,0 ``` #### 3. **修改字符串内容** - 将原字符串替换为`Hello, world!`: ```asm ok: db 'Hello, world!',13,10,0 ``` - **注意**:需确保新字符串长度不超过原字符串,避免内存越界 #### 4. **编译内核** - 清理旧编译文件: ```bash make clean ``` - 编译内核镜像: ```bash make ``` - 成功后会生成`Image`文件(约127KB) #### 5. **测试修改** - 使用模拟器(如`Bochs`或`QEMU`)加载新内核: ```bash bochs -f bochsrc.txt # 需提前配置bochsrc ``` - 观察启动界面第一屏的输出,原`Partition table ok.`已变为`Hello, world!` #### 6. **常见问题** - **编译失败**:检查工具链版本和`Makefile`中的汇编器/编译器路径 - **字符串显示异常**:确认汇编语法中`db`指令的字符编码和结尾符`13,10,0`(回车、换行、终止符) - **内存溢出**:若修改后字符串过长,可能覆盖后续代码段导致崩溃
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值