Linux 0.1x所有环境搭建(bochs运行0.12内核+和0.12传递文件+编译运行简单例程)
环境搭建
电脑环境:
OS: Deepin 15.11 stable
Kernel: x86_64 Linux 4.15.0-30deepin-generic
在bochs运行0.12内核
- bochs:
apt install bochs
(自己编译麻烦)
默认安装目录:
主(工作)目录:/usr/local/bin
,作用:配置文件,磁盘和bochs img工具
默认配置(没啥用:/usr/local/share/doc/bochs
用到的BIOS ROM和显卡ROM:/usr/local/share/bochs
0.12内核用到的所有工具oldlinux
在主目录下(/usr/local/bin
)创建配置文件bochsrc
,
1 |
|
我这里用的是第2种方法,内核代码数据在软盘文件rootimage-0.12-hd
,根文件系统在硬盘文件rootimage-0.12-hd
,
启动0.12内核
1 |
|
可以自己在0x7c00处打一个断点查看BIOS情况,
0.12算是成功运行
内核和当前os传递文件
软盘一般包含完整文件系统(没分区),
硬盘一般有多个分区(不同的文件系统)
当前os下:
losetup
将文件模拟成设备,此文件如果有文件系统,则可以挂载感觉上和
mount
相反设备挂载到对应目录下mount -o loop = losetup + mount
通过上面可以查看虚拟软盘文件中的内容
工具包中
diskb.img
是dos格式的软盘,作为第二个软盘给0.12然后和0.12交换数据,0.12下有mtools程序访问DOS文件系统中文件1
2
3
4#当前OS下查看diskb.img中的内容
mount -t msdos diskb.img -o loop /mnt
ls /mnt
umount /mnt传递数据
修改bochs配置文件,添加第二个软盘,(当然diskb.img放在工作目录)
floppyb: 1_44="diskb.img", status=inserted
可以看到0.12 /root目录下的hello.c
1
2mcopy hello.c b:
mdir b:然后重新挂载到当前OS查看,转移成功
我在这里死活报错,我在0.12中执行了
mount /dev/floppy1 /mnt
(没想明白自己为什么要执行这个),然后bochs进入0.12报错:mount:lockfile
之类的,重新把原来的bootimage和rootimage放到工作目录下就行了
编译运行简单内核例程
直接在bochs中的0.12下编译算了,物理机环境更加难弄
用bochs的bximage制作一个1.44M的软盘a.img
mkfs格式化文件系统为msdos
mkfs -t msdos a.img
虚拟为loop设备,然后挂载到/mnt目录下(用来和0.12传递文件)
1
2
3
4
5losetup /dev/loop1 a.img
mount -t msdos /dev/loop1 /mnt
将需要编译的makefile和.s移动到/mnt下
umount /mnt
losetup -d /dev/loop1修改bochsrc
进入0.12,执行
mdir b:
可能报错(Reset-floppy called
),我没有解决,在进入后等待一会,在执行就可能没有(不知道为什么)从软盘把文件移动到0.12的目录下,
mcopy b:makefile makefile
这种格式命令mtools使用make编译成功
- 执行
make disk
将编译出来的简单内核例程写入/dev/fd0
(引导镜像文件),reset重启就行,下次进入0.12用原来的bootimage.img引导
Bochs调试命令
学汇编时大部分应该都会
制作根文件系统(失败)
linux 0.1x 支持的文件系统是 MiniX1.0系统
用bximage(bochs自带的创建一个256MB硬盘映像文件)
按照书中在sls-linux中进行分区和格式化
bochs中运行sls-linux
书中用到sls linux,先来安装一下 sls linux包
在当前目录下
mkdir sls
(随意哪一个目录都行),把sls包的文件复制到这里修改默认配置文件,
bochs -f sls的配置文件
,注意软盘和磁盘文件的路径根据bochs报错修改,以及
System BIOS must end at 0xfffff
报错:- 去掉rootimage的
, address=0xf0000
- 去掉rootimage的
在hdc.img上建立根文件系统报错 Kernel painc: HD controller not ready
书中这里又用第一中双软盘的方式启动0.12,但是在修改软盘驱动器A为根文件系统软盘后continue报错如上
使用
bochsrc-0.12-hd.bxrc
配置文件启动的话,该配置文件加载bootimage-0.12-hd,此软盘文件第509,510字节设备号是0x0301,在linux 0.1x时代代表第一个硬盘的第一个分区,所以从rootimage-0.12-hd
硬盘(文件)中加载根文件系统
解决此报错的方法:csdn
重新进入到了0.12,并且是软盘上的根目录,mount命令都没有,
还是要从rootimage-0.12-hd进入然后制作根文件系统,但是复制会有部分报错,并且用hdc.img作为根文件系统引导后连/root都进不去 报错:ENOENT
在0.12中编译0.12内核
1 |
|
重写了软盘引导文件,不这样用mtools+diskb.img传递也行
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!