基于USB接口的微型桌面Linux系统设计方案
S 打补丁,使其支持LZMA 算法压缩。实验证明,通过LZMA 算法压缩比GZIP 算法压缩率更高,而压缩时间比GZIP 算法稍长。通过对整个系统采用GZIP 和LZMA 算法进行Squashfs 压缩,在压缩时间和存储空间的比较如表1 如示。
表1 两种压缩算法的比较。
目前Linux 内核还不支持LZMA,在编译内核时需要将CONFIG_SQUASHFS*中所有值置为N;再单独将带LZMA 支持的Squshfs 编译成模块,通过动态加载方式运行。
3.4 AUFS 联合文件系统
AUFS( Another UnionFS 的缩写), 是一个与UnionFS 类似的可堆叠联合文件系统,它将多个目录整合成单一的目录,是Linux 文件系统联合挂载的实现。
SquashFS 压缩系统是只读的,从而避免了对磁盘不必要的擦写,但同时也造成了修改数据不能保存的问题。
AUFS 的出现正好解决了上述问题,它管理一个基本文件系统(即本文中的系统Squashfs 镜像,保持原只读状态)和一个读写存储文件系统(必须具有读写权限)。通过AUFS,用户可以虚拟地修改基本文件系统上的文件,但修改后的结果却保存在读写存储文件系统中,从而实现了数据的透明修改。
3.5 Initrd 初始化内存盘
Initrd(boot loader Initialized RAM Disk 的缩写),由boot loader 初始化。本系统使用的boot loader 为GNU GRUB 0.97.如果Grub 已配置Initrd,Linux 内核在启动前,会把存储设备中的Initrd 文件加载到内存,作为一个临时根文件系统;内核启动时通过先执行Initrd 中的init 文件,完成设备驱动模块和squashsf、aufs 文件系统模块的加载,并完成真正的根文件系统的挂载,然后执行系统中的/sbin/init 进程。
与普通IDE、SATA 硬盘相比,USB 接口存储设备从驱动模块加载到设备可用,比较慢,需要几秒钟。
因此内核在挂载USB 存储设备时,会出现:USB 设备没有初始化完成,真正根文件系统挂载失败的问题。为了解决此问题,笔者在Initrd 中修改init 可执行文件,当加载USB 驱动后,系统将休眠5 秒,让USB 设备初始化完成后再挂载USB 存储设备中的根文件系统。本系统的init 文件配置如下:
本系统Initrd 中的最小化根文件系统由BusyBox创建,包含bin、dev、etc、lib、mnt、proc、sbin、sys这些必须的目录和相关文件。由于BusyBox 生成的modprobe 命令不能正常执行,所以需要复制宿主系统中的modprobe 命令并替换Initrd 中的sbin 目录中的同名文件,同时通过ldd 查看modprobe 依赖的库文件,并复制到Initrd 中的lib 目录。
最后在宿主机器上通过命令:
find . | cpio –o –H newc | gzip > /boot/initrd.img-2.6.27.27 制作Initrd 镜像文件。
3.6 Grub 启动引导器
GNU GRUB (GNU GRand Unified Bootloader 的缩写),是GNU 项目中一个多操作系统启动引导程序,也是Linux 系统中最常用引导工具之一。为了让系统从USB 设备启动,必须将GRUB 程序安装在USB 存储设备的主引导记录(MBR)中。
以GRUB 0.9X 的安装步骤如下:
安装grub 程序在U 盘的/boot/grub 目录下,确保其目录存在menu.lst,stage1,stage2 三个文件。
进入grub 命令窗口,运行以下命令安装到U 盘的MBR:
grub>root(hd1,0) #假定Linux 系统所在盘符为第二块硬盘的第一个分区
grub>setup(hd1)
实际操作时根据硬盘分区不同作相应修改。
修改/boot/grub/menu.lst 文件,本文的menu.lst 如下:
3.7 Xfce 桌面环境
Xfce 是一款适用于多种*NIX 系统上运行的轻量级桌面环境,它的设计目的是在节省系统资源的情况下能够快速加载并执行应用程序。与Gnome 和KDE等比较臃肿的桌面环境相比,Xfce 占用的系统资源少,同时它拥有很小的依赖性和很好的模块性。本系统所用的Xfce 4.6.2 主要由实用工具libxfce4util、微件库libxfcegui4、扩展库exo、菜单库libxfce4menu、窗口管理xfwm4、桌面管理xfdesktop、面板xfce4-panel、会话管理xfce4-session、设置管理xfce4-settings、配置管理xfconf、文件管理thunar、实用程序xfce-utils、应用程序查找xfce4-appfinder 等部件构成。
4 具体实现
4.1 系统在USB 盘上的实现
在宿主系统上构建好整个Linux 桌面系统后,按前所述配置好只读文件系统镜像system.squashfs、初始化内存盘Initrd、内核镜像vmlinuz、Grub 中的menu.lst 文件、USB 盘标志文件LABEL,然后按以下步骤将系统移植进USB 盘。
①准备一个8G 的USB 盘,分为两个区:一个分区作为系统区,文件系统为EXT2,并激活为启动分区,作为Linux 系统使用;一个分区为数据区,文件系统为FAT32,平时作为与Windows 系统交互的分区,保存移动办
- 实现WUSB设备控制器的设计考虑因素(09-12)
- 基于USB2.0的高速无线数传接收设备的数据接收存储方法(09-09)
- 四种短距离无线监控解决方案的性能对比(09-16)
- Wibree:一个可供选择的新无线联网技术(11-07)
- TI 单芯片手机多媒体电话解决方案(12-01)
- 蓝牙技术硬件实现模式分析(01-11)