基于PC 104平台嵌入式Linux系统核心定制方法.docx

上传人:b****4 文档编号:3993286 上传时间:2022-11-27 格式:DOCX 页数:9 大小:25.11KB
下载 相关 举报
基于PC 104平台嵌入式Linux系统核心定制方法.docx_第1页
第1页 / 共9页
基于PC 104平台嵌入式Linux系统核心定制方法.docx_第2页
第2页 / 共9页
基于PC 104平台嵌入式Linux系统核心定制方法.docx_第3页
第3页 / 共9页
基于PC 104平台嵌入式Linux系统核心定制方法.docx_第4页
第4页 / 共9页
基于PC 104平台嵌入式Linux系统核心定制方法.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

基于PC 104平台嵌入式Linux系统核心定制方法.docx

《基于PC 104平台嵌入式Linux系统核心定制方法.docx》由会员分享,可在线阅读,更多相关《基于PC 104平台嵌入式Linux系统核心定制方法.docx(9页珍藏版)》请在冰豆网上搜索。

基于PC 104平台嵌入式Linux系统核心定制方法.docx

基于PC104平台嵌入式Linux系统核心定制方法

基于PC/104平台嵌入式Linux系统核心定制方法

2007-10-26    嵌入式在线    收藏|打印

      基于PC/104平台的嵌入式Linux技术在海洋自动观测系统中具有广泛的使用前景,Linux核心定制方法的研究是嵌入式Linux系统研制的关键工作。

本文结合PC/104平台嵌入式Linux系统的研制,详细论述了Linux内核和文件系统的定制方法。

        本文就如何对Linux系统的核心实现定制进行论述,主要内容包括Linux内核部分和文件系统,系统定制的硬件平台是PC/104单片机。

之所以将Linux内核定制、文件系统定制单独讨论,是因为在基于任何平台的Linux系统定制过程中,其内核和文件系统的定制工作都具有相似的特征和相似的过程。

       在基于PC/104平台的嵌入式Linux研制过程中,进行核心定制的主要目的是从需求出发使系统最大程度地满足使用的需要、最大程度地适应系统硬件平台、最优化地支持系统外围设备和使用程序,并且尽量减少对系统资源的占用、减少系统功耗,增强系统的安全性、稳定性、可靠性,另外使系统真正地实现产权自主化。

       内核定制

       一般操作系统的内核从体系结构角度可以划分为两种:

微内核体系结构、单内核体系结构。

微内核体系结构只在内核中包括了一些基本的内核功能,其它部分在用户内存空间运行,这种结构需要在各层之间进行调用,因此会有一定的消耗,使执行效率不如单内核体系结构。

Linux采用单内核体系结构,内核的所有部分都集中在一起,这样能使系统的各部分直接沟通,有效地缩短任务之间的切换时间,提高了系统的响应速度,实时性好并提高了CPU的利用率,但在系统比较大的时候体积也比较大,和嵌入式系统容量小、资源有限的特点不符合,因此需要进行非常精细的定制以适应嵌入式系统的需要。

       内核版本

       Linux的源程序是完全公开的,任何人只要遵循GPL,就可以对内核加以修改并发布给他人使用。

Linux的开发采用的是双树系统。

一个树是稳定树(stabletree),另一个树是非稳定树(unstabletree)或称开发树(developmenttree)。

一些新特性、实验性改进等都将首先在开发树中进行,如果在开发树中所做的改进也可以使用于稳定树,那么在开发树中经过测试以后,在稳定树中将进行相同的改进。

       一旦开发树经过了足够的发展,开发树就会成为新的稳定树。

开发树就体现在源程序的版本号中;源程序版本号的形式为x.y.z,对于稳定树来说,y是偶数;对于开发树来说,y比相应的稳定树大一(是奇数)。

到目前为止,稳定树的最高版本是2.4.21,开发树的最新版本是2.5.73。

