让l4ka跑起来

来源:互联网 发布:solaris 配置网络 编辑:程序博客网 时间:2024/06/10 21:10

欢迎访问个人网站,阅读此文http://www.yandong.org

L4ka:pistachio是一种微内核,关于微内核的一些情况曾经介绍过一些,看这里。

本文使用的虚拟机是:bochs

不过如果你使用qemu的话也可以,而且也不用写配置文件了,直接输入命令就可以了

qemu-system-i386 -fda  l4.img 

最简单的方法,使用官方demo


准备工作

1.最好新建一个工作文件夹,如l4ka_demo,并cd到该文件夹 

2.下载这个,这是官方给出的一个用于演示而且已经编译封装好的内核。解压缩,会得到一个bin文件。 

动手啦: 

第一步: 使用bximg创建一张软盘镜像l4ka_floppy_demo.img

第二步: 将bin文件写入img镜像文件中去。

dd if=***.bin of=l4ka_floppy_demo.img bs=512

第三步: 写bochs的配置文件bochsrc,

其内容大致如下:

config_interface: textconfigromimage: file=/opt/bochs-2.5.1/bios/BIOS-bochs-latestmegs: 32vgaromimage: file=/opt/bochs-2.5.1/bios/VGABIOS-lgpl-latest# what disk images will be usedfloppya: 1_44=l4ka_floppy_demo.img, status=insertedboot: floppylog:bochsout.txtmouse: enabled=0keyboard_mapping: enabled=1, map=/usr/share/bochs/keymaps/x11-pc-us.map 

注意:我的bochs是我自己编译安装在/opt下面的,注意更改你们的路径 

第四步:运行

bochs -f bochsrc 

第五步:运行结果大致如下图

     

编译运行–使用软盘映像(fd.img) 


bochs+软盘镜像(img)+自己编译的内核 

准备工作:

1.新建一个一个文件夹

2.下载l4ka的源代码,在这里。

3.编译需要这几个东西gcc(2.95.2)、 g++、 build-essential 、binutils(2.9.*) ,记得安装它们 

可以动手了 

第一步:编译内核(kernel)

解压缩代码,会发现目录中大致有五个文件夹,需要关心的是其中的 kernel和user。

cd path/l4ka-pistachio-29d455c/kernel

你会看到下面的内容

Aieeee, this is the SOURCE directory! -------------------------------------1. Run make BUILDDIR=<absolute path of nonexisting directory>2. Chdir to the build directory!3. Verify the settings in Makeconf.local!4. Run make menuconfig or make xconfig!5. Run make again! 


按照这个做就行了。需要注意的是在第4步中,主要是一些选项,如果你只是急于看到内核跑起来是什么样子的,默认就行了。而且,你勾选的太多会使内核变得很大。 

第二步:编译用户工具(user) 

除了内核之外,还需要一些user-level的工具,编译之。主要是下面几步:

1.mkdir l4ka-pistachio/x86-x32-user-build2.cd l4ka-pistachio/x86-x32-user-build3.../user/configure 4.make  5.make install

编译过内核的都知道,源代码和编译的结果不会放在一个文件夹下面,否则会很乱。所以都会新建一个目录,用来存放编译的结果。上面的意思是首先新建一个目录,然后cd到这个目录,最后调用源代码文件(../user)的congfigure,接着make,make install。 

这里第一个需要注意的地方是,如果阅读user文件夹中的READMEINSTALL就会了解,在congfigure之前,要cd到源代码目录(../user),执行下面两个命令 autoheader 和 autoconf。如果没有这两个工具,安装之。 为了省去一行行输入gcc或g++进行编译的麻烦,我们常把一些编译命令和配置写在makefile文件中,然后执行make命令,但makefile的编写,也是很蛋疼的,所以就有了关于makefile的自动工具。。。

