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内核
  1. 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,


#=======================================================================

megs: 32

#=======================================================================

# ROMIMAGE:

# The ROM BIOS controls what the PC does when it first powers on.

#=======================================================================

romimage: file=/usr/local/share/bochs//BIOS-bochs-latest 



#=======================================================================

# VGAROMIMAGE

# You now need to load a VGA ROM BIOS into C0000.

#=======================================================================

vgaromimage: file=/usr/local/share/bochs//VGABIOS-lgpl-latest



floppya: 1_44="bootimage-0.12-hd", status=inserted

floppyb: 1_44="diskb.img", status=inserted



ata0-master: type=disk, path="rootimage-0.12-hd", mode=flat, cylinders=487, heads=16, spt=63

#ata0-slave: type=disk, path="rootimage-0.12-hd1", mode=flat, cylinders=487, heads=16, spt=63



#=======================================================================

# BOOT:

#=======================================================================

boot: floppy

#boot: disk

#boot: a

#boot: c



#=======================================================================

# disable the mouse, since DLX is text only

#=======================================================================

mouse: enabled=0



#=======================================================================

# LOG:

#=======================================================================

#log: /dev/null

log: bochsout.txt



#=======================================================================

# LOG CONTROLS

#=======================================================================

panic: action=ask

error: action=report

info: action=report

debug: action=ignore

#debug: action=ignore



#=======================================================================

# VGA_UPDATE_INTERVAL:

#=======================================================================

#vga_update_interval: 300000

我这里用的是第2种方法,内核代码数据在软盘文件rootimage-0.12-hd,根文件系统在硬盘文件rootimage-0.12-hd,


启动0.12内核

bochs 
选中仿真 6
c (bochs指令 continue) 
root

可以自己在0x7c00处打一个断点查看BIOS情况,

在这里插入图片描述

0.12算是成功运行

内核和当前os传递文件

软盘一般包含完整文件系统(没分区),

硬盘一般有多个分区(不同的文件系统)

  • 当前os下:

    losetup将文件模拟成设备,此文件如果有文件系统,则可以挂载

    感觉上和mount相反设备挂载到对应目录下

    mount -o loop = losetup + mount

    通过上面可以查看虚拟软盘文件中的内容

    工具包中diskb.img是dos格式的软盘,作为第二个软盘给0.12然后和0.12交换数据,0.12下有mtools程序访问DOS文件系统中文件

    #当前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

    mcopy hello.c b:
    mdir b:
    

    然后重新挂载到当前OS查看,转移成功

    我在这里死活报错,我在0.12中执行了mount /dev/floppy1 /mnt (没想明白自己为什么要执行这个),然后bochs进入0.12报错:mount:lockfile之类的,重新把原来的bootimage和rootimage放到工作目录下就行了

编译运行简单内核例程

直接在bochs中的0.12下编译算了,物理机环境更加难弄

  1. 用bochs的bximage制作一个1.44M的软盘a.img

  2. mkfs格式化文件系统为msdos mkfs -t msdos a.img

  3. 虚拟为loop设备,然后挂载到/mnt目录下(用来和0.12传递文件)

    losetup /dev/loop1 a.img 
    mount -t msdos /dev/loop1 /mnt 
    将需要编译的makefile和.s移动到/mnt下
    umount /mnt 
    losetup -d /dev/loop1 
    
  4. 修改bochsrc

  5. 进入0.12,执行mdir b:可能报错(Reset-floppy called),我没有解决,在进入后等待一会,在执行就可能没有(不知道为什么)

  6. 从软盘把文件移动到0.12的目录下,mcopy b:makefile makefile这种格式命令mtools使用

  7. make编译成功

    在这里插入图片描述

  8. 执行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
      在这里插入图片描述
在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内核
cd /usr/src/linux
make clean
make 
dd bs=8192 if=Image of=/dev/fd0

重写了软盘引导文件,不这样用mtools+diskb.img传递也行
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值