嵌入式Linux系统裁剪与微内核化.docx

上传人:b****0 文档编号:17459644 上传时间:2023-07-25 格式:DOCX 页数:12 大小:835.35KB
下载 相关 举报
嵌入式Linux系统裁剪与微内核化.docx_第1页
第1页 / 共12页
嵌入式Linux系统裁剪与微内核化.docx_第2页
第2页 / 共12页
嵌入式Linux系统裁剪与微内核化.docx_第3页
第3页 / 共12页
嵌入式Linux系统裁剪与微内核化.docx_第4页
第4页 / 共12页
嵌入式Linux系统裁剪与微内核化.docx_第5页
第5页 / 共12页
嵌入式Linux系统裁剪与微内核化.docx_第6页
第6页 / 共12页
嵌入式Linux系统裁剪与微内核化.docx_第7页
第7页 / 共12页
嵌入式Linux系统裁剪与微内核化.docx_第8页
第8页 / 共12页
嵌入式Linux系统裁剪与微内核化.docx_第9页
第9页 / 共12页
嵌入式Linux系统裁剪与微内核化.docx_第10页
第10页 / 共12页
嵌入式Linux系统裁剪与微内核化.docx_第11页
第11页 / 共12页
嵌入式Linux系统裁剪与微内核化.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

嵌入式Linux系统裁剪与微内核化.docx

《嵌入式Linux系统裁剪与微内核化.docx》由会员分享,可在线阅读,更多相关《嵌入式Linux系统裁剪与微内核化.docx(12页珍藏版)》请在冰点文库上搜索。

嵌入式Linux系统裁剪与微内核化.docx

嵌入式Linux系统裁剪与微内核化

嵌入式Linux系统裁剪与编译

1构建交叉编译环境

1.1交叉编译原理简介

嵌入式开发一般都是使用交叉编译环境。

交叉编译就是在一台计算机上编译软件,其生成的软件在另一台不同类型处理器的机器上运行。

因为嵌入式硬件性能一般无法和家用计算机相比,无法构建开发和编译环境。

所以我们只能“借”家用计算机来对目标平台的软件进行开发和编译。

此时称家用计算机为宿主机,而目标平台机器为目标机。

每一个软件。

在编译过程中。

都要经过一系列处理,才能从源代码变成可执行目标代码。

这一系列处理包括,预编译、高级语言编译、汇编、连接及其重定位。

这一套流程里面用到的工具和库的组合,就称为工具链。

Linux上常用的开发工具GCC,它包含预编译器cpp,c语言编译器gcc,汇编器as和连接器ld。

这个工具链中,还有用于处理二进制包的工具包binutils,整个工具链应该是GCC+binutils+Glibc。

为了编译在目标机上运行嵌入式Linux内核,首先我们必须编译目标平台的编译链,而这个链是存放在主机上,故名为交叉编译链。

1.2下载构建交叉编译链的工具及其补丁

Binutils-2.19.1Busybox-1.13.0GCC-4.3.3GMP-4.2.4

MPFR-2.4.1uClibc-0.9.30.1

制作交叉编译链

定义环境变量

定义MYSYS变量为嵌入式系统主目录变量、MYSYS_TARGET变量为目标平台、MYSYS_HOST为主机平台。

使用export命令或者将此变量添加.bashrc文件中。

cat>~/.bashrc<<“EOF”

set+h

umask022

MYSYS=/mnt/mysys

LC_ALL=POSIX

PATH=${MYSYS}/ctools/bin:

/bin:

/usr/bin

exportMYSYSLC_ALLPATH

EOF

这样我们设置了生成系统的根目录变量。

exportMYSYS_HOST=”${MACHTYPE}”

exportMYSYS_TARGET=”[XXX]-ulibc-linux-gnu”

这两个变量都是编译过程需要使用的.XXX是目标平台,如arm平台,可写为arm-ulibc-linux-gun。

首先需要安装内核头文件。

makemrproper

makeARCH=${MYSYS_ARCH}headers_check

makeARCH=${MYSYS_ARCH}INSTALL_HDR_PATH=destheaders_install

制作工具链的时候需要使用部分内核头文件。

编译GMP。

../configure--prefix=/ctools--enabled-mpbsd

make

makeinstall

编译MPFR。

LDFLAGS="-Wl,-rpath,/ctools/lib"\

./configure--prefix=/ctools--enable-shared\

--with-gmp=/ctools

