在物理机器上运行barrelfish分为三个步骤:
1)创建U盘引导盘
2)拷贝目标程序
3)启动系统
下面依次介绍这三个步骤:
1)创建U盘引导盘:
a. 在Linux系统下,插入U盘设备。假如U盘的设备节点为/dev/sdb1,挂载点为/mnt。
挂载U盘到文件系统某一个目录:sudo mount /dev/sdb1 /mnt
这里U盘被挂载于系统根目录下的mnt文件夹。在/dev目录下还有一个sdb节点,注意挂载的时候不要挂成sdb。
tips:需要说明的是,U盘设备必须有分区才能安装成功grub。需要将U盘进行分区操作,这里将整个U盘作为一个分区处理。方法有二:
一,通过Linux(Ubuntu)系统下的启动盘创建器“格式化磁盘”,格式化完毕后系统会出现sdb,sdb1两个设备节点,挂载sdb1即可。
二,使用磁盘实用工具格式化驱动器,格式化方案为主引导记录,然后点创建分区即可。
这里sdb1就是U盘的唯一一个分区,用作grub的根分区。
b. 然后在U盘上安装grub,命令如下:
sudo grub-install --root-directory=/mnt '/dev/sdb'
注意,这里是'/dev/sdb',而非'/dev/sdb1'。指的是在整个U盘设备上安装grub,而U盘的第一个分区(唯一分区)作为根(root-directory)。如果系统中没有grub-install程序,可以在线安装:
sudo apt-get install grub
继续,在/mnt/boot/grub目录下创建menu.lst文件,其内容可以如下:
timeout 3
default 0
title Barrelfish
root (hd0,0)
kernel /x86_64/sbin/elver loglevel=4
module /x86_64/sbin/cpu loglevel=4
module /x86_64/sbin/init
# Domains spawned by init
module /x86_64/sbin/mem_serv
module /x86_64/sbin/monitor
# Special boot time domains spawned by monitor
module /x86_64/sbin/chips boot
module /x86_64/sbin/ramfsd boot
module /x86_64/sbin/skb boot
modulenounzip /skb_ramfs.cpio.gz nospawn
module /x86_64/sbin/pci boot
module /x86_64/sbin/spawnd boot
#bootapic-x86_64=1-15
# General user domains
module /x86_64/sbin/serial
module /x86_64/sbin/fish
这里创建了一个启动项“title barrelfish“,接下来grub运作的根文件系统是U盘的第一个分区,“root (hd0,0)”。grub的分区命名方式与Linux稍有区别。grub将所有硬盘统一命名为hd打头的名称,后跟一个数字表示磁盘的序号,该数字从0起始,如系统中的第一块硬盘设备为hd0,第二块硬盘设备为hd1,第三快硬盘设备为hd2,依次类推,无论是IDE硬盘还是SATA硬盘,这里U盘当作硬盘对待。同样,对于硬盘上的分区命名也是从0开始,0,1,2,3为4个基本分区,从4开始为扩展分区。在Linux系统下,硬盘的命名中区分并行接口和串行接口,并行接口(IDE)硬盘的名称以h打头,串行接口(SATA,U盘)硬盘的名称以s打头。硬盘的序号由字母表示,该字母从a起始,如系统中的第一快硬盘为hda,第二块硬盘为hdb,这里U盘在Linux系统下为第二块串行接口硬盘,所以为sdb(如果本地硬盘是hda的话,U盘就可能是sda)。至于Linux下硬盘分区号,则是用数字表示,且起始数字为1。1,2,3,4为4个基本分区,从5开始为扩展分区。这里的(hd0,0)表示的分区等价于前面在Linux下的sdb1,表示U盘上的第一个分区,需要说明的是U盘启动系统,U盘被识别为hd0。
交代清楚grub的根分区之后,就要给出grub要引导的目标程序,这里为U盘第一个分区根目录下的“x86_64/sbin/elver“, logleve=4为grub传给elver的参数。这里elver是barrelfish的引导程序,为什么不直接用grub引导barrelfish呢,因为这里grub没有支持64位系统,而barrelfish需要64位系统的环境支持,所以就迂回了一下,先引导elver,然后elver开启cpu的64位支持。当然,如果为grub打补丁的话也可以实现64位支持。除了交代出elver为引导目标程序外,还有一些module依次被load到内存,这些工作都有grub完成,它们的路径在menu.lst也依次给出。当这些代码都load进内存之后,grub就将控制权交给所谓的kernel,也就是elver,然后elver接管cpu的控制权,设置好barrelfish的运行环境之后,启动barrelfish的kernel(/x86_64/sbin/cpu),至此barrelfish成功启动。
2) 拷贝目标程序
以上是如何创建U盘引导盘,以及grub的引导过程。那么目标程序(kernel,module)如何拷贝到U盘里面呢,根据menu.lst里面的设置项,这里只需要将这些目标程序拷贝到U盘第一分区相应的目录即可。例如elver拷贝到U盘第一分区根目录下的的x86_64/sbin目录,skb_ramfs.cpio.gz在第一分区根目录。
3) 启动系统
在系统启动的开始阶段,进入bios将u盘设为默认启动系统,然后F10,保持设置,重新启动机器,grub启动,默认进入barrelfish启动项,即可启动elver,然后引导barrelfish启动。
注:以上说的是U盘启动,硬盘启动的设置方法类似。
阅读(1044) | 评论(0) | 转发(0) |