歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

輕量LINUX:利用舊硬件打破軟硬件升級周期

 

 策略與建議  我計劃將這台便攜式電腦用於寫作以及遠程訪問我的功能更強大的桌面開發系統。因此,我需要系統具有網絡支持、shell、象 vi 這樣的文本編輯器、用於文檔版本控制的 CVS 以及用於安全遠程訪問的 SSH。在資源方面,我有 12 MB 內存和 540 MB 硬盤可以使用。    因為進入了我還未完全研究過的領域,所以我選擇了有許多小裡程碑的途徑。我在本文中采用了這種方法。經常出現的裡程碑幫助我確定是否在解決問題方面有所進展;經常出現的裡程碑在某一步驟不象所宣稱的那樣有效工作時,可以幫助您調試過程。我在本文中有好幾處鼓勵您,即使在系統還未完成時,也不妨試用一下您的系統。這些測試可以幫助您判斷到那一點為止的工作是否正確。    我的第一點建議是不要考慮使用任何已建立的 Linux 分發版。我最初也希望通過安裝現有的 Linux 分發版來避免從頭開始工作。但很快發現它們都需要比可用資源更多的資源。即使 Slackware(長久以來一直以支持低內存系統著稱)也至少需要 12 MB 內存才能安裝分發版,即使在那樣的情況下也工作得非常勉強。    在著手構建系統之前您可能需要考慮的一個可能性是從現有的“單磁盤” Linux 分發版 — 如 tomsrtBT(單磁盤應急軟盤分發版)、Trinux(單磁盤 Linux 安全性工具箱)甚至 Tin Foil Hat Linux(被設計用於加密、簽名和擦除文件的安全 Linux 分發版)— 開始,然後對其進行擴展。    在正式開始構建自己的系統以前,我研究了幾個這樣的迷你分發版本並從中學到了很多。盡管我研究的分發版中沒有一個是專門面向資源有限的硬件(比如我的便攜式電腦)的,但它們的確都有一個共同目標 — 將盡可能多的功能塞進盡可能小的空間。盡管它們為實現這一目標所做的許多權衡對我來說是不可接受的,但我注意到了 UClibc 和 BusyBox,最終我使用了這兩者。    uClibc  每個 Linux 系統都需要一個 C 庫。C 庫提供了常用的文件操作(打開、讀和寫)、內存管理操作(malloc 和 free)和許多其它使一個 Linux 系統名副其實的函數。大多數 Linux 系統使用 Glibc。Glibc 是成熟的、經過良好測試的,並且正在積極的開發中。遺憾的是,它使用的內存數量相對也較多,對於我的機器來說是不可接受的。    我並不建議使用 Glibc,而建議使用 uClibc,這是一個現代的、穩定的、具有高度兼容性的 Glibc 替代品。uClibc 是針對嵌入式系統開發的,所以它力圖成為完整但輕量級的 C 庫。速度與大小之間的權衡最後由大小決定。盡管如此,在絕大多數情況下,針對 uClibc 編譯的應用程序和工具與針對 glibc 編譯的沒有分別。uClibc 網站(請參閱參考資料)列出了超過一百個已知或已得到報告使用 uClibc 的應用程序。該列表包括象 Gzip 和 Lilo 這樣的標准實用程序,以及象 Lame(mp3 編碼器)和 Freeswan(VPN 實現)這樣不太常用的實用程序。因為我通過運行在系統上的工具和應用程序的成熟度來衡量一個系統的有效性,所以對我來說,我選擇的 C 庫能支持我需要的工具是很重要的。    Dietlibc 是另一個可替代 Glibc 的 C 庫。我的研究表明:盡管 Dietlibc 需要的內存比 uClibc 更少,但它是通過犧牲與 Glibc 的兼容性實現這一點的。最後,我選擇使用 uClibc,因為它看起來能支持更多我需要使用的應用程序。    BusyBox  Linux 系統用戶需要一個由數量豐富的命令行工具集組成的工作環境。因為逐一構建所有必需的工具似乎是一個很耗時間的任務,所以我再次借用嵌入式系統的經驗,選擇了 BusyBox,這是一個“樣樣皆通”的應用程序,它在一個二進制文件中提供了您希望在 Linux 系統中看到的大多數工具的實現。    通過使用 BusyBox,我保留了寶貴的資源並節省了大量的時間投入。我找不到象它這樣的其它工具集。     組成部分及准備工作  要繼續下去,您需要有權使用一個現有 Linux 系統 — 最好該系統運行所用的微處理器與您目標系統的是同一系列。一台運行 Linux 的老式便攜式電腦是用於編寫和編輯的極佳環境,但在編譯軟件包時它是無法與現代硬件競爭的。我們將使用現有的 Linux 系統來構建內核及支持軟件,並創建引導目標系統進入 Linux 所必需的磁盤。將 Linux 安裝在目標系統上之後,在把完成的產品轉移到目標系統之前,我們將繼續使用現有的系統來構建應用程序。我把現有的 Linux 系統稱為“構建系統”,把另外那個 Linux 系統稱為“目標系統”。    首先下載以下軟件包(請參閱參考資料以獲得鏈接):    linux-2.4.19.tar.gz(內核)   uClibc-0.9.15.tar.gz(C 庫)   busybox-0.60.4.tar.gz(有用的命令行工具)   util-linux-2.11u.tar.gz(fdisk 可執行文件)   e2fsprogs-1.27.tar.gz(用於文件系統的創建)   lilo-22.3.2.tar.gz(引導裝入程序,boot loader)     為了用 uClibc 構建和鏈接 BusyBox,您需要在目標系統的 /usr 目錄中安裝 uClibc 開發環境,因此您需要對該目錄的寫訪問權。    該過程的一部分包含構建一個簡單的根文件系統。我通過提供合適的根文件系統框架簡化了這一步驟,同時提供的還有必需的配置文件和設備文件。您可以從參考資料下載該文件框架 skeleton.tar.gz。    您需要閱讀並理解必要的文檔,其中包括 README 和 INSTALL 文檔。由於有太多的選項和特殊情況,所以無法在本文中介紹所有的排列組合。在以下幾節中,我介紹了我推薦的配置。    讓我們來構建內核。    構建 Linux 內核  構建一個有效的 Linux 內核而不更改缺省配置是可能的。但幾個經過慎重考慮的更改將產生更適合我們需要的系統。特別地,我始終記得網絡連接的需求。下表列出了我更改的選項,並就您可能希望對系統作的更改提出了建議。    內核配置  

 




  注:便攜式電腦聯網可能需要 PCMCIA 支持。較舊的便攜式電腦不能支持較新的 Cardbus(32 位)卡,但那通常不成問題,因為仍有許多 16 位網卡有售。如果您計劃通過電纜連接到網絡,則需要在“PCMCIA network device support”下選擇合適的驅動程序,這沒有包括在上表中。我使用無線連接。許多 16 位 PCMCIA 卡使用 Hermes 芯片組。您可能需要稍稍更改配置以符合您的 PCMCIA 控制器芯片組和 PCMCIA 卡。    應配置內核以專門支持您的 CPU。如果您在新機器上為較舊的機器構建內核,那麼需要選擇適當的處理器,如 Intel 386 或 486。為了節省空間,您可能要禁用您認為不需要的一切選項,特別是 SCSI 支持。    以下是構建內核的步驟:    make xconfig   make dep   make bzImage   make modules     稍後我將描述如何安裝內核。    構建 uClibc  構建 uClibc 比構建內核更有挑戰性。uClibc 軟件包構建兩個相關組件。第一個組件是支持您目標系統的實用程序和應用程序的運行時庫。第二個組件是一個開發環境。uClibc 開發環境使構建使用 uClibc 的實用程序和應用程序變得簡單,甚至在本身不使用 uClibc 的系統上也是如此。uClibc 創建並安裝用於 gcc 及相關工具的封裝器。一旦安裝了 uClibc 開發環境,您就可以針對 uClibc 而不是 glibc 來編譯並鏈接大多數應用程序。    uClibc 配置  

 

  上表中的這三個選項使構建和安裝象 SSH 和 NFS 這樣的軟件(如果您以後選擇這麼做的話)成為可能。您還需要指定 Linux 內核源文件的位置。    下面的步驟概述了如何構建 uClibc 軟件包。采用這些步驟的前提是您已將壓縮文檔解壓縮到名為 uClibc-0.9.15 的目錄中:    cd uClibc-0.9.15   ln -s ./extra/Configs/Config.i386 ./Config   編輯 Config 文件。啟用上表中指定的選項。   make     上面的指示信息假定您正為 Intel 微處理器構建 uClibc。如果您為別的微處理器構建 uClibc,則可在上面的步驟 2 中創建指向適當 Config 文件的鏈接。    make 命令構建軟件包。為了用 uClibc 編譯和鏈接其它實用程序和應用程序,您需要安裝開發環境。make install 命令安裝開發環境。    一旦安裝了開發環境,您就可以通過更改 PATH 環境變量,使用 uClibc 開發工具來替代標准的基於 Glibc 的開發工具,如下所示:    eXPort PATH=

