其实bochs core的问题并不复杂,但是又很多的朋友都不太了解lbochs中文版,因此呢,今天小编就来为大家分享bochs core的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!
bochs打不开怎么办,闪退怎么办!
应用程序出现闪退,原因如下:
1、应用程序自身漏洞:开发的应用程序代码存在缺陷,造成大多数设备在运行该程序时会出现闪退的情况。这种情况需要开发者进行解决。
2、系统固件版本不支持、系统配置(CPU、RAM等)不支持。这种情况表现为部分设备能正常运作该程序,而其他设备会闪退。
解决方法如下;
1.电脑下载并安装PP助手。
2.将使用数据线连接到电脑上并且打开PP助手。
3.点击左边一列中的“正版应用”。
4.然后点击在右上角的“修复闪退弹窗”按钮。
5.等待修复完成即可。
如何使用bochs启动linux2.6.0版本内核
当然不能真正启动就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代码
hexdump-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