本项目采用的内核版本是2.2.20,选择2.2.20版本内核的主要原因有:

        a.版本为2.0及以前内核中的设备驱动不如2.2版本的全面;

        b.版本为2.2的内核增加了很多新特性;

        c.新的版本为2.4的内核对PC/104的CPU块支持不好;

        d.由于不明原因版本为214的内核对PC/104;

        e.版本为2.4内核相对庞大,编译后的内核文件也相对较大; 

        f.版本为2.2的内核已完全能够满足本项目的需要。

       目前,大多数面向数据采集的嵌入式Linux研制工作都是基于版本2.0/2.2内核进行的。

实际上,内核版本的提升,其复杂度也随之升高,也会给嵌入式系统的定制工作带来很多的困难。

       内核设置

       内核设置工作可以通过直接修改内核源代码中的Makefile文件、Config.in文件和内核源代码根目录下的.config文件来完成。

内核源代码中的每个目录都有各自的用途,每个子目录下也都有相应的Makefile文件。

例如,在目录drivers/block/Config.in文件中有如下语句:

if[“$CONFIG_BLK_DEV_HD_DE”=

“y”-o“$CONFIG_BLK_DEV_HD_ONLY”=

“y”];then

define_boolCONFIG_BLK_DEV_HDy

else

define_boolCONFIG_BLK_DEV_HDn

fi

       这段语句的作用是定义在块设备中DE块设备驱动可以被编译在内核中也可以被编译成内核模块。

采用修改配置文件的方式设置内核比较复杂,而且容易出现错误,但是对深入剖析和理解内核帮助很大。

比较有效的方式还是直接利用Linux内核提供的工具进行内核设置。

在Linux源代码目录下,Linux内核设置命令是:

#makemenuconfig

       命令执行后会显示一个字符型菜单配置环境,在该环境中有以下选项,通过这些选项设置可以定制Linux内核的各项功能,并对内核实现裁减。

下面对主要设置选项进行介绍:

       

(1)Codematurityleveloptions代码成熟等级。

此处只有一项:

promptfordevelopmentand/orincompletecode/drivers,如果要试验现在仍处于实验阶段的功能,就必须把该项选择为Y了;否则可以把它选择为N。

在这部分,设定是否允许内核的一些试验选项被使用。

       

(2)Loadablemodulesupport对可加载模块的支持。

可加载模块码不是内核的一部分,但是当需要它的时候,可以被同内核一起加载并使用。

如果将内核代码编译成可加载模块,可以使内核更小,而且更稳定。

但是需要注意的是,如果将文件系统代码编译为可加载模块,将使内核无法读取文件系统,因此在启动的时候内核无法加载配置文件。

       

        这里面有3项:

 

       Enableloadablemodulesupport:

提供内核支持; 

       Setversioninformationonallmodulesymbols:

设置所有模块的版本信息; 

       Kernelmoduleloader:

让内核在启动时有自己装入必需模块的能力。

       (3)Processortypeandfeatures 

       CPU类型选项。

可以选择处理器的类型,通常“/dev/cpu”选项更高级。

 

       Processorfamily:

根据使用情况选择CPU类型。

 

       HighMemorySupport:

大容量内存的支持。

可以支持到4G、64G,只有当计算机有超过1GB内存(不是磁盘空间)时才是必须的。

 

       Mathemulation:

协处理器仿真。

如果计算机是386或486SX的CPU,则须打开该选项,因为这些CPU没有Linux需要的浮点运算单元(MathEmulation,也称数学协处理器),所以必须选择该选项。

 

       MTTRsupport:

MTTR支持选项允许在PCI或者AGP总线众进行更快速的通讯。

 

       Symmetricmulti-processingsupport:

对称多处理支持。

       (4)Generalsetup

       常规选项设置。

在这里可以制定特定的内核常规选项,比如网络支持。

网络支持是Linux内核的重要组成部分,这些选项通常是打开的。

现在的Linux发行版以ELF格式作为它们的“内核核心格式”,这是不同系统库(systemlibraries)的标准格式。

“ELF”是“a1out”格式的继承,几乎所有Linux程序都使用ELF库,有些老的程序仍然需要a1out格式支持。

主要选项有:

 

       Networkingsupport:

网络支持。

 

       PCIsupport:

