转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> SyBase >> 正文
从源代码打造一个最小化的Linux系统实作指南(转)         ★★★★

从源代码打造一个最小化的Linux系统实作指南(转)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1431 更新时间:2009/4/22 23:08:21

从源代码打造一个最小化的Linux系统实作指南 
作者:Greg O"Keefe, gcokeefe@postoffice.utas.edu.au 
译者: 梁昌泰 linuxrat@gnuchina.org 
v0.8, Sep 2000 翻译日期: 2001年01月第0.8版 


    以下就是从源代码中打造一个最小化的Linux系统的操作说明.它曾经是《从加电启动到Bash提示符(From PowerUp to Bash Prompt)》的一部分.但是我将它们分离开来,以便使得它们更简短而更为集中化.我们在此所要打造的系统是非常小的,而且并不准备作为工作产品来使用.如果您想从头开始打造一个有实际用途的系统,请参阅Gerard Beekmans所撰写的 Linux空手道实作指南篇 (Linux From Scratch HOWTO)。


    1. 您所需要具备的条件 

    我们首先要安装一个Linux发行套件比如小红帽(RedHat)到一个分区上,然后使用它来在另一个分区上打造一个新的Linux系统.我将我们所要打造的系统称为目标系统(target)而把我们所使用来打造新系统的系统称为源头系统(source).可别把这个源头(source)系统同我们同时使用的源码(source code)相混淆了哦.:) 

    因此,您得需要一台具有两个独立分区的机器.如果可能,请尽量使用一台没有重要资料在里头的机器,以免数据受损.您可以使用一个已经存在的Linux系统作为源头系统,但是我并不推荐这种方式.如果您不慎遗漏了我们打造的指令的某些参数,您有可能会意外地在这个系统上安装了一些没有必要的东西,有可能会导致不兼容和冲突。

    旧型的PC机硬件,大部分的486机器或者更早的机型,其BIOS都有一些极其烦人的限制.它们没有办法读取硬盘超过前512兆之后的空间.当然,这个对于Linux来说并不是什么大问题,因为只要Linux能够引导启动了,将使用Linux自己的磁盘IO,略过BIOS的调用.但是为了能够让这些旧型机器能够引导Linux,那么Linux内核必须存放在硬盘的前512兆之前的某个位置.如果您正好有这么个旧型机器,您得准备好一个独立的且完全在前512兆范围内的硬盘分区,并将其挂载为/boot.其它的分区就可以在任何位置,可以任意处理而不必担心是在硬盘的什么位置了。

    上一次我打造这个系统时,所使用的源头系统是小红帽6.1(RedHat 6.1),我安装了基本系统,附加有以下软件包∶ 


    * cpp (C++编译器) 
    * egcs (增强型C编译器) 
    * egcs-c++ (增强型C++语言编译器) 
    * patch (打补丁程序) 
    * make (编译批处理解释器) 
    * dev86 (设备文件包) 
    * ncurses-devel (ncurses库开发包) 
    * glibc-devel (glibc库开发包) 
    * kernel-headers(内核源码头文件包) 


    我还安装了X Window视窗系统和Mozilla网络浏览器以便更轻松地阅读文档,而实际上这两个东东并不是必要的.在我竣工之时,这个源头系统大概使用了350兆的磁盘空间(看起来是多了一些,可是我还在纳闷为什么呢)。 

    竣工之时的目标系统占用了650兆磁盘空间,但是这个数值包含了所有的源码以及中途打造出来的文件.如果空间比较紧凑,您应该在每个软件包都打造完毕之后执行一下make clean来清除临时文件.当然了,我对这个也是有点吃惊的。

    最后,您的准备好我们所要用来打造系统的源码包.这些就是我在本文所讨论的软件包.这些软件包都可以从源码盘里面找到,或者从国际互联网上找到.我会给出美国的站点和位于澳大利亚的镜像站点的地址。


    * MAKEDEV (设备生成器包) 
      美国站点:ftp://tsx-11.mit.edu/pub/linux/sources/sbin 
      另外一个美国站点:ftp://sunsite.unc.edu/pub/Linux/system/admin 
    * Lilo (Linux引导器包) 
      美国站点:ftp://lrcftp.epfl.ch/pub/linux/local/lilo/ 
      澳大利亚: ftp://mirror.aarnet.edu.au/pub/linux/metalab/system/boot/lilo 
    * Linux内核包(Kernel) 使用 主页上所列举的镜像站点而最好不要使用美国站点站点下载,因为这些站点通常是超负荷运转的。 
      美国站点:ftp://ftp.kernel.org/pub/linux/kernel 
      澳大利亚站点: ftp://kernel.mirror.aarnet.edu.au/pub/linux/kernel/ 
    * GNU libc库包 其本身,以及liuxthreads线程附加库可在以下地址下载到∶ 
      美国站点:ftp://ftp.gnu.org/pub/gnu/glibc 
      澳大利亚站点:ftp://mirror.aarnet.edu.au/pub/gnu/glibc 
    * GNU libc附加库包 您可能还会需要linuxthreads线程附加库和libcrypt加密附加库. 如果libcrypt没在那个站点找到,那就是因为美国出口法律限制的原因, 那么您就可以从这里弄到libcrypt加密附加库. 通常linuxthreads 线程附加库跟libc库是放在同一个地方的.libcrypt加密附加库:ftp://ftp.gwdg.de/pub/linux/glibc 
    * GNU ncurses 
      美国站点:ftp://ftp.gnu.org/gnu/ncurses 
      澳大利亚站点:ftp://mirror.aarnet.edu.au/pub/gnu/ncurses 
    * SysVinit (初始化脚本包) 
      美国站点:ftp://sunsite.unc.edu/pub/Linux/system/daemons/init 
      澳大利亚: ftp://mirror.aarnet.edu.au/pub/linux/metalab/system/daemons/init 
    * GNU Bash (命令解释器包) 
      美国站点:ftp://ftp.gnu.org/gnu/bash 
      澳大利亚站点:ftp://mirror.aarnet.edu.au/pub/gnu/bash 
    * GNU sh-utils (命令解释器工具包) 
      美国站点:ftp://ftp.gnu.org/gnu/sh-utils 
      澳大利亚站点:ftp://mirror.aarnet.edu.au/pub/gnu/sh-utils 
    * util-linux (Linux常用工具包) 本软件包包含有agetty和login。 
      另外一个站点:ftp://ftp.win.tue.nl/pub/linux/utils/util-linux/ 
      澳大利亚站点:ftp://mirror.aarnet.edu.au/pub/linux/metalab/system/misc


    总结一下,您所需要的就是∶ 
    * 一台具有两个分别是400兆和700兆独立分区的机器,或许您可能会需要少一些.。
    * 一个Linux发行套件(譬如一个RedHat光盘)和安装方式(譬如一个光驱) 
    * 以上所列举的源码的tar包。

    我假定您可以自己安装源头系统,而用不着我来帮忙.从这里开始,我假定源头系统已经安装好了。

    本小项目的第一个里程碑就是使得内核启动起来然后死翘翘,因为它没找到init初始化程序.也就是说我们得安装一个内核和安装lilo.为了顺利安装lilo,我们要用上在目标系统上/dev目录下的设备文件.lilo需要它们来实现底层必需的磁盘存取来写入引导扇区.MAKEDEV正是用来创建这些设备文件的脚本程序(您当然可以只需要从源头系统当中复制出来,不过这可是作弊不劳而获哦).但是最重 
