设为首页 收藏本站
查看: 720|回复: 0

[经验分享] 使用bochs运行Linux Kernel-2.4.0

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-3-14 08:24:12 | 显示全部楼层 |阅读模式
上一篇博文讲了如何制作bochs硬盘镜像并且将grub装进去,这样我们可以在启动bochs后进入到grub界面。
这篇博文我们将2.4内核写入硬盘镜像,这就可以使用bochs直接启动内核了。
我的实验系统是这么布置的:CentOS 6.4 VMware虚拟机上修改代码和配置文件,用git做版本管理,同时还开着另一台虚拟机RedHat Linux 7.3,专门用来编译内核代码,毕竟2.4内核很老了,编译环境不能使用现代Linux系统,必须使用2001年左右的系统。每次在CentOS上修改完代码或配置就在RedHat上用rsync将数据同步下来,进行编译、安装、测试,这样最方便。用于开发的系统不必反复重启,用于编译的系统就是实验平台。
编译内核(这一步在RedHat上进行)

这一步在这里就不展开讲了,我对内核做了精简,不必要的选项全部关闭了,大大缩短了编译时间。其中,

Block devices  ---> RAM disk support

这个选项也被我关闭了,那内核启动的时候自然就不需要Initial RAM disk (initrd)了,所以待会儿更改grub.conf的时候不用配置下面这一行了。

initrd /boot/initrd-2.4.0.img

在RedHat上编译完内核后,arch/i386/boot/bzImage 这个文件就是内核核心了。如果执行 make install 的话,这个文件会被复制到 /boot/vmlinuz-2.4.0。我们不需要安装这个内核,而是直接将bzImage复制到CentOS上做后续处理。
挂载硬盘镜像

紧接着上篇博文,我们将上次的hd.img继续挂载

losetup -o 32256 /dev/loop0 hd.img
mount -t ext3 /dev/loop0 /mnt

这两步其实可以只用mount就能一步做到

mount -t ext3 -o loop=/dev/loop0,offset=32256 hd.img /mnt

不过我更喜欢两步到位,清晰明确。
写入内核

将bzImage复制到 /mnt/boot/,也就是复制到我们的硬盘镜像第一分区的boot目录内。这里顺便重命名为vmlinuz-2.4.0,看着正规一些。

cp bzImage /mnt/boot/vmlinuz-2.4.0

修改grub.conf

我们上一篇博文安装grub时,所有的相关文件都是用的宿主系统CentOS 6.4的,所以grub.conf必须要修改一下才能适合我们这个新内核。

gvim /mnt/boot/grub/grub.conf

只更改启动项部分就行了,改成这样

title kernel-2.4.0
    root (hd0,0)
    kernel /boot/vmlinuz-2.4.0 ro root=/dev/sda1

按照grub的约定,root (hd0,0)表示grub的根分区在第一块硬盘的第一分区(自0编号),注意这指的是grub被安装的分区,不是操作系统文件系统的root分区。

kernel /boot/vmlinuz-2.4.0 指明内核文件是 /boot/vmlinuz-2.4.0。当然,这个路径是站在hd.img硬盘镜像的角度看的,也就是说硬盘镜像内第一分区是/分区,该分区下有个boot目录,里面含有内核文件vmlinuz-2.4.0。后面的ro表示以只读的方式挂载操作系统的root分区,而root=/dev/sda1则指明文件系统的root分区在第一硬盘的第一分区。
卸载文件系统

umount /mnt/
losetup -d /dev/loop0

启动内核

现在所有的修改都已经完毕,下面用bochs启动内核。 bochs的配置这里也不讲了,修改配置时按照菜单提示操作即可,其实只需修改First HD/CD on channel 0为hd.img,这一步需要输入hd.img的参数,就是上篇博文里的柱面数、磁头数、每磁道扇区数,然后修改Boot drive #1: floppy为disk,最后设置下内存,50M就够了。其他就不用设置了,直接开始启动运行。

然后你会看到bochs开始启动内核,最后在挂载VFS时出现panic

BIOS Vendor: The Bochs Project
BIOS Version: Bochs
BIOS Release: 01/01/2007
Starting kswapd v1.8
SCSI subsystem driver Revision: 1.00
request_module[scsi_hostadapter]: Root fs not mounted
request_module[block-major-8]: Root fs not mounted
VFS: Cannot open root device "sda1" or 08:01
Please append a correct "root=" boot option
Kernel panic: VFS: Unable to mount root fs on 08:01

这很正常,因为我们的硬盘镜像第一分区内除了/boot目录下有点东西外其他都是空的,内核启动时啥都找不到,自然要挂掉。

过段时间等我研究内核有了进展我会再写一篇博文,讲讲如何从RedHat Linux 7.3中抽取必要的文件写入镜像,让内核能够正常进入系统,不过这一步非常麻烦,能不能实现还不好说。

本文做到这个程度已经足以调试内核了,应该能调试到文件系统初始化部分。

下一步就是Fire up DDD开始调试内核,DDD这个宇宙最强调试器深得我心,一开始看到它简陋的界面曾让我失望过,不过当我见识了它宇宙最强的调试功能——数据结构可视化之后,它就成了我永不离手的一件神兵利器。DDD就是这样,低调不露锋芒,但是当你祭出它时,天下间将没有难调的程序。

DDD——让天下没有难调的程序,就是这样。

参考资料:https://www.gnu.org/software/grub/manual/legacy/grub.html#fn-4

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-190431-1-1.html 上篇帖子: linux下利用nohup后台运行jar文件包程序 下篇帖子: CentOS和Ubuntu系统简要网络配置及常用网络管理工具汇总 Linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表