cp-rvdest/include/*${MYSYS}/usr/include

make

makeinstall

第一次编译GCC

AR=arLDFLAGS="-Wl,-rpath,/ctools/lib"\

../gcc-4.3.3/configure

--prefix=${MYSYS}/ctools\

--build=${MYSYS_HOST}--host=${MYSYS_HOST}\

--target=${MYSYS_TARGET}--with-sysroot=${MYSYS}

--disable-nls--disable-shared\

--with-mpfr=/ctools--with-gmp=/ctools\

--without-headers--with-newlib

--disable-decimal-float\

--disable-libgomp

--disable-libmudflap--disable-libssp\

--disable-threads--enable-languages=c

make

makeinstall

此时的编译出来的gcc,是不可以编译c程序的。

因为没有连接库。

同时安装的Linux头文件也是这一步被使用。

GCC必须掌握目标体系的全部细节,这由Linux的内核头文件给出。

编译uclibc库,当然也可以编译glibc库。

编译最终版gcc

../gcc-4.3.3/configure--prefix=${CLFS}/cross-tools\

--build=${CLFS_HOST}--target=${CLFS_TARGET}\

--host=${CLFS_HOST}--with-sysroot=${CLFS}\

--disable-nls--enable-shared

--enable-languages=c

--enable-c99

--enable-long-long

--with-mpfr=/cross-tools\

--with-gmp=/cross-tools

make

makeinstall

这样就得到了交叉编译链。

1.3下载Linux内核并进行裁剪

Linux-2.6.30.5

2Linux内核编译与裁剪

2.1配置内核的几种命令:

makeconfig:

基于文本的最为传统的配置界面,不推荐使用。

makemenuconfig:

基于文本选单的配置界面,字符终端下推荐使用。

makexconfig:

基于图形窗口模式的配置界面,Xwindow下推荐使用。

makeoldconfig:

如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦。

makeARCH=${CLFS_ARCH}CROSS_COMPILE=${CLFS_TARGET}-menuconfig通过对嵌入式需求分析,通过必要的勾选,即可完成对linux内核裁剪和重编译。

2.2讲解一些内核选项:

2.2.1Generalsetup常规设置

子选项Promptfordevelopmentand/orincompletecode/drivers是测试版本代码。

Supportforpagingofanonymousmemory(swap)选择是否支持内存随机页面支持(SWAP),如果嵌入式存储空间过小,可以去掉。

可以提高运行速度。

Auditingsupport审计支持,SELinux会需要用到它。

InitialRAMfilesystemandRAMdisksupport初始化RAM文件系统和RAM磁盘支持,初始RAM文件系统是一种ram文件系统,它被启动器装载,在启动程序前以root形式挂载。

Initramfssourcefiles初始ram文件系统源文件。

有.cpio后缀的压缩包。

Optimizeforsize尺寸优化,可以得到更小的内核。

Configurestandardkernelfeatures(forsmallsysytems)为小系统配置标准内核特性。

2.2.2Loadablemodulesupport可加载模块支持

Enableloadablemodulesupport允许可装载模块支持。

此选项可以让你的内核支持模块。

模块是一小段代码,编译后可在系统运行动态加入内核,从而为内核增加一些特性或是对某种硬件进行支持。

一般一些不常用到的驱动或特性可以编译为模块以减小内核的体积。

在运行时可以用modprobe命令来加载它到内核中去。

Moduleunloading模块卸载,能卸载不再使用的模块。

可以使内核尺寸减小一些。

Forcedmoduleunloading强制内核模块卸载,强行卸载模块,即使内核认为不安全,内核会理解卸载模块

2.2.3Enabletheblocklayer允许块设备

SupportforLargeBlockDevices提供对2TB活着更大的块设备支持。

SupportforLargeSingleFile提供对大文件支持,为大于2TB的文件。

DeadlineI/OschedulerDeadlineI/O调度简单紧密,在单进程的I/O磁盘调度上,它的工作方式几乎和抢先式调度器相同,因此也是一个好的选择。

2.2.4Processortypeandfeatures处理器类型及特性(此处可以针对嵌入式芯片进行裁剪)

Symmetricmulti-processingsupport(SMP)多处理器支持。

RDCR-321xSocRDCR-321x系列芯片

Processorfamily及其子选项,可以针对选择处理器。

GenericX86support对X86CPU类型进行优化。

MaximumnumberofCPUs最大支持的CPU数量。

Multi-coreschedulersupport多核调度器支持。

PreemptibleKernel可抢先式内核,这个选项通过使所有内核代码编译为“可抢先”来降低内核延迟。

这个非常适合嵌入式编译内核。

HighMemorySupport高容量内存支持。

如果内核不会运行在高于1G内存的机器上,就去掉。

Timerfrequency时钟频率的设置。

Built-inkernelcommandline内嵌内核命令行,允许编译内核的时候指定

2.2.5Powermanagementoptions电源管理选项

SuspendtoRAMandstandby内存挂起和待机功能。

允许系统休眠,主内存仍带电保存相关信息。

Hibernation休眠

ACAdapterAC交流电源适配器

Battery电池Button风扇

ARMBIOSsupport高级电源管理支持。

2.2.6Busoptions总线选项

2.2.7Executablefileformants可执行文件格式

KernelsupportforELFBinariesELF二进制文件内核支持

2.2.8Networkingsupport网络支持

Packetsocket包套接字

UnixdomainsocketsUNIX域套接字

THEIPv6protocolIPv6协议。

SecurityMarking给网络套接字提供安全标志。

Networkpacketfilteringframework网络包过滤框架。

AsynchronousTranserMode(ATM)异步传输模式,如果有ATM网卡,可选。

Appletalkprotocolsupport苹果电脑用于连接网络的协议。

ldEthernetBridging802.ld以太网桥接。

802.1QVLANsupport802.1QVLAN接口支持。

TheIPXprotocolIPX协议,这是对Novell网络的协议,这个驱动会使内核增大16KB.

Bluetoothsubsystemsupport蓝牙子系统支持。

Phonetprotocolsfamily网络电话协议家族。

Wireless无线支持。

IrDA(infrared)subsystemsupport红外子系统支持。

2.2.9DeviceDrivers设备驱动

MTDpartitioningsupport如果有一个设备,需要将他分成几个分区。

Parallelportsupport并行端口支持。

PlugandPlaysupport即插即用设备。

Blockdevices块设备。

Normalfloppydisksupport普通软盘支持。

Networkblockdevicesupport网络块设备。

LowPerformanceUSBBlockdriver低端USB块驱动设备。

RAMblockdevicesupportRAM块设备支持

PacketwritingonCD/DVDmediaCD/DVD媒体包写入。

ATAoverEthernetsupport以太网ATA支持。

ATA/ATAPI/MFM/RLLsupport如果系统是纯种SCSI,那么可以选择N。

SupportforDATA支持。

SCSIdevicesupportSCSI设备支持。

SCSIdisksupportSCSI磁盘支持。

RAIDsupportRAID支持。

Networkdevicesupport网络设备支持。

Inputdevicesupport输入设备支持。

Graphicssupport图形支持。

Sound声音。

HIDDevicesHID设备。

USBHumanInterfaceDevicesupports人性化接口设备。

USBsupportUSB支持。

MMC/SDcardsupportMMC/SD卡支持。

可以从选项知,这是进行嵌入式裁剪非常重要的一个选项。

我们可以为嵌入式环境量身打造我们需要的驱动,去掉我们不需要的驱动,那么Linux内核将减小很多。

2.2.10FirmwareDivers固件驱动

2.2.11Filesystems文件系统

Secondextendedfssupport第二次扩展文件支持,既Ext2文件系统。

Ext3journallingfilesystemsupportExt3日志文件系统。

Ext3extendedattributesExt3扩展属性。

TheExtended4(ext4)filesystemext4扩展文件系统。

JFSfilesystemsupportJFS文件系统支持。

XFSfilesystemsupportXFS文件系统支持。

OCFS2filesystemsupportOCFS2文件系统。

Kernelautomountersupport内核自动挂载支持。

CD-ROM/DVDFilesystemsCD-ROM/DVD文件系统。

DOS/FAT/NTFilessystemsDOS/FAT/NT文件系统。

VFATfssupportVFAT文件系统支持。

NTFSfilesystemsupportNTFS文件系统支持。

/procfilesystemsupport/proc文件系统支持,提供系统状态信息。

Virtualmemoryfilesystemsupport虚拟文件系统支持。

Tmpfs是一个把所有文件保持在虚拟内存里面的文件系统。

JournallingFlashFileSystmeV2(JFFS2)support日志闪存文件系统支持。

CompressedROMfilesystemsupport压缩ROM文件系统支持。

NetworkFileSystems网络文件系统。

对嵌入式文件系统进行定制和裁剪是必要的,根据需求选择合适的文件系统。

然后在此选项进行配置,能有效裁剪linux。

2.2.12Kernelhacking内核调试

2.2.13Securityoptions安全选项

3内核裁剪结束,编译内核源码。

对内核配置完毕,即可进行内核源代码编译。

MakeARCH=${MYSYS_ARCH}CROSS_COMPILE=${MYSYS_TARGET}-

INSTALL_MOD_PATH=${MYSYS}module_install编译结束,可以得到Linux内核镜像VMlinux。

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2