Chinaunix首页 | 论坛 | 博客
  • 博客访问: 505952
  • 博文数量: 176
  • 博客积分: 4045
  • 博客等级: 上校
  • 技术积分: 2491
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-19 11:23
文章分类

全部博文(176)

文章存档

2011年(7)

2009年(12)

2008年(157)

我的朋友

分类:

2008-05-19 11:31:43

1 引言

1.1 编写目的
  说明Linux系统裁减的过程及解决的主要技术问题。本文档的编写是为了说明L
iPS的详细设计过程,也可以作为构造一个小型化Linux系统的指南。
  本文档内容的组织如下所述:这一部分是引言,第2部分是对项目软、硬件环境
和需求的总体描述,第3部分说明了裁减LINUX的相关基本概念。后面几个部分是具
体实现方法的详细说明,4~6分别详细描述了创建内核、创建根文件系统和引导系
统的方法。最后的内容可以看作附录,其中7说明了一般Linux系统安装光盘的创建
方法,8列出了相关的配置文件和源代码。
1.2 背景
  华中科技大学计算机存储系统国家专业实验室,NAS项目(2003.3——2003.8)

1.3 定义
O boot loader: 引导器
O kernel: 内核
O root filesystem: 根文件系统
O USB: 通用串行总线
O
1.4 参考资料
[1] DIY:自己动手做一个迷你 Linux 系统. IBM developerWorks 中国网站. htt
p://www-900.ibm.com/developerWorks/cn/linux/embed/diy/index.shtml
[2] Linux From Scratch.
[3] Linux启动过程综述.
i=15750
[4] The Linux Bootdisk HOWTO (中译版).
ootdisk-HOWTO.html
[5] Using the initial RAM disk (initrd). /usr/src/linux-2.4/Documentatio
n/initrd.txt. (译文:http://zope.slat.org/Project/3ybaby/discuss-area/c
d-boot/cdboot_refer/initrd.htm)
[6] Quickmouse于2003.1发表于白云黄鹤BBS ( Linux讨
论区的帖子“裁减Linux”。
[7] Filesystem Hierarchy Standard.
.2.pdf
[8] LINUX ALLOCATED DEVICES. /usr/src/linux-2.4/Documentation/device.txt
. 或者最新的列表在http://www.kernel.org/pub/linux/docs/device-list/
[9] Karim Yaghmour. Building Embedded Linux Systems. O'Reilly, April 200
3.
[10] Alessandro Rubini. Take Command: Init.
cs/init/ , November 1998.
[11] 深入 Linux PAM 体系结构. IBM developerWorks 中国网站.
0.ibm.com/developerWorks/cn/linux/l-pam/index.shtml . 2003.7.
[12]
  



2 总体描述

2.1 硬件环境
  开发主机:
  Intel 845芯片组主板,P4赛扬1.8GHz CPU,256M内存,60G IDE硬盘,RTL813
9网卡。
  目标机:
  与主机同构。
2.2 软件环境
  开发主机:
  Redhat Linux 7.3 (kernel 2.4.18-3),或者Redhat Linux 9 (kernel 2.4.2
0-8)。可以根据需要使用其他版本的内核,比如Redhat 7.3+kernel 2.4.20。
  目标机:
  LiPS,以及应用程序。
2.3 需求规定和约束
  我们目标系统LiPS,即Linux Powered Storage是一个嵌入式Linux操作系统,
主要着眼于提供各种文件服务,不包括X GUI;并且足够小,可以装入32M USB盘或
者DOC/DOM等常用设备引导。
  



3 总体设计

3.1 基本设计概念
  提起“裁减Linux”,最容易想到的方法是以一个已经安装好的系统为基础,删
除掉不需要的文件,以减小整个系统的尺寸。而事实上这个方法几乎是行不通的,
因为通过光盘安装的一个Redhat 9 Linux系统,即便是只选择了比较少的软件包,
其所占空间也可以轻松达到300~500MB,想在这个基础上裁减到30MB左右是比较困
难的。更困难的是确定哪些东西是可以删除的?如果删除了系统必须的文件,可能
导致系统不能引导。
  另一个途径是从零开始根据需要构建整个系统。“Linux From Scratch”采用
的就是这种方式,一个个安装需要的软件包。类似的,更简单的方法是,安装一个
完整的Linux系统,然后将必要的软件(可执行程序)、配置文件、库文件、内核等
复制出来构建一个小系统。我们采取后一种方式。
  
3.2 软件结构
  LiPS包括3部分:Linux内核,根文件系统和引导器。
  内核(Kernel)提供了一个操作系统的基本功能,如内存管理、进程调度、文
件系统、网络等,以及设备驱动程序。
  根文件系统(Root filesystem)是存放运行、维护系统所必须的各种工具软件
、库文件、脚本、配置文件和其他特殊文件(比如设备节点)的地方,也可以安装
各种软件包。通常根文件系统位于某个磁盘分区,而在LiPS中应用了initrd(初始
RAM盘)机制,将根文件系统放在RAM Disk中。
  引导器(Boot Loader)的任务是从引导设备装载内核,引导系统运行。Linux
系统常见的引导器包括早期的LILO和近期的GRUB。LiPS用的是GRUB。
  



4 内核

4.1 创建内核的方法
  Linux提供了方便灵活的方法来定制内核,主要步骤包括:下载安装内核源代码
树,配置内核,编译内核。具体方法请参考相关文档。关键指令如下:
cd /usr/src/linux-2.4
make menuconfig
make dep; make clean; make bzImage
  编译成功的内核文件为arch/i386/boot/bzImage.
4.2 内核配置
4.2.1 概述
  make menuconfig之后可以看到类似如下的内容(编号是为了描述方便而加上的
)。根据内核版本的不同,列出的项目会有差异。而变化主要发生在发行版为标准
内核打的各种补丁上面,其实标准内核是比较稳定的。
  如下所示,我们配置的内核版本为2.4.20-8,这个“-8”就是Redhat所打的补
丁版本号。补丁一般是对标准内核错误的修正和新增的功能。与2.4.20内核配置选
项比较会发现,[10,25,30]都属于Redhat的补丁。
  一般地,这些补丁选项都不是必须的,因此我们的LiPS内核中都没有包括这些
选项。其实,完全可以通过直接配置一个标准的内核版本(比如2.4.20)来产生我
们所需要的内核。
Linux Kernel v2.4.20-8-R2Lips Configuration
[1] Code maturity level options --->
[2] Loadable module support --->
[3] Processor type and features --->
[4] General setup --->
[5] Memory Technology Devices (MTD) --->
[6] Parallel port support --->
[7] Plug and Play configuration --->
[8] Block devices --->
[9] Multi-device support (RAID and LVM) --->
[10] Cryptography support (CryptoAPI) --->
[11] Networking options --->
[12] Telephony Support --->
[13] ATA/IDE/MFM/RLL support --->
[14] SCSI support --->
[15] Fusion MPT device support --->
[16] I2O device support --->
[17] Network device support --->
[18] Amateur Radio support --->
[19] IrDA (infrared) support --->
[20] ISDN subsystem --->
[21] Old CD-ROM drivers (not SCSI, not IDE) --->
[22] Input core support --->
[23] Character devices --->
[24] Multimedia devices --->
[25] Crypto Hardware support --->
[26] File systems --->
[27] Console drivers --->
[28] Sound --->
[29] USB support --->
[30] Additional device driver support --->
[31] Bluetooth support --->
[32] Kernel hacking --->
[33] Library routines --->
Load an Alternate Configuration File
Save Configuration to an Alternate File