如果各位有在學習作業系統的, 應該會對live cd或者live usb這個詞不陌生, 在使用電腦上, 很多時候我們只是想試用一下系統, 而不想安裝老半天才能開機來用, 又或者想把系統帶著, 不管到哪台機器上都能執行系統, 這種時候就可以使用live cd/usb, 在機器上放入live cd/usb, 透過cd/usb來啟動系統.
Linux有些版本的官方安裝光碟就內含live cd功能, 可以讓使用者不安裝就直接開機試用, 相當的便利, live cd/usb的製作, 市面上有很多現成的工具, 不過如果想自己從無到有建立要怎麼做呢, 本文對linux下建立live usb的流程做說明.
.requirements
要完成一個linux的live usb, 需要的硬體與工具如下.
Hardware
- Persional Cmputer(for development and can boot from USB)
- USB Flash Disk
Software
- Linux (root permission)
- Boot loader (LILO, syslinux, etc..)
- Filesystem and disk tools (fdisk, mkfs.ext2, etc..)
- Compile tools(gcc make, etc...)
1.Make a Bootable USB Flash Disk
首先,要先讓usb flash disk可以當開機裝置, 步驟如下.
- 製作磁碟分割
卸載usb flash disk, sdx名稱以及要卸載幾個依個人情形而定 #umount /dev/sdb1 #fdisk /dev/sdb
使用fdisk處理分割表
fdisk a 切換可開機的旗標 b 編輯 bsd 磁碟標籤 c 切換 DOS 相容性旗標 d 刪除分割區 l 列出已知分割區類型 m 印出這個選單 n 加入新的分割區 o 建立新的空白 DOS 分割表 p 印出分割表 q 離開而不需儲存變更 s 建立新的空白 Sun 磁碟標籤 t 變更分割區系統識別號 u 變更顯示/輸入單位 v 驗證分割表 w 分割表寫入磁碟然後離開 x 額外功能 (專家限用)
Partition Information
Delete all partition
Make a primary partition
Change the system to W95 Win32
Make partition bootable
Write Result
最後, 讓linux更新分割表
#partprobe
- 製作檔案系統
usb flash disk檔案系統建立為fat32
#mkfs.vfat -F 32 /dev/sdb1
到這一步為止, usb flash disk已經具備開機的功能, 接下來開始處理檔案系統的內容部分.
2.Creating a Linux Filesystem
- Filesystem Content
要製作一個最簡單的檔案系統內容, 可以使用工具debootstarp透過網路下載來自動建立一個最基本的debian檔案系統內容,以下是相關步驟與資訊.
debootstarp教學網址:
http://wiki.debian.org/Debootstrap
建立基本檔案系統資料在dabian-squeeze資料夾內
#mkdir dabian-squeeze #debootstrap squeeze ./debian-squeeze
當建立完基本檔案系統後, 如果沒有特殊考量的話(註1), 此時可以利用chroot進入修改或者安裝需要的軟體, 以下舉例.
把檔案系統切換到./debian-squeeze #chroot ./debian-squeeze 設定root密碼 #passwd 新增使用者 #useradd ...... 安裝需要的工具 #apt-get .... 跳出 #exit
註1.如果是需要編譯的軟體或函式庫,由於產品本身大多不需要具有編譯程式的能力, 不管是瘦身面或系統穩定面來看, 這些都應該在外部編譯,輸出路徑設定在此檔案系統中會比較佳(在嵌入式系統開發上常見).
- Filesystem file
- 建立fs檔案
- 放入fs內容資料
- 壓縮fs檔案
#touch ramfs 注意, 512000要記住, 後面會用到 #mkfs.ext2 ramfs 512000
放入fs內容資料
建立掛載用的node, 名字隨便 #mkdir /media/mmm 注意要以loop device來掛載 #mount -o loop /media/mmm #cp -a debian-squeeze/* /media/mmm #umount /media/mmm
壓縮fs檔案
看個人考量, -9壓很大, 開機在loading的時候會比較慢 #gzip -9 rmfs
接下來把完成的檔案系統檔案放入usb flash device中.
Image.gz可以名字隨便定, 之後會建立設定檔指定fs檔案 #cp ramfs.gz /media/xxxx/Image.gz
3.Kernel
- Build linux kernel
- linux source code
- build linux kernel
linux source code
在kernel的建置上, 通常會先依造個人需求去對linux原始碼作修改, 在這邊此部分就略掉, 單就linux source的取得做說明, 以下利用apt-get取得, 也可以自己上網路直接抓.
#apt-get install linux-source-2.6.32
build linux kernel
在建置linux kernel時, 有幾個要注意的設定要勾選, 以下做說明
#tar xjf /usr/src/linux-source-2.6.32.tar.bz2 #cd /usr/src/linux-source-2.6.32 注意.menuconfig裡有幾個選項要勾, 以下做說明 #make menuconfig
以下列出menuconfig需要設定的項目
General setup ---> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support [*] Support initial ramdisks compressed using gzip Device Drivers ---> <*> RAM block device support 註.ext2 fs格式支援 File systems ---> <*> Second extended fs support
設定完menuconfig後, 即可下make指令建置linux kernel, 當然, 需要的函式庫以及工具要預先裝好才能成功建置, 建置完成的kernel檔案會在arch的目標平台資料夾下, 把他放到usb flash disk中即可.
#make xxxx依個人的usb裝置而定, 名稱不一 #cp ./arch/x86/boot/bzImage /media/xxxx/linux-kernel
4.booting
- bootloader(syslinux)
安裝syslinux(bootloader)
#syslinux --stupid --force /dev/sdb1
複製mbr檔案到usb flash disk
#dd if=/usr/lib/syslinux/mbr.bin of=/dev/sdb
syslinux.cfg內容, 指定用kernel檔案, 使用ram0開機, 以及ramdisk(size為之前建立的fs檔案壓縮前的大小), 指定fs檔案
TIMEOUT 20 DEFAULT linux LABEL linux KERNEL linux-kernel APPEND root=/dev/ram0 ramdisk_size=512000 initrd=Image.gz
註. 可以設定的不只這些, 詳細可查詢網路
- Boot linux
最後, 把usb flash disk插上pc, 設定開機裝置為usb, 就可以開機進入linux中了.
Load Image.gz(filesystem), 依照fs大小會load一段時間
成功開機進入linux, 另外, 切記帳號密碼要記住, 還真的差點忘記
沒有留言:
張貼留言