L4Ka

http://www.unixresources.net/linux/clf/school/archive/00/00/57/78/577871.html
在坛子上看到BNN老兄发起的中国微内核研究小组的事情,然后又到yahoo group中看了一下,发现大家的热情不高,帖子数目也比较小,而且大多集中在 L4安装,启动等一些人们的问题上。小弟虽然没有参加这个小组,但是关注L4也已经有一段时间了,因此想把自己对于L4的一些了解写出来,也给后来的兄弟一个指导。
平台:Debian sarge + gcc 3.3.5 + bochs 2.1.1
1.编译L4
从www.l4ka.org下载pistachio的0.4版本,解压缩。解压后的文件夹为pistachio-0.4。
cd pistachio-0.4/kernel
make BUILDDIR=$(pwd)/../ia32-kernel-build
这个时候,会在pistachio-0.4目录下生成ia32-kernel-build
cd ../ia32-kernel-build
make menuconfig
make
我想这个步骤对于编译过内核的兄弟们应该不会陌生。我使用的编译完成以后,会在ia32-kernel-build目录下生成ia32-kernel。这就是 L4 pistachio的内核

2.编译其他程序
L4的微内核只负责 IPC 和 Address space的功能,其他的功能需要由其他的server来做,因此,除了内核外,我们还必须编译其他的server。
mkdir pistachio-0.4/ia32-user-build
cd pistachio-0.4/ia32-user-build
../user/configure
make
这个时候,会在ia32-user-build的子目录下生成几个可执行文件。我们只需要其中的几个就可以启动了(至少2个,必须包括kickstart)。
kickstart:grub引导后执行的第一个程序,它是用来将其他的部分load进来,初始化kernel Interfac page,并且调转到ia32-kernel的人口部分执行。kickstart在ia32-user-build/util/kickstart目录中
sigma0:在ia32-user-build/serv/sigma0目录中,负责初始化adress space。
pingpong在ia32-user-build/apps/bench/pingpong目录下,是一个测试IPC的程序。

3.安装bochs
在debian下使用apt-get install bochs 就可以了。

4.生成bochs 使用的软盘img文件
dd if=/dev/zero bs=512 count =2880 of=floppy.img
这个时候会在当前目录下生成 一个floppy.img文件,大小为 512字节/扇区*2880扇区=1474560字节。大小和1.44M的软盘容量一致,不过其中的内容全部是空。
5.copy内核到img文件
(1)使用回环设备
losetup /dev/loop1 floppy.img
(2)在floppy.img生成ext2文件系统。注意这里对/dev/loop1 的操作就等于对floppy.img的操作
mkfs /dev/loop1
(3)将/dev/loop1 挂载到本地
mount -o loop /dev/loop1 /mnt/flp
(4)新建目录
mkdir -p /mnt/flp/boot/grub
(5)copy内核文件,假设当前目录为pistachio-0.4
copy ia32-user-build/ia32-kernel /mnt/flp/boot
copy ia32-user-build/util/kickstart/kickstart /mnt/flp/boot
copy ia32-user-build/serv/sigma0/sigma0 /mnt/flp/boot
copy ia32-user-build/apps/bench/pingpong/pingpong /mnt/flp/boot

6.安装grub
(1)copy安装GRUB启动所需要的stage1和stage2文件。这两个文件在一般在/boot/grub或者/usr/share/grub或者/usr/local/share/grub/"等目录下可以找到。在debian下可以在/boot/grub下找到
cp /boot/grub/stage1 /boot/grub/stage2 /mnt/flp/boot/grub/
(2)创建grub配置文件
vi /mnt/flp/boot/grub/menu.lst
内容为:
timeout 5
title l4
kernel /boot/kickstart
module /boot/ia32-kernel
module /boot/sigma0
module /boot/pingpong
boot
(3)umount设备
$ umount /mnt/flp

(4)在img中安装grub
grub --device-map=/dev/null
grub> device (fd0) /dev/loop1
grub> root (fd0)
grub> setup (fd0)
grub> quit

(5)detach回环设备
losetup -d /dev/loop1

到这里,可以在bochs中启动的印象文件就做好了。
7.配置bochs
在目录下新建.bochsrc文件
内容如下:
romimage: file=/usr/share/bochs/BIOS-bochs-latest, address=0xf0000
megs:16
vgaromimage:ile=/usr/share/bochs/VGABIOS-lgpl-latest
floppya: 1_44="floppy.img", status=inserted
boot:a
log:bochsout.txt
ips:1000000
display_libaray: term

这里需要注意几个问题
(1)如果在目录/usr/share/bochs找不到 BIOS-bochs-latest和VGABIOS-lgpl-latest,那么需要安装这两个文件。在debian下apt-get install bochsbios。或者从其他地方拷贝过来也行。本帖子附件中上传了这个两个文件。
(2)display_libaray: term 这个参数可以有很多选项,具体含义见bochs用户手册。这里需要说明的是如果出现找不到X server等错误的时候,可能是因为display_libaray指定的库没有安装好,需要自己安装。比如term库,在debian下使用apt- get install bochs-tern 就可以了。
设置好了以后,键入命令bochs,这样bochs就运行起来了。

8.其他
如果以后需要修改floppy.img中的内容,只需要做如下步骤:
(1)创建和attach回环设备到img文件,并且mount到本地目录

losetup /dev/loop1 floppy.img
mount -o loop /dev/loop1 /mnt/flp
(2)做修改。所有的修改都是对/mnt/flp,也就是对floppy.img做修改
(3)umount设备和撤除回环设备
umount /mnt/flp
losetup -d /dev/loop1

我们还可以使用命令dd if=floppy.img of=/dev/fd0 将floppy.img中内容拷贝到真正的软盘中去,然后通过软盘在实际的机器上启动L4。

如何安装L4就是这样的,以后会和大家分享如何调试,开发自己的L4微内核。


PS:
注意,以上步骤是一般的步骤,但是由于 bochs缺少对 4 MB superpages 的支持,因此直接在bochs中运行会出错,bochs会一直重启。需要一个patch。
具体见
http://home.kamp.net/home/farid.hajji/l4ka-bochs/

不知道最新的bochs是否已经支持 4 MB superpages 了。我还没有试验
----
http://mail.ustc.edu.cn/~ncs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值