PCI支持。

 

       PCIaccessmode:

PCI存取模式。

可供选择的有BIOS、Direct和Any。

 

       Supportforhot-pluggabeldevices:

热插拔设备支持。

但Linux支持的不是太好,可不选。

 

       PCMCIA/CardBussupport:

PCMCIACardBus支持。

有PCMCIA就必选了。

 

       SystemVIPC:

允许程序通信和同步。

 

       BSDProcessAccounting:

保持诸如进程结束时产生的错误代码的。

 

       Sysctlsupport:

允许程序修改某些内核选项而不需要重新编译内核或者重新启动计算机。

 

       以上3项是有关进程处理/IPC调用的,主要就是SystemV和BSD两种风格。

如果不是使用BSD,可以按照缺省选择。

PowerMarchagementsupport:

电源管理支持。

AdvancedPowerManagementBIOSsupport:

高级电源管理BIOD支持。

       (5)MemoryTechnologyDevice(MTD) 

       MTD设备支持。

这个选项使Linux可以读取闪存卡(FlashCard)之类的存储器,2.4版本内核 

       开始支持DOC。

 

       (6)Parallelportsupport并口支持。

 

       (7)PlugandPlayconfiguration即插即用支持。

       (8)Blockdevices块设备支持。

 

       

       子选项如下:

 

       NormalPCfloppydisksupport:

普通PC软盘支持。

 

       XTharddisksupport:

XT硬盘支持 

       MulexDAC960/DAC1100PCIRAID 

       Controllersupport:

RAID镜像选项。

 

       Loopbackdevicesupport:

DOC要求有这个支持; 

       Networkblockdevicesupport:

网络块设备支持。

 

       Logicalvolumemanager(LVM)support:

逻辑卷管理支持。

 

       Multipledevicesdriversupport:

多设备驱动支持。

 

       RAMdisksupport:

RAM盘支持。

       (9)Networkingoptions网络选项。

 

       Packetsocket:

网络包套接口。

 

       Kernel/Usernetlinksocke:

内核和用户进程双向通信。

 

       Networkfirewalls:

防火墙支持。

 

       UNIXdomainsockets:

UNIX的socket。

 

       TCP/IPnetworking:

TCP/IP支持。

 

       TheIPXprotocol:

IPX协议支持。

       (10)TelephonySupport 

       电话支持。

Linux下可以支持电话卡,这样就可以在IP上使用普通的电话提供语音服务了。

电话卡和modem没有任何关系。

 

       (11)ATA/DE/MFM/RLLsupport

有关各种接口的硬盘/光驱/磁带/软盘支持。

DOC不需要该选项,CFC需要选择其中的部分选项。

 

       (12)SCSIsupportSCSI设备的支持。

 

       (13)IEEE1394(FireWire)support

要Fireware硬件来提高串行总线的性能。

 

       (14)I2Odevicesupport

需要I2O接口适配器才能支持,在智能Input/Output(I2O)体系接口中使用。

 

       (15)Networkdevicesupport

网络设备支持。

列出常见网卡的驱动程序。

 

       (16)AmateurRadiosupport

配置业余无线广播。

 

       (17)IrDA(infrared)support

红外支持。

 

       (18)ISDNsubsystem

ISDN上网支持。

 

       (19)OldCD-ROMdrivers(notSCSI、notIDE)非SCSI/DE口的光驱。

       (20)Characterdevices 

       

       字符设备。

其中有:

 

       I2Csupport:

I2C是Philips极力推动的微控制使用中使用的低速串行总线协议。

如果要选择下面的VideoForLinux,该项必选。

 

       Mice:

鼠标。

现在可以支持总线、串口、PS/2、C&T82C710mouseport、PC110digitizerpad。

 

       Joysticks:

手柄支持。

WatchdogCards:

如果把这个选中,那么就会在/dev下创建一个名为watchdog的文件,它可以记录系统的运行情况,一直到系统重新启动的1min左右。

有了这个文件,就可以恢复系统到重启前的状态了。

 

       VideoForLinux:

