Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12399
  • 博文数量: 2
  • 博客积分: 128
  • 博客等级: 入伍新兵
  • 技术积分: 45
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-21 00:02
文章分类

全部博文(2)

文章存档

2011年(2)

我的朋友

分类: LINUX

2011-09-11 15:28:02

在物理机器上运行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) |
0

上一篇:GNU C中的嵌入式汇编

下一篇:没有了

给主人留下些什么吧!~~