要的事情就是,我们需要一个文件系统来放置所有的这些东西。


    2. 文件系统 

    我们的新系统是要安装在文件系统上的.因此首先我们得使用命令mke2fs来创建文件系统,然后将其挂载到某个地方.我建议是挂载到/mnt/target这个目录上.接下来的操作中,我假定就用这个目录了.为了节省您的宝贵时间,您可以在/etc/fstab文件里面添加上这一项,以便每次源头系统启动的时候就能够自动将这个目录挂载上。

    当我们启动了目标系统,放置在/mnt/target上的所有东西就会被当成了放置在/根目录上。


    我们需要在目标系统上建立固定的目录结构.请参阅"文件层次结构标准(简称FHS,File Heirarchy Standard)",见于 文件系统一节来了解详情,或者只需要cd切换目录到目标系统所挂载的地方然后尽管执行以下命令∶


    mkdir bin boot dev etc home lib mnt root sbin tmp usr var 
    cd var; mkdir lock log run spool 
    cd ../usr; mkdir bin include lib local sbin share src 
    cd share/; mkdir man; cd man 
    mkdir man1 man2 man3 ... man9 

    因为FHS标准和大部分的软件包在手册页(man page)放置位置上的处理并不一致,因此我们需要做一个符号连接∶ 


    cd ..; ln -s share/man man 


    3. MAKEDEV(设备生成器) 

    我们要把源代码放置到目标系统的/usr/src目录下面.因此,举个例子吧,如果您的目标系统是挂载在/mnt/target这个地方,且您的tar包是放在/root里面,那么您要做的就是∶ 


    cd /mnt/target/usr/src 
    tar -xzvf /root/MAKEDEV-2.5.tar.gz 

    然后就把这些tar包复制到您要解开它们的地方就行了.千万别迷糊了哦.;-> 

    当您安装软件的时候,通常情况下您会把它们安装在正在使用的系统上.但是我们并不想这么做,因为我们是要把/mnt/target当做根文件系统(root filesystem),就是要把这些软件安装到这个地方.不同的软件包有不同的处理方式.比如说MAKEDEV设备生成器包,您要做的是∶ 

    ROOT=/mnt/target make install 

    您得先在这个包当中的README说明文件和INSTALL安装说明文件当中查出这些选项,或者执行命令./configure --help查看帮助说明。

    查看一下MAKEDEV包当中的Makefile文件,看看它是怎样处理我们在命令行当中设置的ROOT变量的.接着通过执行man ./MAKEDEV.man来查看一下它的手册页,看看它是怎么起到作用的.您会发现生成我们自己的设备的方式就是执行cd /mnt/target/dev然后./MAKEDEV generic.请使用ls命令来看看它都为我们生成了哪些设备文件吧。


    4. 内核 

    下一步就是生成内核了.我假设您以前是做过编译内核这种事的,所以我就长话短说了.如果要启动的内核已经准备好的话,那么要安装lilo就会更容易.请返回到目标系统的usr/src目录,然后在那儿解开Linux内核源码.进入Linux源码树(cd linux)然后使用您最喜欢的方式配置内核,比如make menuconfig.如果您想让自己的轻松一些,那么您可以为自己配置一个没有模块的内核.如果您已经 
