问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使用bochs启动linux2.6.0版本内核

发布网友 发布时间:2022-04-23 22:29

我来回答

1个回答

热心网友 时间:2023-10-06 03:52

当然不能真正启动就panic了,但是单步调试和理解内核在x86平台启动已经够了。

bochs下运行linux3.0内核(已验证)

1. 构造调试环境

由于bochs内建调试功能, 且支持gdb, 用它调试内核会很方便.

(文章中大部分命令的运行需要root权限,以sudo方式运行)

1.1 构建磁盘镜像

Shell代码

dd if=/dev/zero of=hd0.img
count=$((63*16*100))

用这个命令可以构建一个50MB左右的磁盘镜像, 输出结果如下:

100800+0 records in

100800+0 records out

51609600 bytes (52 MB) copied, 0.734578 s, 70.3
MB/s

注意count必须为63*16的倍数, 否则bochs识别硬盘会有问题.

1.2 挂载磁盘镜像

Shell代码

losetup /dev/loop0 hd0.img

这个命令可以将文件绑定到一个loop设备. 如果/dev/loop0不存在, 可以尝试 modprobe
loop.

然后进行设备初始化:

Shell代码

cfdisk -s63 -h16/dev/loop0

只创建一个主分区就可以. 写入后, 用命令fdisk检查结果:

Shell代码

fdisk -lu /dev/loop0

Disk /dev/loop0: 51 MB, 51609600 bytes

16 heads, 63 sectors/track, 100 cylinders, total 100800
sectors

Units = sectors of 1 * 512 = 512 bytes

Disk identifier: 0x00000000

Device Boot Start End Blocks Id System

/dev/loop0p1 63 100799 50368+ 83 Linux

将分区1挂载到/dev/loop1.

Shell代码

losetup /dev/loop1 hd0.img -o
$((63*512))

格式化/dev/loop1为ext3格式.

Shell代码

mkfs.ext3 /dev/loop1

在mnt下创建img目录, 做以后维护用.

Shell代码

mkdir -p /mnt/img

将loop1挂载到/mnt/img

Shell代码

mount /dev/loop1 /mnt/img/

安装引导程序. 因为我狂热倾向于模块化架构, 所以选择GRUB2.

本文以grub-1.97~beta3为示例,
读者可自行安装其他的引导系统如lilo.

Shell代码

mkdir /mnt/img/boot

cp -r /usr/lib/grub/i386-pc/
/mnt/img/boot/grub

生成一个core.img, biosdisk负责读取磁盘, part_msdos负责处理MBR,
ext2负责读取ext3分区.

Shell代码

cd /mnt/img/boot/grub/

grub-mkimage -O i386-pc -o core.img biosdisk part_msdos
ext2

Shell代码

ls -lh core.img

-rw-r--r--1 root root 25K Sep2114:28
core.img

只有区区的25K.. 里面甚至还包含一个小的应急shell, 不过作用不大.

安装grub2到(hd0), 根目录在(hd0,1)

Shell代码

echo"(hd0) /dev/loop0" >
./device.map

grub-setup -m ./device.map -d /mnt/img/boot/grub/ -r
'(hd0,1)' '(hd0)'

检查一下安装成果:

Shell代码

hexmp -C /dev/loop0 | less

如果你能看到:

Shell代码

00000180 7d e8 2e00 cd18 eb
fe4752554220004765|}.......GRUB .Ge|

00000190 6f 6d004861726420446973 6b00526561|om.Hard
Disk.Rea|

就说明安装成功.

清理一下.

Shell代码

cd

umount /mnt/img

losetup -d /dev/loop1

losetup -d /dev/loop0

1.3 启动测试.

给上面的hd0.img配一个bochsrc文件, 可以拿bochs示例dlxlinux的配置文件来改,
只需将硬盘换为:

Shell代码

ata0-master: type=disk, path="hd0.img", cylinders=100,
heads=16, spt=63

然后启动Bochs, 顺利的话, 你能看到传说中的grub2 shell.

2. 从启动到保护模式.

为我们的bochs虚拟机编译一个内核. 不必太复杂,
目前我们只关心启动部分.

2.1 安装内核

退出bochs, 挂载hd0.img:

Shell代码

mount hd0.img /mnt/img/ -o
loop,offset=$((63*512))

拷贝bzImage.

Shell代码

cp /usr/src/linux/arch/i386/boot/bzImage
/mnt/img/boot/vmlinuz-3.0.00

这两个步骤可以放到内核的Makefile中, 以后每次编译完成后,
自动更新到hd0.img里.

然后将下列配置写到/mnt/img/boot/grub/grub.cfg

Shell代码

# Timeout for menu

set timeout=10

# Set default boot entry as Entry0

set default=0

# Entry0- Load Linux kernel

menuentry"Linux-3.0.00"{

set root=(hd0,1)

linux
/boot/vmlinuz-3.0.00root=/dev/hda1
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
流量保险是什么 会计的基本常识是什么 我奶奶这几天总是拉肚子,而且只能躺着一站起来眼睛就发黑,医生说她贫血... win7c盘里找不到users,用户里也没有c:usersadministrator... C盘里没有users文件夹 pvc天然气管能用多久 PVC天然气管的寿命是多久?  请教大神这怎么搞?天然气排烟管怎么弄? ...时不用在手机确认电脑登陆微信如何不用手机确认 急性胰腺炎护理 急性胰腺炎非手术治疗的护理措施 十八罗汉在佛家中的地位? 如何在Linux上使用Bochs 佛祖和观音慈眉善目,为何十八罗汉却是面目狰狞? 跪求佛教十八罗汉的排名,第三位是哪位? 在佛教中,十八罗汉指的是哪十八个人?菩萨又有哪些? 佛教中了十八罗汉、是那十八个罗汉? 佛学常识:十八罗汉像是什么人 什么是期末 十八罗汉佛像都是谁 如来佛祖座下的十八罗汉分别都叫什么名字? 中国古代神话中的如来佛座下的十八罗汉是哪十八罗汉? 佛教十八罗汉都叫什么? 期末祝福词 佛家的十八罗汉的法名分别是? 关于期末励志话语 佛界十八罗汉分别是哪些? 会计中 期末是指什么?是月末还是年末? 十八罗汉的名字和图片 期末复习方法技巧 佛教中的十八罗汉到底是哪十八个? bochs怎样才能运行linux linux下配置bochs的问题 安卓bochs,98,xp能联网吗?能不能装linux?linux能不能联网? 求助,bochs启动linux系统后,就停在了booting那里,没有loading,截图如下 如何在bochs中安装linux 谁有bochs win7的镜像,能上网有声音的 Bochs安卓版,和镜像下载地址!并加说明怎麽安装啊!很多次都没成! 安卓bochs如何联网 安卓bochs如何联网? bochs windows95镜像下载(能上网、有声音) 如何自己制作镜像,比如在bochs上可以用的img系统镜像! 求BOCHS,windows镜像,要求,能上网,有声音并且自己用过的!谢谢! 安卓bochs怎么上网,还有怎么运行exe文件啊 如何制作一个linux的img镜像文件(在bochs虚拟机中不安装直接运行的)? 二月二龙抬头有什么传说? 二月二龙抬头,其中的龙指的是什么呢? 科普中国发分享为何找不到微博 科普中国微平台2016年移动互联科学传播 科普中国APP建议和意见怎么写 青海玉树又地震了!这次伤亡或没那么大