第二个需要注意的地方是configure的参数 ,建议如此写 path/user/configure –prefix=/absolute path/user-install –with-kerneldir=../x86-kernel-build 其中–prefix的作用是把你编译生成的一些可运行程序都放在user-install 目录,要不然,嘿嘿你就蛋疼地要一个一个找它们出来。 –with-kerneldir:你的user-level工具是基于l4ka内核的,必然需要知道l4ka放在什么位置,才好编译通过。

第三步:汇总 

你主要得到了这么几个程序

kickstart — 这是一个功能比较丰富的引导程序,将内核的其他部分load进来,初始化kernel interface page等等。 

sigma0 — 负责初始化address space 

pingpong — 一个测试IPC的程序

以及x86-kernel ,grabmem,l4test等 

第四步:创建软盘镜像

使用bximg创建一个floppy.img。在命令行输入bximg,看提示输入即可。 

第五步:挂在img

losetup /dev/loop0 floppy.imgmke2fs /dev/loop0 mkdir /mnt/l4kachmod 777 /mnt/l4ka mount /dev/loop0 /mnt/l4ka 

第六步:拷贝内核文件

把编译内核的那些程序统统拷到 /mnt/l4ka下面。至少要包括 kickstart,x86-kernel ,sigma0,pingpong。

第七步:使用grub引导 

内核要是想跑起来,需要有个引导程序,不妨使用grub吧。 

首先,拷贝grub使用的一些策略文件:

mkdir -p /mnt/boot/grubcp /boot/grub/stage1 /mnt/boot/grubcp /boot/grub/stage2 /mnt/boot/grubcp /boot/grub/e2fs_stage1_5 /mnt/boot/grub (不是必须的) 


接着,在/mnt/l4ka/boot/grub下创建menu.list,其中的内容如下 

timeout 5title l4kakernel /kickstartmodule /x86-kernelmodule /sigma0module /pingpong    boot 


最后,要把grub写进软盘(即img),大家应该知道引导程序(boot strapper)一般在第一个扇区(512字节),所以要想能让floppy.img 是一个可以启动的磁盘,那么就应该在它的第你一个扇区写点东西。当然grub能做更复杂的事情,但是这不用你纠结,你只需要敲这么结果命令就Ok了

sudo grub --device-map=/dev/null 进入grub交换界面grub> device (fd0) /dev/loop0 把loop0映射成fd0,即一个软盘grub>root (fd0) 识别硬盘和文件格式,学会使用tab自动补全grub>setup (fd0) 安装grub到制定地方 


如果你想看看到底发生了什么,使用下面的命令 

dd if=floppy.img of=check.img bs=512 count=1 

截取floppy也即软盘fd0,第一个扇区的内容以供查看,要不然原文太大。

 

vim -b check.img

使用16进制查看,如果没有显示16进制,在vim的命令模式输入%!xxd,稍等片刻便会看到。

我们这是要看什么呢,有什么好看的?我们要看它的第一扇区(512字节)里面前后的变化,特别是最后两个字节(510,511处),如果引导程序设置成功,最后两个字节应该是55aa。这是规定,如果不是,那么你用虚拟机启动定会看到”no bootable device” 

第八步:写bochs配置文件bochsrc 

config_interface: textconfigromimage: file=/opt/bochs-2.5.1/bios/BIOS-bochs-latestmegs: 32vgaromimage: file=/opt/bochs-2.5.1/bios/VGABIOS-lgpl-latest# what disk images will be usedfloppya: 1_44=floppy.img, status=insertedboot: floppylog:bochsout.txtmouse: enabled=0keyboard_mapping: enabled=1, map=/usr/share/bochs/keymaps/x11-pc-us.map 

注意:我的bochs是我自己编译安装在/opt下面的,注意更改你们的路径

第九步:运行

bochs -f bochsrc

如果成功运行会看到下面截图中的内容

注:使用虚拟机的时候按下ctrl+alt+3或者其他的快捷键,才会输入下面的内容。