配置了模块,那么您就得编辑Makefile文件,找出INSTALL_MOD_PATH并将其设置为/mnt/target. 

    现在您可以执行make dep,make bzImage了.如果您设置了模块项,可以再执行make modules,make modules_install.把内核映象文件arch/i386/boot/bzImage和系统函数映象文件System.map复制到目标系统的boot启动目录/mnt/target/boot下面,然后准备安装系统引导器lilo了。

    5. Lilo系统引导器 

    Lilo包里面带有一个很小巧的脚本,名叫QuickInst.请把lilo源码包解压到目标系统的源代码目录/mnt/target/usr/src下面,然后执行该脚本,方法是∶ROOT=/mnt/target ./QuickInst.它会询问您一些关于您想怎样安装lilo的问题。

    切记∶因为我们已经设置ROOT根系统为目标系统分区了,所以您回答提问时所给出的文件名同它是密切相关的.比如当它询问您默认想启动哪个内核的时候,您的回答应该是/boot/bzImage,而并不是/mnt/target/boot/bzimage哦.我发现这个脚本里面有个小错误,它会提示说∶ 


    ./QuickInst: /boot/bzImage: no such file 

    但是您甭理这个提示就是了,不会有事的。

    我们该让QuickInst把引导扇区(boot sector)放在何处为妥呢?当我们重启时,我们希望可以选择引导进入源头系统或者目标系统或者其它共存于同一台机器的其它系统.而且我们还希望我们要使用所编译的lilo来引导我们新系统的内核.我们怎么把这两件事情合而为一呢?让我们先跑一小会儿题,看看lilo在一个双重启动的Linux系统上是怎样引导DOS的.在这样的一个系统上的lilo.conf文件的 
内容看起来可能会跟下面的差不多∶ 


    prompt 
       timeout = 50 
       default = linux 

       image = /boot/bzImage 
              label = linux 
              root = /dev/hda1 
              read-only 

       other = /dev/hda2 
       label = dos 


    如果机器是这么安装起来的,那么主引导记录(MBR,master boot record)就可以被BIOS读取并加载,然后MBR加载lilo启动引导器,而后者则给出一个提示.如果您在提示后面输入dos,lilo就会从hda2加载引导记录,就加载了DOS。

    我们所要做的事情跟上头是一样的,除了在hda2的引导记录应该是另外一个lilo引导记录之外,也就是在QuickInst所询问要安装的那个.因此来自Linux发行套件的lilo会加载我们所编译安装的lilo,然后我们所编译安装的lilo就会加载我们所编译安装的内核.当您重启后,您会看到两次lilo的提示。

    长话短说,当QuickInst询问您该把引导扇区(boot sector)放到什么地方时,您就回答目标系统所在的分区,比如说是∶/dev/hda2. 

    现在来修改您的源头系统上的lilo.conf配置文件,那么看起来会有点像这个样子∶ 

    other = /dev/hda2 
                 label = target 

    修改完毕,接着执行lilo安装LILO.我们应该可以第一个引导进入目标系统了。


    6. Glibc库 

    下一步我们要安装init,但是同运行在Linux上几乎全部的程序一样,init使用了GNU C语言库glibc所提供库函数,因此我们先得把这个东东安装上。&nbs

[1] [2]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台