Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92582
  • 博文数量: 34
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 275
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-13 23:05
文章分类

全部博文(34)

文章存档

2011年(1)

2010年(7)

2009年(26)

我的朋友

分类: LINUX

2009-06-26 16:47:59


目 录
1 引言 6
1.1 编写目的 6
1.2 背景 6
1.3 定义 6
1.4 参考资料 6
2 总体描述 8
2.1 硬件环境 8
2.2 软件环境 8
2.3 需求规定和约束 8
3 总体设计 9
3.1 基本设计概念 9
3.2 软件结构 9
4 内核 10
4.1 创建内核的方法 10
4.2 内核配置 10
4.2.1 概述 10
4.2.2 Loadable module support 11
4.2.3 Processor type and features 11
4.2.4 General setup 12
4.2.5 Plug and Play configuration 12
4.2.6 Block devices 12
4.2.7 Multi-device support (RAID and LVM) 13
4.2.8 Networking options 13
4.2.9 ATA/IDE/MFM/RLL support 14
4.2.10 SCSI support 15
4.2.11 Network device support 15
4.2.12 Character devices 16
4.2.13 File systems 17
4.2.14 Console drivers 18
4.2.15 USB support 18
4.3 提示 19
4.3.1 EXTRAVERSION 19
4.3.2 .config 19
5 根文件系统 21
5.1 根文件系统 21
5.2 文件系统的内容 21
5.2.1 应用程序(applications) 21
5.2.2 设备文件(device files) 21
5.2.3 脚本和配置文件(scripts and configuration files) 22
5.2.4 库文件(libraries) 23
5.2.5 必要的目录 24
5.3 初始化RAM盘(initrd) 24
5.3.1 操作步骤 24
5.3.2 引导选项 24
5.3.3 安装 25
5.3.4 改变根目录设备 26
5.3.5 使用场合 27
5.3.6 淘汰的根转换机制(change_root) 27
5.4 系统初始化(init) 27
5.4.1 init的任务 28
5.4.2 SysVinit 28
5.4.3 两种风格:Slackware vs. Debian 28
5.5 PAM 29
5.5.1 什么是PAM 29
5.5.2 PAM的结构 29
5.5.3 配置文件 29
5.5.4 other 29
5.6 再论initrd 30
5.6.1 根到底在哪里 31
5.6.2 linuxrc 31
5.6.3 根转换机制:新的?旧的? 32
5.7 提示 34
5.7.1 文件系统目录层次结构 34
5.7.2 mklips.sh(制作LiPS的脚本) 34
5.7.3 lips.conf(LiPS配置文件) 34
5.7.4 cp –dpR 35
5.7.5 如何判断一个程序依赖哪些文件 35
5.7.6 带库文件复制——lcp() 35
5.7.7 库文件的命名 36
6 引导 38
6.1 引导过程概述 38
6.2 几种引导方式 38
6.3 grub引导器 38
6.4 USB引导 38
6.4.1 制作步骤 39
6.5 提示 40
6.5.1 版本问题? 40
7 远程串口控制台 41
7.1 概述 41
7.2 配置方法 41
7.3 提示 41
7.4 Linux 远程串口控制台指南 41
8 系统安装光盘 44
8.1 概述 44
8.2 boot.iso光盘的文件结构分析 44
8.3 制作步骤 45
9 源代码(配置文件和脚本) 46
9.1 lips.conf 46
9.2 mklips.sh 46



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