基于USB接口的微型桌面Linux系統設計方案
SquashFS 壓縮系統是只讀的,從而避免了對磁盤(pán)不必要的擦寫(xiě),但同時(shí)也造成了修改數據不能保存的問(wèn)題。
AUFS 的出現正好解決了上述問(wèn)題,它管理一個(gè)基本文件系統(即本文中的系統Squashfs 鏡像,保持原只讀狀態(tài))和一個(gè)讀寫(xiě)存儲文件系統(必須具有讀寫(xiě)權限)。通過(guò)AUFS,用戶(hù)可以虛擬地修改基本文件系統上的文件,但修改后的結果卻保存在讀寫(xiě)存儲文件系統中,從而實(shí)現了數據的透明修改。
3.5 Initrd 初始化內存盤(pán)
Initrd(boot loader Initialized RAM Disk 的縮寫(xiě)),由boot loader 初始化。本系統使用的boot loader 為GNU GRUB 0.97.如果Grub 已配置Initrd,Linux 內核在啟動(dòng)前,會(huì )把存儲設備中的Initrd 文件加載到內存,作為一個(gè)臨時(shí)根文件系統;內核啟動(dòng)時(shí)通過(guò)先執行Initrd 中的init 文件,完成設備驅動(dòng)模塊和squashsf、aufs 文件系統模塊的加載,并完成真正的根文件系統的掛載,然后執行系統中的/sbin/init 進(jìn)程。
與普通IDE、SATA 硬盤(pán)相比,USB 接口存儲設備從驅動(dòng)模塊加載到設備可用,比較慢,需要幾秒鐘。
因此內核在掛載USB 存儲設備時(shí),會(huì )出現:USB 設備沒(méi)有初始化完成,真正根文件系統掛載失敗的問(wèn)題。為了解決此問(wèn)題,筆者在Initrd 中修改init 可執行文件,當加載USB 驅動(dòng)后,系統將休眠5 秒,讓USB 設備初始化完成后再掛載USB 存儲設備中的根文件系統。本系統的init 文件配置如下:



本系統Initrd 中的最小化根文件系統由BusyBox創(chuàng )建,包含bin、dev、etc、lib、mnt、proc、sbin、sys這些必須的目錄和相關(guān)文件。由于BusyBox 生成的modprobe 命令不能正常執行,所以需要復制宿主系統中的modprobe 命令并替換Initrd 中的sbin 目錄中的同名文件,同時(shí)通過(guò)ldd 查看modprobe 依賴(lài)的庫文件,并復制到Initrd 中的lib 目錄。
最后在宿主機器上通過(guò)命令:
find . | cpio –o –H newc | gzip > /boot/initrd.img-2.6.27.27 制作Initrd 鏡像文件。
3.6 Grub 啟動(dòng)引導器
GNU GRUB (GNU GRand Unified Bootloader 的縮寫(xiě)),是GNU 項目中一個(gè)多操作系統啟動(dòng)引導程序,也是Linux 系統中最常用引導工具之一。為了讓系統從USB 設備啟動(dòng),必須將GRUB 程序安裝在USB 存儲設備的主引導記錄(MBR)中。
以GRUB 0.9X 的安裝步驟如下:
安裝grub 程序在U 盤(pán)的/boot/grub 目錄下,確保其目錄存在menu.lst,stage1,stage2 三個(gè)文件。
進(jìn)入grub 命令窗口,運行以下命令安裝到U 盤(pán)的MBR:
grub>root(hd1,0) #假定Linux 系統所在盤(pán)符為第二塊硬盤(pán)的第一個(gè)分區
grub>setup(hd1)
實(shí)際操作時(shí)根據硬盤(pán)分區不同作相應修改。
修改/boot/grub/menu.lst 文件,本文的menu.lst 如下:

3.7 Xfce 桌面環(huán)境
Xfce 是一款適用于多種*NIX 系統上運行的輕量級桌面環(huán)境,它的設計目的是在節省系統資源的情況下能夠快速加載并執行應用程序。與Gnome 和KDE等比較臃腫的桌面環(huán)境相比,Xfce 占用的系統資源少,同時(shí)它擁有很小的依賴(lài)性和很好的模塊性。本系統所用的Xfce 4.6.2 主要由實(shí)用工具libxfce4util、微件庫libxfcegui4、擴展庫exo、菜單庫libxfce4menu、窗口管理xfwm4、桌面管理xfdesktop、面板xfce4-panel、會(huì )話(huà)管理xfce4-session、設置管理xfce4-settings、配置管理xfconf、文件管理thunar、實(shí)用程序xfce-utils、應用程序查找xfce4-appfinder 等部件構成。
4 具體實(shí)現
4.1 系統在USB 盤(pán)上的實(shí)現
在宿主系統上構建好整個(gè)Linux 桌面系統后,按前所述配置好只讀文件系統鏡像system.squashfs、初始化內存盤(pán)Initrd、內核鏡像vmlinuz、Grub 中的menu.lst 文件、USB 盤(pán)標志文件LABEL,然后按以下步驟將系統移植進(jìn)USB 盤(pán)。
①準備一個(gè)8G 的USB 盤(pán),分為兩個(gè)區:一個(gè)分區作為系統區,文件系統為EXT2,并激活為啟動(dòng)分區,作為L(cháng)inux 系統使用;一個(gè)分區為數據區,文件系統為FAT32,平時(shí)作為與Windows 系統交互的分區,保存移動(dòng)辦公數據。
②將system.squashfs、Initrd、vmlinuz、LABEL 和Grub 相關(guān)文件復制到系統區,并在系統區中新建system_ro( 用于掛載squashfs 只讀文件系統) 、system_rw(用于掛載aufs 文件系統時(shí)的修改文件存儲目錄)、system(用于最終文件系統的掛載目錄)三個(gè)目錄。
③運行g(shù)rub 程序中的root、setup 命令將啟動(dòng)引導信息寫(xiě)入USB 盤(pán)的系統區的MBR.
4.2 系統啟動(dòng)過(guò)程
基于USB 接口的微型桌面Linux 系統的啟動(dòng)過(guò)程如圖2 如示。
計算機開(kāi)機自檢, BIOS 引導到USB 接口的磁盤(pán)設備,通過(guò)啟動(dòng)引導管理器Grub,加載Linux 內核文件vmlinuz,內核將初始化內存盤(pán)initrd.img-2.6.27.27加載到內存,形成一個(gè)臨時(shí)根文件系統,通過(guò)執行Initrd 中的init 可執行文件,進(jìn)行sysfs、proc 文件系統的加載,并對硬件進(jìn)行初始化,相關(guān)硬件驅動(dòng)、squashfs、aufs 模塊的加載后,掛載系統只讀鏡像system.squashfs,并通過(guò)聯(lián)合文件系統aufs 使其可寫(xiě),然后轉到真正的根文件系統執行命令/sbin/init,完成微型桌面Linux 系統的啟動(dòng)。

圖2 系統啟動(dòng)過(guò)程
5 實(shí)驗結果
本文實(shí)現了在USB 接口的存儲設備上構建微型桌面Linux 系統,在具有USB 接口啟動(dòng)功能的各種主流品牌臺式計算機、筆記本和兼容機上都能成功運行,并且在硬件配置比較低的老式486、586 等機器也能流暢地運行,根據機器硬件配置的不同,一般啟動(dòng)時(shí)間為20 秒至50 秒,具有很好的實(shí)用價(jià)值,真正實(shí)現了便捷、高效的移動(dòng)辦公需要。本系統成功啟動(dòng)圖形桌面系統后的效果如圖3 所示。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)linux相關(guān)文章:linux教程
評論