1. 程式人生 > >基於U盤的linux啟動盤的製作

基於U盤的linux啟動盤的製作

本次設計是構建一個基於U盤儲存的linux啟動盤,詳細介紹了具體的構建過程。主要步驟如下:

(1)   在U盤上安裝系統載入程式grub。

(2)   製作Linux根檔案系統,建立系統必要的目錄、命令和裝置。

(3)   Linux核心配置、編譯。

我的製作環境:

        作業系統:rhel5,已安裝核心編譯開發工具包。

下載相應版本。

下載相應版本

        優盤:可啟動U盤,現在的U盤應該都可以,本人的是朗盛E306,8G。

第一章    安裝grub到U盤

在U盤建立載入程式(grub):

   可以先用fdisk -l 檢視一下自己的U盤,我的是在 /dev/sdb1,這裡掛載到 /mnt/usb目錄下。

    1.1  分割槽格式化

     fdisk /dev/sdb (b表示第2個儲存裝置,我的為b ,可以fdisk -l 檢視一下)

        Command (m for help):d 刪除原有分割槽
        Command (m for help):n 新增分割槽
        p linux主分割槽
        e Linux 擴充套件分割槽
        :p
        Command (m for help):w

   # mkfs.ext2 /dev/sdcx1 將U盤上的第一分割槽格式化為Ext2檔案系統

      1.2   安裝grub到u盤

         #mount /dev/sdb1  /mnt/usb (用fdisk -l命令檢視x具體代表什麼)
         #cd /mnt/usb
         #mkdir boot  boot/grub
         #cp /boot/grub/stage*   boot/grub/ 
     編輯grub.conf
        #vi boot/grub/grub.conf 
         default=0 
         timeout=10 
         title Mylinux For Linux 
         root(hd0,0)    注:若從usb啟動,此處均為(hd0,0)
         kernel /boot/bzImage rw root=/dev/sda1 rootdelay=10

      儲存退出

          #grub

         #grub> root   (hd1,0)       //選擇啟動根目錄/所在的磁碟代號,因為我只有一塊硬碟,故此處U盤為hd1,第一塊硬碟為hd0。

              Filesystemtype is ext2fs, using whole disk

          #grub> setup   (hd1)          //在MBR上安裝grub

           Checking if "/boot/grub/stage1"exists... yes

           Checking if "/boot/grub/stage2"exists... yes

          Checking if"/boot/grub/e2fs_stage1_5" exists... no

           Running "install /boot/grub/stage1 (fd0)/boot/grub/stage2 p /boot/grub/grub.conf "... succeeded

           Done.

          #grub>quit                 //退出GRUB

      # umount /mnt/usb   解除安裝U盤。

第二章    根檔案系統製作

2.1 安裝與編譯Busybox

BusyBox 是實現標準Linux 工具的一個獨立可執行方案。不但包含有簡單的工具,如cat 和echo,還整合壓縮了Linux更大、更復雜的工具和命令,例如grep、find、mount 以及telnet。利用它,我們可以建立我們需要的系統命令。

步驟:

 # cd /tmp

  # tar  -xjvf busybox-1.13.3.tar.bz2

  # cd busybox-1.13.3

 # make menuconfig

進入手工配置選單,主要修改選項如下:

BusyBox settings——>Build Options

[*] Build Busybox as a static binary (no shared libs)    這個選項把busybox編譯成靜態連結的可執行檔案,執行時可以不需要其他函式的庫。

BusyBox settings->Installation Options

[*]Don’t use /usr  這個選項必選,否則make install後Busybox將安裝在原系統的/usr目錄下,覆蓋了原系統所有命令。選中此選項後,make install後將生成一個_install的目錄,裡面有Busybox和指向它的連結。

進入shell選項,選擇ash作為預設的shell程式。如下:

Shell——>Choose your default shell (ash)

[*]ash

[]hush

[]lash

[]msh

 其它選項可以採用預設值。之後選擇儲存,退出配置環境。

編譯Busybox

#make

make完後,會在/tmp/busybox-1.13.3目錄下生成可執行檔案busybox,使用者可以手工使用ln命令建立一些常用命令。使用者也可以使用make install命令,讓BusyBox自動建立這些命令的連結。

安裝Busybox

#make install

