Linux系统裁减指南.docx
《Linux系统裁减指南.docx》由会员分享,可在线阅读,更多相关《Linux系统裁减指南.docx(65页珍藏版)》请在冰豆网上搜索。
Linux系统裁减指南
10_
《Linux系统裁减指南(LiPS)》
目录
TOC\o"1-9"\t"标题1;1;标题2;2;标题3;3;标题4;4"\h目录1
1引言7
1.1编写目的7
1.2背景7
1.3定义7
1.4参考资料8
2总体描述9
2.1硬件环境9
2.2软件环境10
2.3需求规定和约束10
3总体设计11
3.1基本设计概念11
3.2软件结构11
4内核12
4.1创建内核的方法12
4.2内核配置13
4.2.1概述13
4.2.2Loadablemodulesupport15
4.2.3Processortypeandfeatures15
4.2.4Generalsetup16
4.2.5PlugandPlayconfiguration18
4.2.6Blockdevices18
4.2.7Multi-devicesupport(RAIDandLVM)19
4.2.8Networkingoptions19
4.2.9ATA/IDE/MFM/RLLsupport21
4.2.10SCSIsupport23
4.2.11Networkdevicesupport24
4.2.12Characterdevices25
4.2.13Filesystems27
4.2.14Consoledrivers29
4.2.15USBsupport29
4.3提示31
4.3.1EXTRAVERSION31
4.3.2.config32
5根文件系统33
5.1根文件系统33
5.2文件系统的内容34
5.2.1应用程序(applications)34
5.2.2设备文件(devicefiles)34
5.2.3脚本和配置文件(scriptsandconfigurationfiles)37
5.2.4库文件(libraries)39
5.2.5必要的目录40
5.3初始化RAM盘(initrd)40
5.3.1操作步骤40
5.3.2引导选项41
5.3.3安装42
5.3.4改变根目录设备44
5.3.5使用场合46
5.3.6淘汰的根转换机制(change_root)47
5.4系统初始化(init)47
5.4.1init的任务47
5.4.2SysVinit48
5.4.3两种风格:
Slackwarevs.Debian48
5.5PAM49
5.5.1什么是PAM50
5.5.2PAM的结构50
5.5.3配置文件50
5.5.4other51
5.6再论initrd52
5.6.1根到底在哪里54
5.6.2linuxrc55
5.6.3根转换机制:
新的?
旧的?
57
5.7提示61
5.7.1文件系统目录层次结构61
5.7.2mklips.sh(制作LiPS的脚本)61
5.7.3lips.conf(LiPS配置文件)62
5.7.4cp–dpR62
5.7.5如何判断一个程序依赖哪些文件63
5.7.6带库文件复制——lcp()64
5.7.7库文件的命名66
6引导67
6.1引导过程概述67
6.2几种引导方式67
6.3grub引导器68
6.4USB引导69
6.4.1制作步骤69
6.4.1.1创建文件系统69
6.4.1.2复制文件70
6.4.1.3安装grub70
6.5提示71
6.5.1版本问题?
71
7远程串口控制台72
7.1概述72
7.2配置方法72
7.3提示72
7.4Linux远程串口控制台指南72
8系统安装光盘78
8.1概述78
8.2boot.iso光盘的文件结构分析78
1引言
1.1编写目的
说明Linux系统裁减的过程及解决的主要技术问题。
本文档的编写是为了说明LiPS的详细设计过程,也可以作为构造一个小型化Linux系统的指南。
本文档内容的组织如下所述:
这一部分是引言,第2部分是对项目软、硬件环境和需求的总体描述,第3部分说明了裁减LINUX的相关基本概念。
后面几个部分是具体实现方法的详细说明,4~6分别详细描述了创建内核、创建根文件系统和引导系统的方法。
最后的内容可以看作附录,其中7说明了一般Linux系统安装光盘的创建方法,8列出了相关的配置文件和源代码。
1.2背景
华中科技大学计算机存储系统国家专业实验室,NAS项目(2003.3——2003.8)
。
1.3定义
Obootloader:
引导器
Okernel:
内核
Orootfilesystem:
根文件系统
OUSB:
通用串行总线
1.4参考资料
[1]DIY:
自己动手做一个迷你Linux系统.IBMdeveloperWorks中国网站.
htt
p:
//
[2]LinuxFromScratch.HYPERLINK"http:
//clfsbook.mylab.idv.tw/index.html"\n_blankhttp:
//clfsbook.mylab.idv.tw/index.html
[3]Linux启动过程综述.HYPERLINK"\n_blank
i=15750
[4]TheLinuxBootdiskHOWTO(中译版).HYPERLINK"http:
//www.linux.org.tw/CLDP/gb/B"\n_blankhttp:
//www.linux.org.tw/CLDP/gb/Bootdisk-HOWTO.html
[5]UsingtheinitialRAMdisk(initrd)./usr/src/linux-2.4/Documentatio
n/initrd.txt.(译文:
HYPERLINK"http:
//zope.slat.org/Project/3ybaby/discuss-area/c"\n_blankhttp:
//zope.slat.org/Project/3ybaby/discuss-area/cd-boot/cdboot_refer/initrd.htm)
[6]Quickmouse于2003.1发表于白云黄鹤BBS(HYPERLINK"\n_blank
Linux讨论区的帖子“裁减Linux”。
[7]FilesystemHierarchyStandard.HYPERLINK"\n_blank
[8]LINUXALLOCATEDDEVICES./usr/src/linux-2.4/Documentation/device.txt
.或者最新的列表在HYPERLINK"http:
//www.kernel.org/pub/linux/docs/device-list/"\n_blankhttp:
//www.kernel.org/pub/linux/docs/device-list/
[9]KarimYaghmour.BuildingEmbeddedLinuxSystems.O'Reilly,April200
3.
[10]AlessandroRubini.TakeCommand:
Init.HYPERLINK"http:
//www.linux.it/kerneldo"\n_blankhttp:
//www.linux.it/kerneldo
cs/init/,November1998.
[11]深入LinuxPAM体系结构.IBMdeveloperWorks中国网站.HYPERLINK"http:
//www-90/"\n_blankhttp:
//www-90/
.2003.7.[12]
2总体描述
2.1硬件环境
开发主机:
Intel845芯片组主板,P4赛扬1.8GHzCPU,256M内存,60GIDE硬盘,RTL8139网卡。
目标机:
与主机同构。
2.2软件环境
开发主机:
RedhatLinux7.3(kernel2.4.18-3),或者RedhatLinux9(kernel2.4.2
0-8)。
可以根据需要使用其他版本的内核,比如Redhat7.3+kernel2.4.20。
目标机:
LiPS,以及应用程序。
2.3需求规定和约束
我们目标系统LiPS,即LinuxPoweredStorage是一个嵌入式Linux操作系统,主要着眼于提供各种文件服务,不包括XGUI;并且足够小,可以装入32MUSB盘或者DOC/DOM等常用设备引导。
3总体设计
3.1基本设计概念
提起“裁减Linux”,最容易想到的方法是以一个已经安装好的系统为基础,删除掉不需要的文件,以减小整个系统的尺寸。
而事实上这个方法几乎是行不通的,因为通过光盘安装的一个Redhat9Linux系统,即便是只选择了比较少的软件包,其所占空间也可以轻松达到300~500MB,想在这个基础上裁减到30MB左右是比较困难的。
更困难的是确定哪些东西是可以删除的?
如果删除了系统必须的文件,可能导致系统不能引导。
另一个途径是从零开始根据需要构建整个系统。
“LinuxFromScratch”采用的就是这种方式,一个个安装需要的软件包。
类似的,更简单的方法是,安装一个完整的Linux系统,然后将必要的软件(可执行程序)、配置文件、库文件、内核等复制出来构建一个小系统。
我们采取后一种方式。
3.2软件结构
LiPS包括3部分:
Linux内核,根文件系统和引导器。
内核(Kernel)提供了一个操作系统的基本功能,如内存管理、进程调度、文件系统、网络等,以及设备驱动程序。
根文件系统(Rootfilesystem)是存放运行、维护系统所必须的各种工具软件、库文件、脚本、配置文件和其他特殊文件(比如设备节点)的地方,也可以安装各种软件包。
通常根文件系统位于某个磁盘分区,而在LiPS中应用了initrd(初始RAM盘)机制,将根文件系统放在RAMDisk中。
引导器(BootLoader)的任务是从引导设备装载内核,引导系统运行。
Linux系统常见的引导器包括早期的LILO和近期的GRUB。
LiPS用的是GRUB。
4内核
4.1创建内核的方法
Linux提供了方便灵活的方法来定制内核,主要步骤包括:
下载安装内核源代码树,配置内核,编译内核。
具体方法请参考相关文档。
关键指令如下:
cd/usr/src/linux-2.4
makemenuconfig
makedep;makeclean;makebzImage
编译成功的内核文件为arch/i386/boot/bzImage.
4.2内核配置
4.2.1概述
makemenuconfig之后可以看到类似如下的内容(编号是为了描述方便而加上的)。
根据内核版本的不同,列出的项目会有差异。
而变化主要发生在发行版为标准内核打的各种补丁上面,其实标准内核是比较稳定的。
如下所示,我们配置的内核版本为2.4.20-8,这个“-8”就是Redhat所打的补丁版本号。
补丁一般是对标准内核错误的修正和新增的功能。
与2.4.20内核配置选项比较会发现,[10,25,30]都属于Redhat的补丁。
一般地,这些补丁选项都不是必须的,因此我们的LiPS内核中都没有包括这些选项。
其实,完全可以通过直接配置一个标准的内核版本(比如2.4.20)来产生我们所需要的内核。
LinuxKernelv2.4.20-8-R2LipsConfiguration
[1]Codematurityleveloptions--->
[2]Loadablemodulesupport--->
[3]Processortypeandfeatures--->
[4]Generalsetup--->
[5]MemoryTechnologyDevices(MTD)--->
[6]Parallelportsupport--->
[7]PlugandPlayconfiguration--->
[8]Blockdevices--->
[9]Multi-devicesupport(RAIDandLVM)--->
[10]Cryptographysupport(CryptoAPI)--->
[11]Networkingoptions--->
[12]TelephonySupport--->
[13]ATA/IDE/MFM/RLLsupport--->
[14]SCSIsupport--->
[15]FusionMPTdevicesupport--->
[16]I2Odevicesupport--->
[17]Networkdevicesupport--->
[18]AmateurRadiosupport--->
[19]IrDA(infrared)support--->
[20]ISDNsubsystem--->
[21]OldCD-ROMdrivers(notSCSI,notIDE)--->
[22]Inputcoresupport--->
[23]Characterdevices--->
[24]Multimediadevices--->
[25]CryptoHardwaresupport--->
[26]Filesystems--->
[27]Consoledrivers--->
[28]Sound--->
[29]USBsupport--->
[30]Additionaldevicedriversupport--->
[31]Bluetoothsupport--->
[32]Kernelhacking--->
[33]Libraryroutines--->
LoadanAlternateConfigurationFile
SaveConfigurationtoanAlternateFile
下面我们以2.4.20内核为例,来详细说明内核的配置,也就是选哪些东西、不选哪些东西。
没有说明的选项,比如“Codematurityleveloptions”,表示不选
。
4.2.2Loadablemodulesupport
[*]Enableloadablemodulesupport
[]Setversioninformationonallmodulesymbols
[*]Kernelmoduleloader
可加载模块支持。
虽然目前所选项目全部编译进内核,但是内核是支持模块的。
可以考虑将一些硬件设备的驱动程序编译为模块,从而减小内核尺寸,同时增加适应不同硬件平台的灵活性。
4.2.3Processortypeandfeatures
(Pentium-III/Celeron(Coppermine))Processorfamily
[*]MachineCheckException
<>ToshibaLaptopsupport
<>Delllaptopsupport
<>/dev/cpu/microcode-IntelIA32CPUmicrocodesupport
<>/dev/cpu/*/msr-Model-specificregistersupport
<>/dev/cpu/*/cpuid-CPUinformationsupport
(off)HighMemorySupport
[]Mathemulation
[]MTRR(MemoryTypeRangeRegister)support
[]Symmetricmulti-processingsupport
[]LocalAPICsupportonuniprocessors
[]UnsyncedTSCsupport
处理器特性。
选择一下Processorfamily,其余基本上都没有选。
HighMemorySupport也可以打开,不清楚有什么用。
4.2.4Generalsetup
[*]Networkingsupport
[*]PCIsupport
(Any)PCIaccessmode
[*]ISAbussupport
[*]PCIdevicenamedatabase
[]EISAsupport
[]MCAsupport
[]Supportforhot-pluggabledevices
[*]SystemVIPC
[*]BSDProcessAccounting
[*]Sysctlsupport
(ELF)Kernelcore(/proc/kcore)format
<>Kernelsupportfora.outbinaries
<*>KernelsupportforELFbinaries
<>KernelsupportforMISCbinaries
[*]PowerManagementsupport
<>KernelsupportforMISCbinaries
[*]PowerManagementsupport
<*>AdvancedPowerManagementBIOSsupport
[*]IgnoreUSERSUSPEND
[*]EnablePMatboottime
[*]MakeCPUIdlecallswhenidle
[*]EnableconsoleblankingusingAPM
[*]RTCstorestimeinGMT
[*]AllowinterruptsduringAPMBIOScalls
[*]UserealmodeAPMBIOScalltopoweroff
总体设置。
这一部分选项比较重要,包括网络、总线、进程、二进制文件格式、电源管理等。
其中APM相关的选项比较搞不清楚,有时候halt–p命令不能关闭系统电源跟这里有关系。
4.2.5PlugandPlayconfiguration
<*>PlugandPlaysupport
<>ISAPlugandPlaysupport
即插即用设置。
4.2.6Blockdevices
<*>Normalfloppydisksupport
<>XTharddisksupport
<>CompaqSMART2support
<>CompaqSmartArray5xxxsupport
<>MylexDAC960/DAC1100PCIRAIDControllersupport
<*>Loopbackdevicesupport
<>Networkblockdevicesupport
<*>RAMdisksupport
(4096)DefaultRAMdisksize
[*]InitialRAMdisk(initrd)support
[*]Perpartitionstatisticsin/proc/partitions
块设备。
软驱也可以不选。
这里的关键选项是Loopbackdevice,RAMdisk和i
nitrd,一定要选中。
DefaultRAMdisksize多少都没有关系。
4.2.7Multi-devicesupport(RAIDandLVM)
[*]Multipledevicesdriversupport(RAIDandLVM)
<*>RAIDsupport
<*>Linear(append)mode
<*>RAID-0(striping)mode
<*>RAID-1(mirroring)mode
<*>RAID-4/RAID-5mode
<*>MultipathI/Osupport
<*>Logicalvolumemanager(LVM)support
MD支持。
软RAID和LVM的支持在这里选择,如果不使用,也可以不选。
4.2.8Networkingoptions
<*>Packetsocket
[*]Packetsocket:
mmappedIO
<>Netlinkdeviceemulation
[*]Networkpacketfiltering(replacesipchains)
[]Networkpacketfilteringdebugging
[*]SocketFiltering
<*>Unixdomainsockets
[*]TCP/IPnetworking
[*]IP:
multicasting
[*]IP:
advancedrouter
[]IP:
policyrouting
[]IP:
equalcostmultipath
[]IP:
useTOSvalueasro