支持有关的音频/视频卡。

       Ftape,thefloppytapedevicedriver:

 

       PCMCIAcharacterdevicesupport:

上边介绍了。

       (21)Filesystems文件系统。

介绍以下几项:

 

       Quotasupport:

Quota可以限制每个用户可以使用的硬盘空间的上限,在多用户共同使用一台主机的情况中十分有效。

 

       DOSFATfssupport:

DOSFAT文件格式的支持,可以支持FAT16、FAT32。

ISO9660CD-ROMfilesystemsupport:

光盘使用的就是ISO9660的文件格式。

 

       NTFSfilesystemsupport:

ntfs是NT使用的文件格式。

/ procfilesystemsupport:

/proc文件系统是Lnux提供给用户和系统进行交互的通道,应该选上,否则有些功能没法正确执行。

 

       还有另外3个大类是:

NetworkFileSystems(网络文件系统)、PartitionTypes(分区类型)、NativeLanguageSupport(本地语言支持)。

值得一提的是NetworkFileSystems里面的两种:

NFS和SMB分别是Linux和Windows相互以网络邻居的形式访问对方所使用的文件系统。

       (22)Consoledrivers控制台驱动。

一般使用VGAtextconsole就可以了,标准的80325的文本控制台。

 

       (23)Sound声卡驱动。

 

       (24)USBsupprotUSB支持。

很多USB设备,比如鼠标、调制解调器、打印机、扫描仪等,在Linux都可以得到支持。

        (25)Kernelhacking配置此选项可以在系统崩溃时,也可以进行一定的工作了。

但对于普通用户是用不着这个功能的。

       内核编译

 

       内核配置结束后就可以编译内核了,内核编译只有几个指令,但是内核编译的时间可能会很长。

在执行内核配置之前可以先执行#makemrproper命令,检查内核源程序,以发现内核文件是否完备。

       内核编译的命令如下:

       #makedep:

使内核正确设置所有模块的依赖关系。

 

       makeclean:

清除所有已存在的目标文件,已存在的目标文件主要由上次内核编译形成,如果忘记做这一步,生成的内核将会非常庞大。

 

       #makezImage/zdisk/bzImage/zlilo:

生成一个经过压缩的内核。

如果要制作成启动盘就使用makezdisk,而makezlilo则把生成的内核加入LLO中,不过在最初几次编译内核时不要使用此项,以免系统因生成的内核有故障而不能启动。

makebzImage用于生成超过1M文件大小的内核,makezImage生成小于1M的内核。

内核文件是经过压缩处理的。

如果内核中使用了可装卸的模块,则需要依次运行以下指令:

 

       #makemodules:

编译内核模块。

 

       #makemodules_install:

安装内核模块。

       编译后的内核文件存放在arch/i386/boot/目录下。

以下为一个内核编译配置脚本,采用该脚本编译的内核可运行于当前所有x86平台,不具备网络和串口支持,内核编译后的大小在200K以内。

       #基于x86体系结构

       CONFIG_X86=y 

       #是内核中最新功能(或处于实验中的功能)可用 

       CONFIG_EXPERIMENTAL=y 

       #选择处理器类型和数学处理器仿真

 CONFIG_M386=y 

       CONFIG_MATH_EMULATION=y 

       #设置进程间通信协议 

       CONFIG_SYSVIPC=y 

       CONFIG_SYSCTL=y 

       #设置可支持的二进制文件格式 

       CONFIG_BINFMT_ELF=y 

       #块设备支持,CFC和DOC在此设置不同 

       #设置内核支持DE驱动器 

       CONFIG_BLK_DEV_DE=y 

       CONFIG_BLK_DEV_DEDISK=y 

       CONFIG_BLK_DEV_CMD640=y 

       CONFIG_BLK_DEV_RZ1000=y 

       CONFIG_BLK_DEV_DEPCI=y 

       CONFIG_BLK_DEV_DEDMA=y 

       CONFIG_IDEDMA_AUTO=y 

       CONFIG_BLK_DEV_CS5530=y 

       CONFIG_BLK_DEV_LOOP=y 

       CONFIG_PARDE_PARPORT=y 

       #字符设备设置 

       CONFIG_VT=y 

       #文件系统设置 

       #支持/proc、ext2文件系统 

       CONFIG_PROC_FS=y 

       CONFIG_EXT2_FS=y 

       #支持字符型终端 

       CONFIG_VGA_CONSOLE=y

       网络和串口通信功能

       Linux内核内置对网络和串口的支持,具体到内核编译,只要设置部分内核参数即可。