make install完成後,會在/tmp/busybox-1.13.3/目錄下生成_install目錄,裡面會建立bin,sbin子目錄,其中包含busybox可執行檔案和所有BusyBox支援命令對其的連結。通過觀察/tmp/busybox-1.13.3/_install/bin/下連結,可以清楚看到BusyBox種究竟支援了哪些命令和工具。如果需要的命令沒有出現在這個目錄,就要重新配置編譯,讓其支援。

2.2建立檔案系統

2.2.1 為U盤建立檔案系統

# cd dev

# mknod tty c 5 0

# mknod console c 5 1

# chmod 666 tty console

# mknod tty0 c4 0

# chmod 666 tty0

# mknod ram0 b 1 0

# chmod 600 ram0

# mknod null c 1 3

# chmod 666 null

2.2.2  建立etc目錄下啟動配置檔案

Linux系統在啟動過程需要一個配置檔案,如:/etc/inittab,/etc/fstab,

/etc/init.d/rsC等等。

(1)    建立 /mnt/usb/etc/inittab

# vi /mnt/usb/etc/inittab

新增如下內容:

::sysinit:/etc/init.d/rcS

::askfirst:/bin/sh

(2)   建立/mnt/usb/etc/fstab

# vi /mnt/usb/etc/fstab

新增如下內容:

proc /proc proc defaults 0 0

(3)  建立/mnt/usb/etc/init.d/rsC

# vi /mnt/usb/etc/init.d/rsC

新增如下內容:

#! /bin/sh

mount –a

(4) 修改inittab,fstab,rsC檔案許可權

# chmod 644 /mnt/usb/etc/inittab

# chmod 755 /mnt/usb/etc/init.d/rsC

# chmod 644 /mnt/usb/etc/fstab

第三章Linux核心配置編譯

目的:剪裁linux核心,以求簡潔實用,適合U盤(或嵌入式)系統。

# cp linux-2.6.18.tar.bz2  /usr/src/

# cd /usr/src

# tar –xjvf linux-2.6.18.tar.bz2

# cd inux-2.6.18        //  執行配置程式

會生成.config檔案,這是核心的編譯選項。

# make

2.6的核心只需要make一下就可以了。不用 make dep    make bzImage

make完成後會在 /usr/src/linux-2.6.18/arch/i386/boot/目錄下生成核心檔案bzImage

# cp  arch/i386/boot/bzImage /mnt/usb/boot

# umount /mnt/usb

到此,一個可以在U盤上獨立執行的Linux系統就製作完成。

核心編譯選項如下:

