内核裁剪和编译
① 有关linux内核移植时的裁剪涉及哪些内容
嵌入式Linux系统的移植主要有U-Boot、Linux内核、文件系统这三部分。
Uboot是在系统上电时开始执行,初始化硬件设备,准备好软件环境,然后才调用Linux操作系统内核。文件系统是Linux操作系统中用来管理用户文件的内核软件层。文件系统包括根文件系统和建立于Flash内存设备之上文件系统。根文件系统包括系统使用的软件和库,以及所有用来为用户提供支持架构和用户使用的应用软件,并作为存储数据读写结果的区域。
可将Linux系统移植过程大致需要分成6个步骤:
1) 准备工作,包括下载源码、建立交叉编译环境等。交叉开发是指在开发主机上安装开发工具,编辑、编译目标板的引导程序、内核和文件系统,使其能在目标板上运行。
2) 配置和编bootloader(引导装载程序)。通过这段小程序,可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统硬件环境,为最终调用操作系统内核做好准备。
3) 配置和编译Linux内核,对其进行相应的裁剪,修改内核以支持相关的硬件设备。
4) 为大容量NAND Flash移植YAFFS文件系统,并将该文件系统加入Linux内核中;
5) 制作RAMdisk来挂载根文件系统。Linux系统中的文件和设备是通过文件系统来组织的。文件系统的存在使得数据和设备可以被有效而透明地存取访问。一个linux的最简根文件系统应该包括支持linux系统正常运行的基本内容,包括系统使用的软件和库,以及所有用来为用户提供基本支持的架构和指令。
6) 烧写、调试系统;如果调试出错,则需要重新配置,返回上述步骤(2)。
② linux 内核裁剪 + linux驱动,一般需要多少时间
内核裁剪熟悉了十几分钟搞定,要是不熟悉,就要很久了,因为内核也分目录的,每目录下的每项都要明白是干什么的才能取舍。驱动一般包含在内核内,linux系统通过内核管理设备,外部安装的较少。
我常用menuconfig来编译内核。在gentoo系统下有genkernel软件,更方便一些。当然,gentoo系统安装起来不方便。
③ WINCE内核裁剪和生成内核镜像的基本步骤
1.描述WinCE内核的裁剪和生成内核镜像的基本步骤。
1 创建操作系统平台设计,在Platform builder中选择"New Platform",然后选择存储路径,BSP,以及设计模板
2 添加必要的特征,在Catalog面板下添加自己需要的特征
3 配置项目属性,配置编译选项,地区设置,环境变量等
4 使用Platform builder中的"Build OS"->"Sysgen",生成内核镜像,如果遇到任何错误,再分析源码及项目配置来解决
2.简述SDK在WinCE应用开发中的作用
SDK的使用使WinCE操作系统与平台应用程序并行开发成为了可能。SDK中包含特定WinCE平台的头文件以及库文件,可以使应用程序开发不必等待操作系统开发完成才可以编译与调试。从而大大增加了WinCE开发的速度与并行度
3.简述你对嵌入式交叉编译环境的理解
所谓交叉编译环境就是指在当前指令集的平台上编译另外一种指令集的程序代码。比如我们通常使用ARM来构建WinCE系统,但是我们开发工具是使用x86指令集的PC,所以要在x86指令集上的CPU编译出ARM(或thumb)指令集的代码,就需要交叉编译环境来将源代码编译成ARM(或Thumb)指令集的程序,而Platform builder就可以是一种交叉编译环境,还有比如ARM公司的ADS1.2也是一种交叉编译环境
④ 如何按需优化和裁剪自己的内核
分两部分回答
一、 裁剪
一般裁剪都是将不用的代码删除掉,linux内核为宏内核,从kernel.org上下载的代码都是全球众多开发者提交的,包括内核核心(进程调度,内存控制等),驱动,各个模块(如网络模块)还有众多不同架构(x86 ,power pc , arm ,mip 等)的代码都在其中,里面不同文件放置不同内容的代码,如arch下放置不同架构的东西,裁剪一般是指,将你不用的东西删除掉,如不用的驱动,其他架构的东西等。
二、 优化
一般底层的优化都由各个厂商来完成,如cpu的优化由涉及到各自的厂商如intel,AMD,NVIDIA等,系统一些调度之类的东西由不同开发者提交,最后测试稳定,且符合内核设计的思想则会在下个版本更新中加入到内核中,想这种细节的东西交给他们厂商自己维护就好,咱们普通开发者主要的优化在于常用的一些功能的优化,如需要自己定义个系统调用,来控制自己编写的设备,将一些不用的模块删除(或者不编译),将常用的内核模块如网络直接编写进内核中,等等
总结:优化和裁剪都是建立在客户或者对目标群体的需求比较明确的前提下,并且预留出一定的余量,可方便后期升级,如加入新的模块。
大致现在就想到这么多,有不明白 的继续问
⑤ linux内核裁剪是否指的就是通过make menuconfig进行内核配置编译
就是通过menuconfig选择适合某平台(如arm)的功能,将多余的东西屏蔽掉,再生产一个镜像文件,就可以说是剪裁内核了。
裁剪Linux不一定要对内核源码了如指掌,当然能学就多学点还是必须的。
可以看看《构建嵌入式Linux系统》,好像是这个名,记不清楚了。红白色封面的。另外建议购买一个ARM开发板,一般买开发板都是送相应的Linux内核源码。你可以任意配置给内核,加入你想要的功能,删掉无用的功能。这样上手非常快。
⑥ linux内核裁剪是什么
类型选择安装你需要的功能,因为Linux安装好后很多你用不上,当时安装的时候没有选项给你勾选,所以你就删除掉,《Linux就该这么学》内核裁剪的思路
首先,输入命令 make menuconfig进入配置菜单;
然后,退出且保存配置;
保存成功后,在linux源码根目录下.config文件根据menueconfig的配置生成对应的宏定义;
最后,编译内核时候,编译器会根据.config文件里的宏定义进行内核裁剪。
⑦ 怎么裁剪linux内核
在menuconfig中配置:
详细介绍内核配置选项及删改情况
第一部分:全部删除
Code maturity level options ---> 代码成熟等级选项
[]Prompt for development and/or incomplete code/drivers 默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.不选。
第二部分 :除以下选项,其它全部删除
General setup—〉
System V IPC (IPC:Inter Process Communication)是组系统调用及函数库,它能让程序彼此间同步进行交换信息。某些程序以及DOS模拟环境都需要它。为进程提供通信机制,这将使系统中各进程间有交换信息与保持同步的能力。有些程序只有在选Y的情况下才能运行,所以不用考虑,这里一定要选。
第三部分:除以下选项,其它全部删除
Loadable mole support ---> 可引导模块支持 建议作为模块加入内核
[] Enable loadable mole support 这个选项可以让你的内核支持模块,模块是什么呢?模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块了,否在无法启动系统。
[]Automatic kernel mole loading 一般情况下,如果我们的内核在某些任务中要使用一些被编译为模块的驱动或特性时,我们要先使用modprobe命令来加载它,内核才能使用。不过,如果你选择了这个选项,在内核需要一些模块时它可以自动调用modprobe命令来加载需要的模块,这是个很棒的特性,当然要选Y喽。
第四部分:全部删除
Block layer-----〉块设备
第五部分:除以下选项,其它全部删除
Processor type and features ---> 处理器类型
Subarchitecture Type (PC-compatible) ---> 这选项的主要的目的,是使Linux可以支持多种PC标准,一般我们使用的PC机是遵循所谓IBM兼容结构(pc/at)。这个选项可以让你选择一些其它架构。我们一般选择PC-compatible就可以了。
Processor family(386) : 它会对每种CPU做最佳化,让它跑的好又快,一般来说,你是什么型号的就选什么型号的就好。我选的是386,这样内核会省下不少空间
第六部分:除以下选项,其它全部删除
Power management options (ACPI, APM) ---> 电源管理选项
[ ] Power Management Debug Support 电源管理的调试信息支持,如果不是要调试内核有关电源管理部份,请不要选择这项。
ACPI Support ---〉高级电源接口配置支持,如果BIOS支持,建议选上这项
[]Button 这个选项用于注册基于电源按钮的事件,比如power, sleep等,当你按下按钮时事件将发生,一个守护程序将读取/proc/acpi/event,并执行用户在这些事件上定义的动作比如让系统关机。可以不选择,根据自己的需求。
第七部分:除以下选项,其它全部删除
Bus options (PCI, PCMCIA, EISA, MCA, ISA) ---> 总线选项
[]PCI support
PCI access mode (Any) ---> PCI外围设备配置,强列建议选Any,系统将优先使用MMConfig,然后使用BIOS,最后使用Direct检测PCI设备。
第八部分:除以下选项,其它全部删除
Executable file formats --->
Kernel support for ELF binaries ELF是开放平台下最常用的二进制文件,它支持不同的硬件平台。一定要选。
第九部分:除以下选项,其它全部删除
Networking
Networking options --->
[]Unix domain sockets
[]TCP/IP networking
第十部分:除以下选项,其它全部删除
Device Drivers --->设备驱动
Block devices-------〉
[]Compaq SMART2 support
[] Compaq Smart Array 5xxx support
[]Loopback device support 大部分的人这一个选项都选N,因为没有必要。但是如果你要mount iso文件的话,你得选上Y。这个选项的意思是说,可以将一个文件挂成一个文件系统。如果要烧光盘片的,那么您很有可能在把一个文件烧进去之前,看看这个文件是否符合IS09660的文件系统的内容,是否符合您的需求。而且,可以对这个文件系统加以保护。不过,如果您想做到这点的话,您必须有最新的mount程序,版本是在2.5X版以上的。而且如果您希望对这个文件系统加上保护,则您必须有des.1.tar.gz 这个程序。注意:此处与网络无关。建议编译成模块
[] RAM disk support
SCSI device support ---> 里面有关于USB支持的,要选择
[]SCSI device support USB要用,必须选择
[]legacy /proc/scsi/ support USB要用,必须选择
[]SCSI disk support USB要用,必须选择
SCSI Low-level drivers
[]Serial ATA(SATA) support
[]Intel PIIX/ICH SATA support 这个必须选择,否则无法产生引导文件
[]Via SATA support
Networking device support ---> 这个下面是选网卡驱动,一定要选
Ethernet(1000mbit)-我的电脑是千兆网卡所以就选这个
[]broadcom Tigon3support
Input device support ---> 这个里面要设置你的鼠标键盘什么的
[]Provide legacy /dev/psaux device
Graphics support --->
[]Support for frame buffer devices 支持Frame buffer的,一定要选择
USB support --->
[]USB device filesystem 这个好象是用U盘必须的
[]EHCI HCD (USB 2.0) support 有usb2.0就选上把,编译成模块
[]OHCI HCD support 必须选择,编译成模块
[]UHCI HCD (most Intel and VIA) support 必须选择,编译成模块
[]USB Mass Storage support 用U盘必须选择
USB Human Interface Device (full HID) support 里面选择usb鼠标和usb键盘,如果你有一定选上这个必需选
HID input layer support 应该选择
/dev/hiddev raw HID device support如果这里有USB键盘和鼠标选项,一定要选择
第十一部分:除以下选项,其它全部删除
file systems --->文件系统
Second extended fs support
Ext2 extended attributes
Ext2 POSIX Access Control Lists
Ext2 Security Labels
Ext3 journalling file system support
Ext3 extended attributes
Ext3 POSIX Access Control Lists
Ext3 Security Labels 以上这些肯定是要选择的,linux的标准文件系统
Kernel automounter support 内核自动挂载的,当然要选
Kernel automounter version 4 support (also supports v3) 当然要选
DOS/FAT/NT Filesystems --->
DOS FAT fs support
MSDOS fs support
VFAT (Windows-95) fs support
NTFS file system support
Native language support语言支持,这里就支持英语和汉语就行了,不多说了
[]NLS ISO 8859-1 必须选择,这个是关于U盘挂载的。
CD-ROM/DVD Filesystems ---> 这个是关于挂载ISO文件的,用的话就选。
ISO 9660 CDROM file system support
第十二部分: 全部删除
Instrumentation support
第十三部分:全部删除
Kernel hacking --->破解核心?可不是当骸客啦,不选
第十四部分:全部删除
Security options --->
第十五部分:全部删除
Cryptographic options --->这是核心支持加密的选项
第十六部分:全部删除
Library routines --->
附:
内核配置
内核配置的方法很多,make config、make xconfig、make menuconfig、make oldconfig等等,它们的功能都是一样的,区别应该从名字上就能看出来,只有make oldconfig是指用系统当前的设置(./.config)作为缺省值。这里用的是make menuconfig。
需要牢记:不必要的驱动越多,内核就越大,不仅运行速度慢、占用内存多,在少数情况下、还会引发其他问题。具体步骤如下:
首先确定shell是bash。
然后
$make menuconfig
有一些默认的符号其含义如下:
y:加载
n:不加载
m:作为模块加载
可以配置的选项有以下一些:
1)code maturity level option 代码成熟度
prompt for development and/or incomplete code/drivers [N/y/?]
如果有兴趣测试一下内核中尚未最终完成的某些模块,就选y,否则选N,想知道更详细的信息选?会看到联机帮助(以下?的含义相同),N大写表示缺省值。
2)processor type and features 处理器类型及特性
Processor family(386,486/Cx486,586/K5/5x86/6x86,Pentium/K6/TSC, PPro/6x86MX)[PPro/6x86MX]
[]内的是缺省值,我们可以根据前面介绍的uname 命令执行的结果选择。此项如果高于386,那么生成的内核在386机器上将不能启动。
Math emulation(CONFIG_MATH_EMULATION)[N/y/?]
需要进行协处理器模拟吗?一般的机器都回n。如果机器已经有硬件的协处理器,那么内核仍将使用硬件,而忽略软件的math-emulation,这将使内核变大变慢。
MTRR(Memory Type Range Register)support(CONFIG_MTRR)[N/y/?]
在Pentium、Pro/Pentium II类的系统中可以提高图像写入速度。
Symmetric multi-processing support(CONFIG_SMP)[Y/n/?]
如果您的机器有多个处理器,就选y。此时要选中下面的Enhanced Real Time Clock Support
3)loadable model support 可加载模块支持
Enable loadable mole support(CONFIG_MODULES)[Y/n/?]
最好选y,不然许多仅供动态加载的模块就不能用了。
Set version information on all symbols