/usr/bin:$PATH    一旦更改了 PATH 環境變量,您就會發現大多數開發命令(gcc、ld 和 ldd 等)如今指向 uClibc 封裝器。但是命令仍應照常工作。在構建下面的任何軟件之前正確設置 PATH 環境變量是非常重要的。    在我的 Redhat 7.3 系統上不能原封不動地構建 uClibc 的最新版本(版本 0.9.15)。用於定位 gcc 頭的技術在發行版本 0.9.12 時有了變化。如果在您的系統上不能構建 uClibc,可以應用本文參考資料一節中提供的 uclibc 補丁程序。它將以前的技術移植到 uClibc 的最新發行版。    稍後我將描述如何在引導盤和根文件系統盤上安裝運行時環境。    構建 BusyBox  如果有一個任務比其它任務更能簡化從頭構建 Linux 系統的過程的話,那就是構建和安裝 BusyBox 軟件包。BusyBox 是一個可執行文件,它提供許多其它常用命令行工具的功能,所有這些功能都合為一體。BusyBox 的文檔聲稱構建一個有效系統所需要的全部就是 BusyBox 和“/dev、/etc 以及內核”— 而且他們沒有開玩笑。    下表描述了您應對 Config.h 文件做的更改。    BusyBox 配置  

 

  確保您選擇 ASH 作為缺省 shell — 它是 BusyBox 中可用且最能兼容 Bourne 的 shell。它將運行大多數 shell 腳本,包括那些設置聯網所必需的腳本。    如果您啟用 NFS 掛裝支持,請注意告訴您必須用“-o nolock”選項掛裝的注釋,因為您極有可能不在運行 portmapper 守護程序。    您還必須更改 Makefile 並啟用大文件支持。將 DOLFS 設置為 true。    用 make 命令構建 BusyBox。     構建 Util-linux  Util-linux 是一組低層系統實用程序。我們對 fdisk 實用程序感興趣:我們需要它對便攜式電腦的硬盤進行分區。    Util-linux 易於配置和構建。輸入 configure 然後輸入 make。    構建 E2fsprogs  E2fsprogs 是用於創建和操作 ext2 和 ext3 格式的文件系統的實用程序集。一旦使用 fdisk 對硬盤分區後,則將使用 e2fsprogs 實用程序來創建文件系統。    以下是構建 E2fsprogs 軟件包的步驟。    mkdir build   cd build   ../configure --enable-elf-shlibs   make   make distribution_tar_file     最後一步中未記錄的 makefile 目標創建一個包含必需的庫和可執行文件的 TAR 文件。我們將在後面用該文件安裝軟件包。    構建 LILO  LILO 是 Linux 引導裝入程序。它負責裝入和啟動 Linux 內核。LILO 有替代品,如 GRUB。我選擇 LILO 是因為我對它及其配置最為熟悉。如果您覺得有風險,可以考慮使用替代品中的一個。    make 命令構建了 LILO。    創建引導盤  引導盤包含您先前構建的 Linux 內核。當您開機或復位系統時,將使用這個引導盤將內核裝入目標系統。    構建引導盤有幾種不同的方法。Linux 內核可以直接從軟盤引導(如果配置成這樣做的話)。然而,大多數 Linux 用戶通過引導裝入程序(如 LILO 或 GRUB)的幫助來引導系統。Boot Disk HOWTO(請參閱參考資料)描述這兩個方法和其它一兩個方法。我將描述如何構建我的基於 LILO 的引導盤版本。我推薦基於 LILO 的方法,因為它允許在引導期間向內核傳遞參數。這在處理較舊的硬件時非常重要,舊的硬件常常會受到麻煩的特性的困擾。在我的例子中,Linux 軟盤驅動器需要指定參數“floppy=thinkpad”,以便解決我的這一型號 ThinkPad 軟盤驅動器的問題。    LILO 方法需要在您構建軟件的系統上安裝 LILO 可執行文件以使引導軟盤可引導,因此必須安裝 LILO 才能繼續。如果您不能或不打算安裝 LILO,我建議您嘗試 Boot Disk HOWTO 中描述的創建引導盤的其它方法。    您必須具有 root 用戶身份以便執行以下操作:     將一張軟盤放入軟驅   mke2fs -N 24 -m 0 /dev/fd0   mount -o dev /dev/fd0 /mnt   mkdir /mnt/boot   mkdir /mnt/dev   cp -R /dev/null /mnt/dev   cp -R /dev/fd0 /mnt/dev   cp /boot/boot.b /mnt/boot     現在您必須將內核從 /arch/i386/boot 目錄復制到軟盤並設置 ramdisk 字。用您構建內核的目錄替代下面路徑中的 。    cp /arch/i386/boot/bzImage /mnt   rdev -r /mnt/bzImage 49152     為了制作引導軟盤,您必須運行 LILO。首先,創建名為 /mnt/bdlilo.conf 的 LILO 配置文件。我創建了一個具有以下信息的文件:    Lilo 配置  boot   =/dev/fd0  install  =/boot/boot.b  map    =/boot/map  read-write  backup  =/dev/null  compact  image   =/bzImage  label   =Linux  root   =/dev/fd0    以下命令將引導裝入程序復制到引導盤。    lilo -v -C bdlilo.conf -r /mnt     如果您夠勇敢的話,現在就可以嘗試從引導磁盤引導您的目標系統了。但您不會看到命令提示符,因為我們還遺漏了根文件系統盤,不過您可以感覺一下是否成功地執行了以上步驟。    創建根文件系統盤  如果您嘗試引導目標系統,隨著內核的各個部分被初始化,您將看到一行行熟悉的內核輸出。內核引導過程將以與下面相似的一行結束:    VFS: Insert root floppy disk to be loaded into RAM disk and press ENTER     我們在上一節創建的引導盤只擁有內核。為了創建有效的基於軟盤的 Linux 系統,我們需要一個完整的文件系統以及先前構建的 BusyBox 軟件。    在本文的參考資料一節中,我提供了一個鏈接,它指向一個包含文件系統框架的文件。該文件系統框架包含適當的目錄層次結構,並且還在 /dev 目錄中定義了足夠的設備以使您的系統能夠運轉。我們將把來自先前構建的軟件包的文件、庫和可執行文件添加到這個文件系統。    您需要具有 root 用戶身份才能執行以下操作:    將一張軟盤放入軟驅   dd if=/dev/zero of=/tmp/fsfile bs=1k count=4096   mke2fs -m 0 -N 2000 /tmp/fsfile   mount -t ext2 -o loop /tmp/fsfile /mnt   cd /mnt   tar xvzf     我們將把 uClibc 和 BusyBox 安裝到新的文件系統上。    cd   make PREFIX=/mnt install_target   cd   make PREFIX=/mnt install     將文件系統復制到磁盤就完成了這部分的操作。    cd ..   umount /mnt   dd if=/tmp/fsfile bs=1k gzip -v9 > /tmp/fsfile.gz   dd if=/tmp/fsfile.gz of=/dev/fd0 bs=1k     引導盤和根文件系統盤是您引導系統進入 Linux 所需的全部。接下來是將 Linux 安裝到便攜式電腦的硬盤上。    創建輔助盤  輔助盤保存對便攜式電腦的硬盤進行分區和構建文件系統所必需的工具。    將一張軟盤放入軟驅   dd if=/dev/zero of=/tmp/sufile bs=1k count=1440   mke2fs -m 0 -N 2000 /tmp/sufile   mount -t ext2 -o loop /tmp/sufile /mnt   cd /mnt     我們將把余下的工具和實用程序安裝到新的文件系統上。    cd   mkdir /mnt/sbin   cp fdisk/fdisk /mnt/sbin   cd /mnt   tar -xvzf /build/e2fsprogs-1.27-elfbin.tar.gz   cd   make ROOT=/mnt install     將文件寫到磁盤就完成了這部分的操作。輔助盤將象普通盤一樣掛裝,因此重要的是不要壓縮該映象。    cd ..   umount /mnt   dd if=/tmp/sufile of=/dev/fd0 bs=1k     現在您的三張軟盤上有了在便攜式電腦上安裝 Linux 需要的所有文件。    安裝 Linux  是享受您的勞動成果的時候了。將引導盤放入您目標系統的軟驅,然後打開電源。Linux 內核應進行引導。引導後它會要求您插入根文件系統盤。插入根文件系統盤。內核將把經過壓縮的文件系統從根文件系統盤裝入 ramdisk 並完成系統引導過程。下圖顯示了結果。    