以下是网络设备的支持,需要注意的是其中PCI设备支持选项和以太网设备支持选项,如果选择网卡,这两类设备都必须被支持。

网卡的驱动程序如果未包含到内核,则可以模块形式加载。

CONFIG_NET=y

CONFIG_PCI=y

CONFIG_PCI_GOANY=y

CONFIG_PCI_BIOS=y

CONFIG_PCI_DIRECT=y

CONFIG_PCI_QUIRKS=y

CONFIG_PCI_OLD_PROC=y

CONFIG_NETLINK=y

CONFIG_INET=y

CONFIG_NET_ETHERNET=y

       以下是串口设置参数,如果单纯支持两个串口,则设置CONFIG_SERIAL项即可。

在系统需要4个以上串口支持,或需要基于串口的终端控制时,需要设置余下3个参数。

CONFIG_SERIAL=y

#CONFIG_SERIAL_CONSOLE

#CONFIG_SERIAL_EXTENDED

#CONFIG_SERIAL_NONSTANDARD

本项目中仅设置两个串口支持。

       文件系统定制

       Linux操作系统为方便管理把外存抽象成一个可随时访问的块,为方便管理和使用又在块设备层上再作抽象,把块设备抽象成为文件系统,由文件系统管理块设备上的数据等,文件系统有很多种,不同文件系统有不同的管理方式,造成系统不兼容,为解决这个问题,在文件系统上又作一次抽象,提出了虚拟文件系统的概念。

Linux虚拟文件系统为用户提供了一个公共的接口,而不需要了解物理设备或逻辑系统的细节,系统允许系统管理员将在任何物理设备上的逻辑文件系统挂接在文件目录中。

       目录结构

       Linux文件系统符合FHS(FilesystemHierarchyStandard)标准,由一些目录和文件组成。

根据安装的方式不同,这些目录可能是不同的文件系统。

通常,一个系统可以有多个文件系统组成:

根分区文件系统(/),和安装在/usr下的文件系统,还有其他安装在/home、/var文件系统。

       Linux目录结构起始和根目录,其中包含以下目录:

 

       /vmlinuz 

       内核文件,内核文件的位置可由系统引导程序指定。

 

       /bin 

       包含系统可执行程序,可以在这个目录下找到linux常用的命令。

 

       /boot 

       存放系统启动时所需的各项文件。

      /dev

      包含所有的设备文件,这些设备是和系统的硬件有一定相互对应关系的特殊文件,分为块设备、字符设备和特殊设备,dev是设备(device)的英文缩写。

目录中包含了所有Linux系统中使用的外部设备,但是这里并不是放的外部设备的驱动程序,它实际上是一个访问这些外部设备的标识。

在Linux系统中,对外部设备的访问和访问一个文件、一个目录没有任何区别。

/cdrom

    用于将光驱文件系统加载到这个目录下。

/etc

    Linux系统的绝大部分配置文件都存放在这里。

比如网络配置文件,文件系统,XWindow配置文件,设备配置信息,设置用户信息等都在这个目录下。

/sbin

    存放系统程序。

和/bin目录类似,但这些文件往往是用来进行系统管理或提供系统服务的,一般只有root才有运行的权限。

/home

       存放一般用户个人目录的主目录,如果建立一个用户,用户名是“xx”,那么在/home目录下就有一个对应的/home/xx路径。

/lib

       存放系统的各种库文件,lib是库(library)英文缩写。

这个目录用来存放系统动态连接共享库,采用动态链接编译的使用程序都会用到这个目录下的共享库。

/lost+found

      用于放置垃圾文件,这个目录在大多数情况下都是空的。

但是如果正

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1