在menuconfig中配置:
  詳細介紹核心配置選項及刪改情況
  第一部分:全部刪除
  Code maturity level options ---> 程式碼成熟等級選項
  []Prompt for development and/or incomplete code/drivers 預設情況下是選擇的,這將會在設定介面中顯示還在開發或者還沒有完成的程式碼與驅動.不選。

  第二部分:除以下選項,其它全部刪除
  General setup—〉
  System V IPC (IPC:Inter Process Communication)
  第三部分:除以下選項,其它全部刪除
  Loadable module support ---> 可引導模組支援建議作為模組加入核心
  [] Enable loadable module support 
  []Automatic kernel module loading 
  第四部分:全部刪除
  Block layer-----〉塊裝置
  第五部分:除以下選項,其它全部刪除
  Processor type and features ---> 處理器型別
  Subarchitecture Type (PC-compatible) ---> 這選項的主要的目的,是使Linux可以支援多種PC標準,一般我們使用的PC機是遵循所謂IBM相容結構(pc/at)。這個選項可以讓你選擇一些其它架構。我們一般選擇PC-compatible就可以了。
  Processor family(386) : 它會對每種CPU做最佳化,讓它跑的好又快,一般來說,你是什麼型號的就選什麼型號的就好。我選的是386,這樣核心會省下不少空間
  第六部分:除以下選項,其它全部刪除
  Power management options (ACPI, APM) ---> 電源管理選項
  [ ] Power Management Debug Support 電源管理的除錯資訊支援,如果不是要除錯核心有關電源管理部份,請不要選擇這項。
  ACPI Support ---〉高階電源介面配置支援,如果BIOS支援,建議選上這項
  []Button 
  第七部分:除以下選項,其它全部刪除
  Bus options (PCI, PCMCIA, EISA, MCA, ISA) ---> 匯流排選項
  []PCI support
  PCI access mode (Any) ---> PCI外圍裝置配置,強列建議選Any,系統將優先使用MMConfig,然後使用BIOS,最後使用Direct檢測PCI裝置。
  第八部分:除以下選項,其它全部刪除
  Executable file formats --->
  Kernel support for ELF binaries ELF是開放平臺下最常用的二進位制檔案,它支援不同的硬體平臺。一定要選。
  第九部分:除以下選項,其它全部刪除
  Networking
  Networking options --->
  []Unix domain sockets
  []TCP/IP networking
  第十部分:除以下選項,其它全部刪除
  Device Drivers --->裝置驅動
  Block devices-------〉
  []Compaq SMART2 support
  [] Compaq Smart Array 5xxx support
  []Loopback device support 
  [] RAM disk support
  SCSI device support ---> 裡面有關於USB支援的,要選擇
  []SCSI device support USB要用,必須選擇
  []legacy /proc/scsi/ support USB要用,必須選擇
  []SCSI disk support USB要用,必須選擇
  SCSI Low-level drivers
  []Serial ATA(SATA) support
  []Intel PIIX/ICH SATA support 這個必須選擇,否則無法產生引導檔案
  []Via SATA support
  Networking device support ---> 這個下面是選網絡卡驅動,一定要選
  Ethernet(1000mbit)-?我的電腦是千兆網絡卡所以就選這個
  []broadcom Tigon3support
  Input device support ---> 這個裡面要設定你的滑鼠鍵盤什麼的
  []Provide legacy /dev/psaux device
  Graphics support --->
  []Support for frame buffer devices 支援Frame buffer的,一定要選擇
  USB support --->
  []USB device filesystem 這個好象是用U盤必須的
  []EHCI HCD (USB 2.0) support 有usb2.0就選上把,編譯成模組
  []OHCI HCD support 必須選擇,編譯成模組
  []UHCI HCD (most Intel and VIA) support 必須選擇,編譯成模組
  []USB Mass Storage support 用U盤必須選擇
  USB Human Interface Device (full HID) support 裡面選擇usb滑鼠和usb鍵盤,如果你有一定選上這個必需選
  HID input layer support 應該選擇
  /dev/hiddev raw HID device support如果這裡有USB鍵盤和滑鼠選項,一定要選擇
第十一部分:除以下選項,其它全部刪除
  file systems --->檔案系統
  <*>Second extended fs support
  Ext2 extended attributes
  Ext2 POSIX Access Control Lists
  Ext2 Security Labels
  Ext3 journalling file system support

Ext3 extended attributes
  Ext3 POSIX Access Control Lists
  Ext3 Security Labels 以上這些肯定是要選擇的,linux的標準檔案系統
  Kernel automounter support 核心自動掛載的,當然要選
  Kernel automounter version 4 support (also supports v3) 當然要選
  DOS/FAT/NT Filesystems --->
  DOS FAT fs support
  MSDOS fs support
  VFAT (Windows-95) fs support
  NTFS file system support
  Native language support?語言支援,這裡就支援英語和漢語就行了,不多說了
  []NLS ISO 8859-1 必須選擇,這個是關於U盤掛載的。
  CD-ROM/DVD Filesystems ---> 這個是關於掛載ISO檔案的,用的話就選。
  <*>ISO 9660 CDROM file system support
  餘下部分: 全部刪除
   File Systems:
   <*> Second extended fs support 
   <*> /proc support # proc檔案系統很有用
   <*> ext3
   <*> FAT,FAT32,NTFS 
   <*> NFS support
      Partion types: 選擇PC BIOS
第四章 U盤linux目錄

最終,軟盤linux系統整合後的部署結構如下:

/mnt/usb/

      /boot

           /bzImage

          /grub

                  /grub.conf

                  / stage1

                  /stage2

         /initrd.img.gz  備註:Linux2.6核心不需要此檔案,要了反而可能出問題,此處列出只為2.4

        /lost+found

        /etc

        /lib……

第四章 測試

重啟機器,設定USB-HDD為第一驅動,啟動進入GRUB 載入程式,開始執行軟盤linux 系統。

當系統啟動後,若無問題應該可以順利進入顯示介面,可以自己測試U盤linux的命令,以及編輯器等功能

參考文獻

【1】   嵌入式系統原理與設計 浙江大學出版社 王勇編著 2007年2月第一版