圖 1. 引導內核



  

 

  

圖 2. 裝入根文件系統

  

  一旦 Linux 已經引導,就可以掛裝輔助盤並將文件從那個磁盤復制到 ramdisk 上的根文件系統。一旦復制了 fdisk、mke2fs、lilo 及其支持文件,您就可以著手在目標系統的硬盤驅動器上進行分區和構建文件系統了。    fdisk 是用於創建和操作分區表的菜單驅動的實用程序。它相對來說易於使用:m 打印可用命令,n 添加新的分區,p 打印分區表,而 w 則寫分區表然後退出。請查閱手冊頁以獲得更詳細的信息。    當對硬盤驅動器分區時,不要忘了添加一個交換(swap)分區。我建議創建一個大小為系統內存三到四倍的交換分區。    mke2fs 在分區上創建 ext2 或 ext3 文件系統。命令 mke2fs -j /dev/hda1 將在 /dev/hda1 上創建一個 ext3 分區。我建議使用較新的 ext3 文件系統而不是 ext2。日志記錄活動的額外代價換來的是增強的可靠性。    一旦對硬盤進行了分區並且構建了文件系統,就可以掛裝硬盤並將文件從基於 ramdisk 的根文件系統復制到新的文件系統。您需要但卻不在基於 ramdisk 的根文件系統上的文件只有 Linux 內核和 LILO 配置文件。您可以從先前創建的引導盤獲取這些文件。插入並掛裝引導軟盤,然後將內核及 LILO 配置文件復制到硬盤驅動器上。將二者都放入硬盤驅動器文件系統的 /boot 目錄中。將 LILO 配置文件重命名為 lilo.conf,然後編輯它,使它與下面的內容相似:    Lilo 配置  boot   =/dev/hda1  install  =/boot/boot.b  map    =/boot/map  read-write  backup  =/dev/null  compact  image   =/boot/bzImage  label   =Linux  root   =/dev/hda1    最後,按以下步驟安裝 LILO(假定硬盤驅動器掛裝到 /hd):    chroot /hd /bin/ash   /sbin/lilo     那應該能成功。您已經構建了必需的軟件,用它從軟盤引導目標系統進入 Linux,在目標系統上進行分區並創建文件系統,然後設置系統直接從硬盤驅動器引導。一天勞動的結果並不壞!    結束語  Linux 內核、uClibc 庫與 BusyBox 軟件的結合使從頭構建 Linux 系統變得很容易。以上描述的過程與基本原理非常適合構建恢復盤、創建您自己的定制 Linux 分發版、以及針對較舊的硬件或非傳統的嵌入式應用程序構建占用資源較少的分發版。

 



  

 

  

圖 2. 裝入根文件系統

  

  一旦 Linux 已經引導,就可以掛裝輔助盤並將文件從那個磁盤復制到 ramdisk 上的根文件系統。一旦復制了 fdisk、mke2fs、lilo 及其支持文件,您就可以著手在目標系統的硬盤驅動器上進行分區和構建文件系統了。    fdisk 是用於創建和操作分區表的菜單驅動的實用程序。它相對來說易於使用:m 打印可用命令,n 添加新的分區,p 打印分區表,而 w 則寫分區表然後退出。請查閱手冊頁以獲得更詳細的信息。    當對硬盤驅動器分區時,不要忘了添加一個交換(swap)分區。我建議創建一個大小為系統內存三到四倍的交換分區。    mke2fs 在分區上創建 ext2 或 ext3 文件系統。命令 mke2fs -j /dev/hda1 將在 /dev/hda1 上創建一個 ext3 分區。我建議使用較新的 ext3 文件系統而不是 ext2。日志記錄活動的額外代價換來的是增強的可靠性。    一旦對硬盤進行了分區並且構建了文件系統,就可以掛裝硬盤並將文件從基於 ramdisk 的根文件系統復制到新的文件系統。您需要但卻不在基於 ramdisk 的根文件系統上的文件只有 Linux 內核和 LILO 配置文件。您可以從先前創建的引導盤獲取這些文件。插入並掛裝引導軟盤,然後將內核及 LILO 配置文件復制到硬盤驅動器上。將二者都放入硬盤驅動器文件系統的 /boot 目錄中。將 LILO 配置文件重命名為 lilo.conf,然後編輯它,使它與下面的內容相似:    Lilo 配置  boot   =/dev/hda1  install  =/boot/boot.b  map    =/boot/map  read-write  backup  =/dev/null  compact  image   =/boot/bzImage  label   =Linux  root   =/dev/hda1    最後,按以下步驟安裝 LILO(假定硬盤驅動器掛裝到 /hd):    chroot /hd /bin/ash   /sbin/lilo     那應該能成功。您已經構建了必需的軟件,用它從軟盤引導目標系統進入 Linux,在目標系統上進行分區並創建文件系統,然後設置系統直接從硬盤驅動器引導。一天勞動的結果並不壞!    結束語  Linux 內核、uClibc 庫與 BusyBox 軟件的結合使從頭構建 Linux 系統變得很容易。以上描述的過程與基本原理非常適合構建恢復盤、創建您自己的定制 Linux 分發版、以及針對較舊的硬件或非傳統的嵌入式應用程序構建占用資源較少的分發版。

 



Copyright © Linux教程網 All Rights Reserved