linux内核剪裁


首 页 阅览室 馆友 个人图书馆 登陆注册 java

Linux内核裁剪与移植
linux内核裁剪的具体过程和方法linux



这是我前段时间本身整的一份,内核功能:
可以完成系统的基本功能,上网,收发邮件等,支持xwindows图形界面。 git

在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 module support ---> 可引导模块支持 建议做为模块加入内核
[] Enable loadable module support 这个选项可让你的内核支持模块,模块是什么呢?模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增长一些特性或是对某种硬件进行 支持。通常一些不经常使用到的驱动或特性能够编译为模块以减小内核的体积。在运行时可使用modprobe命令来加载它到内核中去(在不须要时还能够移除 它)。一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不须要的驱动能够将其编译为模块,若是是一些在系统启动时就要用到的驱动好比说文 件系统,系统总线的支持就不要编为模块了,否在没法启动系统。
[]Automatic kernel module 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键盘和鼠标选项,必定要选择 shell

第十一部分:除如下选项,其它所有删除
file systems ---> 文件系统
<*> Second extended fs support
[*] Ext2 extended attributes
[*] Ext2 POSIX Access Control Lists
[*] Ext2 Security Labels
<M> Ext3 journalling file system support
[*] Ext3 extended attributes
[*] Ext3 POSIX Access Control Lists
[*] Ext3 Security Labels 以上这些确定是要选择的,linux的标准文件系统
<M> Kernel automounter support 内核自动挂载的,固然要选
<M> Kernel automounter version 4 support (also supports v3) 固然要选
DOS/FAT/NT Filesystems --->
<M> DOS FAT fs support
<M> MSDOS fs support
<M> VFAT (Windows-95) fs support
<M> 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大写表示缺省值。 windows

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 module support(CONFIG_MODULES)[Y/n/?]
最好选y,否则许多仅供动态加载的模块就不能用了。
Set version information on all symbols for modules(CONFIG_MODVERSIONS)[N/y/?]
选N
Kernel module loader(CONFIG_KMOD)[N/y/?] bash

4)general setup 通常设置
Networking support(CONFIG_NET)[Y/n/?]
选y吧,如今还有几台计算机不用上网呢?
PCI support (CONFIG_PCI)[Y/n/?]
PCI 总线和设备总该有吧。
PCI access mode(BIOS,Direct,Any)[Any]
缺省值比较保险,但若是您对您的主板颇有信心,就选BIOS。
PCI quirks (CONFIG_PCI_QUIRKS)[Y/n/?]
用于修补BIOS中对PCI有影响的BUG,一样,若是您对主板颇有信心,就选n。
Backward-compatible /proc/pci〉(CONFIG_PCI_OLD_PROC)[Y/n/?]
之前的内核使用/proc/pci,新版内核使用/proc/bus/pci,要保持兼容性就选y。
MCA support(CONFIG_MCA)[N/y/?]
查看帮助吧。
SGI Visual Workstation support(CONFIG_VISWS)[N/y/?]
您的机器是SGI的吗?是就选y。
System V IPC(CONFIG_SYSVIPC)[Y/n/?]
进程间通讯函数和系统调用。Linux内核的五大组成部分之一,必定要选。
BSD Process Accounting(CONFIG_BSD_PROCESS_ACCT)[N/y/?]
用于启动由内核将进程信息写入文件的用户级系统调用。就看您想不想用它了。
Sysctl support(CONFIG_SYSCTL)[Y/n/?]
在内核正在运行的时候修改内核。用8KB空间换取某种方便。别选吧,除非你真的想试试。
Kernel support for a.out binaries(CONFIG_BINFMT_AOUT)[Y/m/n/?]
为了能使用之前编译的程序,选y。
Kernel support for ELF binaries(CONFIG_BINFMT_ELF)[Y/m/n/?]
为了能使用如今编译的程序,选y。
Kernel support for MISC binaries(CONFIG_BINFMT_MISC)[Y/m/n/?]
通常选y,用于支持java等代码的自动执行。
Parallel port support(CONFIG_PARPORT)[N/y/m/?]
并口设备,如打印机。 网络

5)plug and play support 即插即用设备支持
Plug and Play support (CONFIG_PNP)[N/y/?]
选y吧。

6)block devices 块设备
Normal PC floppy disk support(CONFIG_BLK_DEV_FD)[Y/m/n/?]
通常的软驱。选y。
Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support(CONFIG_BLK_DEV_IDE)[Y/m/n/?]
这几种接口的硬盘、光驱、磁带、软驱。选y。
Include IDE/ATAPI CDROM support(CONFIG_BLK_DEV_IDECD)[Y/m/n/?]
CDROM。选y。

7)networking options 网络选项
Packet socket (CONFIG_PACHET)[Y/m/n/?]
按照目前网络发展的情况,选y比较好。固然也能够选其它的。
Kernel/User netlink socke(CONFIG_NETLINK)[N/y/?]
内核与用户进程双向通讯。选y。
Network firewalls(CONFIG_FIREWALL)[N/Y/?]
若是真的须要用防火墙,就选y。
UNIX domain sockets(confgi_unix)[Y/m/n/?]
socket 的用处太多了。选y。
TCP/IP networking(CONFIG_INET)[Y/n/?]
选y,理由如上一条。
The IPX protocol (CONFIG_IPX)[N/y/m/?]
其实并无那么多人真的须要使用或者学习IPX,因此通常选N。
Appletalk DDP(CONFIG_ATALK)[N/y/m/?]
选N,理由同上。

8)SCSI support SCSI支持,SCSI low-level drives SCSI低级驱动
根据系统中SCSI设备的实际状况选择。

9)Networking device support 网络设备支持
若是用LAN上网,就选择网卡;
若是用MODEM拨号上网,就要看ISP提供那种服务了,通常都是PPP。

10)Amateur Radio support 业余收音机支持
这是什么我不太清楚,因此选N。

11)ISDN subsystem ISDN子系统
好像已经有支持ISDN的MODEM了,因此最好先看看本身的MODEM是否是这种,再作选择。

12)Old CD-ROM dfivers (not SCSI, not IDE) 老式光驱驱动
通常选N,由于这种设备实在不多见。

13)Character devices 字符设备
Virtual terminal(CONFIG_VT)[Y/n/?]
Linux上通常能够用Alt+F1/F2/F3/F4来切换不一样的任务终端,即便在一台计算机上也能够充分使用Linux的多任务能力,一些须要以命令行方式安装合适用的软件若是有虚拟终端的支持就会更方便,所以选y。
Support for console on virtual terminal(CONFIG_VT_CONSOLE)[Y/n/?]
选y将支持一个虚拟终端做为控制台。通常为Alt+F1。
Support for console on serial port(CONFIG_SERIAL)[Y/m/n/?]
除非真的须要一个串口控制台,不然选n。
Extended dumb serial driver options(CONFIG_SERIAL_EXTENDED)[N/y/?]
若是但愿使用 "dumb "的非标准特性(如HUB6支持),选y,通常选N。
Non-standard serial port support(CONFIG_SERIAL_NONSTANDARD)[N/y/?]
非标准串口。通常选N。
UNIX98 PTY support(CONFIG_UNIX98_PTYS)[Y/n/?]
PTY指伪终端,通常用户就选n。但若是想用telnet或者xterms做为终端访问主机,而且已经安装了glibc2.1,就能够选y。
Maximum number of UNIX98 PTYs in use(0-2048)(CONFIG_UNIX98_PTY_COUNT)[256]
缺省值就能够了。
Mouse Support(not serial mice)(CONFIG_MOUSE)[Y/n/?]
PS/2等非串口鼠标选y,不然选N。

14)Mice 鼠标
根据本身的鼠标类型选择。

15)Video for Linux Linux视频
根据系统中的音/视频捕捉设备选择。

16)Joystick support 操纵杆
根据系统中的游戏杆设备选择

17)Ftape,the floopy tape device driver Ftape设备驱动
Ftape (QIC-80/Travan)support(CONFIG_FTAPE)[N/y/m/?]
若是系统中有磁带机,选y。

18)Filesystems 文件系统
文件系统的选择要比较仔细,由于其中的一些给某些系统功能提供支持。并且除了proc、ext2等文件系统以外,其它的文件系统(包括下面的网络文件系统)均可以选择为m方式,从而减少内核启动时的体积。
Quota support(CONFIG_QUOTA)[N/y/?]
用于给用户划分定量的磁盘空间。如不用此功能就选N。
DOS FAT fs support(CONFIG_FAT_FS)[N/y/m/?]
为内核提供FAT支持,多数用户有可能从Linux访问同一系统中的WINDOWS硬盘空间,所以最好选y。
ISO 9660 CDROM filesystem support(CONFIG_ISO9660_FS)[Y/m/n/?]
有标准光驱的系统应该选Y。
Minix fs support(CONFIG_MINIX_FS)[N/y/m/?]
用于建立启动盘的文件系统,多数应该选y或者m。
/proc filesystem support(CONFIG_PROC_FS)[Y/n/?]
虚拟文件系统,必须选Y。
Second extended fs support(CONFIG_EXT2_FS)[Y/m/n/?]
Linux标准文件系统,都应该选Y。

19)Network file systems 网络文件系统
Coda filesystem support (advanced network fs)(CONFIG_CODA_FS)[N/y/m/?]
先看帮助再选。
NFS filesystem support(CONFIG_NFS_FS)[Y/m/n/?]
选Y或n,可以访问远程NFS文件系统。
SMB filesystem support(to mount WfW shares etc.)(CONFIG_SMB_FS)[N/y/m/?]
要访问WINDOWS系统中的共享资源选y。
NCP filesystem support(to mout NetWare volumes)(CONFIG_NCP_FS)[N/y/m/?]
若是真的须要访问NetWare文件系统,就选y或者m。

20)Partion Types 分区类型
通常用不上;要用请参看帮助。

21)Console drivers 控制台驱动
VGA text console(CONFIG_VGA_CONSOLE)[Y/n/?]
用VGA模式下用文本方式操做Linux,通常选y。
Video mode selection support(CONFIG_VIDEO_SELECT)[N/y/?]
大多数系统都不须要这项功能。

22)Sound 声音
Sound card support(CONFIG_SOUND)[N/y/m/?]
若是系统中安装了声卡,就选y(或者m),而后查看帮助。

23)Kernel hacking 内核监视
kernel hacking每每会生成很是大或者很是慢(甚至又大又慢)的内核,甚至会引发内核工做不稳定。若是必定要选,那么也最好不要选其中的 "development "、 "experimental "、 "debugging "项。



第4章 Linux内核裁剪与移植
  内核,即操做系统。它为底层的可编程部件提供服务,为上层应用程序提供执行环境。内核裁剪就是对这些功能进行裁剪,选取知足特定平台和需求的功能。不一样的硬件平台对内核要求也不一样,所以从一个平台到另外一个平台须要对内核进行从新配置和编译。操做系统从一个平台过渡到另外一个平台称为移植。Linux是一款平台适应性且容易裁剪的操做系统,所以Linux在嵌入式系统获得了普遍的应用。本章将详细讲解内核裁剪与移植的各项技术。
4.1 Linux内核结构
  Linux内核采用模块化设计,而且各个模块源码以文件目录的形式存放,在对内核的裁剪和编译时很是方便。下面介绍内核的主要部分及其文件目录。
4.1.1 内核的主要组成部分
  在第1章中已经介绍了Linux内核主要的5个部分:进程调度、内存管理、虚拟文件系统、网络接口、进程通讯。在系统移植的时候,它们是内核的基本元素,这5个部分之间的关系,如图4.1所示。

图4.1 Linux内核子系统及其之间的关系
  进程调度部分负责控制进程对CPU的访问。内存管理容许多个进程安全地共享主内存区域。内存管理从逻辑上分为硬件无关部分和硬件相关部分。硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关部分为内存管理硬件提供了虚拟接口。虚拟文件系统隐藏了不一样类型硬件的具体细节,为全部的硬件设备提供了一个标准的接口,VFS提供了十多种不一样类型的文件系统。网络接口提供了对各类网络标准的存取和各类网络硬件的支持。进程通讯部分用于支持进程间各类不一样的通讯机制。进程调度处于核心位置,内核的其余子系统都要依赖它,由于每一个子系统都存在进程挂起或恢复过程。
* 进程调度与内存管理之间的关系:这两个子系统为互相依赖关系。在多道程序环境下,程序要运行必须为之建立进程,而建立进程首先就是要将程序和数据装入内存。另外,内存管理子系统也存在进程的挂起和恢复过程。
* 进程间通讯与内存管理之间的关系:进程间通讯子系统要依赖内存管理支持共享内存通讯机制,经过对共同的内存区域进行操做来达到通讯的目的。
* 虚拟文件系统与网络接口之间的关系:虚拟文件系统经过依赖网络接口支持网络文件系统(NFS),也经过依赖内存管理支持RAMDISK设备。
* 内存管理与虚拟文件系统之间的关系:内存管理利用虚拟文件系统支持交换,交换进程按期地由调度程序调度,这也是内存管理依赖于进程调度的惟一缘由。当一个进程存取的内存映射被换出时,内存管理将会向文件系统发出请求,同时,挂起当前正在运行的进程。
  除了上面5个主要部分,下面将介绍Linux代码的总体分区结构。
4.1.2 内核源码目录介绍
  Linux内核代码以源码树的形式存放,若是在安装系统的时候已经安装了源码树,其源码树就在/usr/src/linux下,源码树结构如图4.2所示。

图4.2 Linux内核源码树结构
  下面分别针对图4.2中各个部分进行介绍,各个目录的主要的功能分别以下。
  1.arch目录
  arch子目录包括了全部和体系结构相关的核心代码。它的每个子目录都表明一种支持的体系结构,例如arm子目录是关于ARM平台下各类芯片兼容的代码。
  2.include目录
  include子目录包括内核编译时所须要的大部分头文件。与平台无关的头文件在include/linux子目录下,include/scsi目录则是有关scsi设备的头文件目录,与arm相关的头文件在include/asm-arm子目录下。
  3.drivers目录
  drivers子目录放置系统全部的设备驱动程序。有些驱动是与硬件无关的,而有些驱动是与硬件平台相关。例如,在USB驱动中,主机控制器有3种规格:
* OHCI主要为非PC系统上及带有SiShe ALi芯片组的PC主板上的USB芯片,嵌入式系统通常使用该驱动。
* UHCI大多为Intel和Via主板上的USB控制器芯片。相对OHCI而言UHCI的硬件电路比较简单,同时其成本也比较低,但驱动复杂,但它们都是在USB 1.1规范同时提出的。
* EHCI由USB 2.0规范所提出,它兼容OHCI和UHCI。
  4.fs目录
  fs子目录列出了Linux支持的全部文件系统,目前Linux支持ext二、vfat、ntfs、yaffs二、ramfs、cramfs和romfs等多种文件系统。在嵌入式系统中经常使用的闪存设备的文件系统有cramfs、romfs、ramfs、jffs二、yaffs等文件系统。
  5.init目录
  init子目录包含核心的初始化代码(注意,不是系统的引导代码)。它包含两个文件main.c和version.c,这是研究核心如何工做的一个很是好的起点。
  6.ipc目录
  ipc子目录包含核心进程间的通讯代码。Linux下进程间通讯机制主要包括管道、信号、消息队列、共享内存、信号量、套接口。
  7.kernel目录
  kernel子目录包含内核管理的核心代码。与处理器结构相关代码都放在arch/*/kernel目录下。
  8.net目录
  net子目录里是核心的网络部分代码,其每一个子目录存放一个具体的网络协议或者网络模型代码。
  9.mm目录
  mm子目录包含了全部的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/mm目录下。
  10.scripts目录
  scripts子目录包含用于配置核心的脚本文件。
  11.lib目录
  lib子目录包含了核心的库代码,与处理器结构相关的库代码被放在arch/*/lib/目录下。
4.2 内核配置选项
  内核配置一般是对内核支持的各个功能进行取舍配置,将配置的方案保存到configure文件中。在编译内核的时候,就会根据此配置对内核进行取舍编译。在源码目录下经过make menuconfig命令进入内核的配置界面,如图4.3所示。在对内核功能进行配置时,使用键盘的方向键移动光标位置,使用Enter键选择菜单,使用空格键修改配置选项。

图4.3 内核配置界面
  Linux配置选项的基本分类和涵义以下。
4.2.1 通常选项
  菜单选项(General setup)的子菜单中包含一些内核通用配置选项,如表4.1所示。在通常配置选项中若是对系统没有特殊要求,能够只选择System V IPC配置。
表4.1 通常选项
选 项 名
说 明
Automatically append version information to the version string
自动在版本后添加版本信息,编译时须要有perl及git仓库支持,一般能够不选
Support for paging of anonymous memory (swap)
支持交换内存,一般选择
System V IPC
进程间通讯,一般须要配置
POSIX Message Queues
POSIX消息队列,一般须要配置
BSD Process Accounting
能够将行程资料记录下来,一般建议配置
Export task/process statistics through netlink
经过netlink接口向用户空间导出任务/进程的统计 信息
Auditing support
审计支持,某些内核模块(例如SELinux)须要配置
RCU subsystem
同步机制
Kernel .config support
提供.config配置文件支持
Kernel log buffer size (16=>64KB, 17=>128KB)
内核日志缓冲区大小(16表明64KB,17表明128KB)
Group CPU scheduler
CPU组调度
Control Group support
控制组支持
Create deprecated sysfs layout for older userspace tools
为旧的用户空间工具建立过期的文件系统风格
Kernel->user space relay support (formerly
relayfs)
在某些文件系统上(好比debugfs)提供从内核空间向用户空间传递大量数据的接口
Namespace support
命名空间支持
Initial RAM filesystem and RAM disk (initramfs/initrd) support
初始化RAM文件系统的源文件。initramfs能够将根文件系统直接编译进内核,通常是cipo文件。对嵌入式系统有用
Optimize for size
代码优化。若是不了解编译器,建议不选
Configure standard kernel features (for small systems)
为特殊环境准备的内核选项,一般不须要这些非标准内核
Disable heap randomization
禁用随机heap(heap堆是一个应用层的概念,即堆对CPU是不可见的,它的实现方式有多种,能够由OS实现,也能够由运行库实现,也能够在一个栈中来实现一个堆)
Choose SLAB allocator
选择内存分配管理器,建议选择
Profiling support
支持系统评测,建议不选
Kprobes
探测工具,开发人员能够选择,建议不选

4.2.2 内核模块加载方式支持选项
  菜单选项(Loadable module support)的子菜单中包含一些内核模块加载方式选项,如表4.2所示。若是对模块的加载方式有特殊要求,如能够强制卸载正在使用的模块的要求,那么能够配置相关的模块加载方式。
表4.2 内核模块加载方式
选 项 名
说 明
  Forced module loading
 容许强制加载模块驱动
  Module unloading
 容许卸载已经加载的模块,建议选择
  Forced module unloading
 容许强制卸载正在运行的模块,该功能危险,建议不选
  Module versioning support
 容许使用其余内核版本的模块,建议不选
  Source checksum for all modules
 为全部的模块校验源码,能够不选

4.2.3 系统调用、类型、特性、启动相关选项
  菜单选项(Block layer)的子菜单中包含一些系统调用方式选项,如表4.3所示。在配置内核时能够不选该菜单选项。
表4.3 系统调用方式
选 项 名
说 明
Support for Large Block Devices and files
使用大容量块设备时选择
Support for tracing block io actions
支持块队列I/O跟踪
Block layer SG support v4
支持通用scsi块设备第4版
Block layer data integrity support
支持块设备数据完整性
IO Schedulers
I/O调度器

  菜单选项(System Type)的子菜单中包含一些系统类型选项,在配置内核时直接选择对应的芯片类型便可。对特定的平台选择相应的支持类型。
  菜单选项(Kernel Features)的子菜单中包含一些系统特性选项,如表4.4所示。在嵌入式系统中,通常不对这些选项进行配置。
表4.4 系统特性
选 项 名
说 明
Preemptible Kernel
抢占式内核。建议采用
Use the ARM EABI to compile the kernel
使用ARM EABI编写内核
Allow old ABI binaries to run with this kernel
使内核支持旧版本的ABI程序
Memory model
只有Flat Memory供选择
Add LRU list to track non-evictable pages
对没有使用的页采用最近最少使用算法,建议选择

  菜单选项(Boot Options)的子菜单中包含一些系统启动选项,如表4.5所示。
表4.5 系统启动
选 项 名
说 明
(0)Compressed ROM boot loader base address
xImage存放的基地址
(0)Compressed ROM boot loader BSS address
BSS地址
()Default Kernel command string
内核启动参数
Kernel Execute-In-Place from ROM
从ROM中直接运行内核,该内核使用make xipImage编译
(0x00080000)XIP Kernel Physical Location
选择XIP后,内核存放的物理地址
Kexec system call
Kexec系统呼叫
4.2.4 网络协议支持相关选项
  菜单选项(Networking Support)的子菜单中包含一些网络协议支持的选项,如表4.6所示。基本只须要在Networking options子菜单中选择具体所需的网络协议便可。
表4.6 网络协议
选 项 名
说 明
Networking options
该菜单的子菜单包含支持的各类具体网络协议,在开发中能够根据须要进行配置
Amateur Radio support
业余无线电支持,通常不选
CAN bus subsystem support
CAN总线子系统支持
IrDA (infrared) subsystem support
红外线支持
Bluetooth subsystem support
蓝牙支持
RxRPC session sockets
RxRPC会话套接字支持
Phonet protocols family
Phonet协议族支持
Wireless
无线电协议支持
WiMAX Wireless Broadband support
WiMAX无线宽带支持
RF switch subsystem support
RF交换子系统支持
Plan 9 Resource Sharing Support (9P2000)
9计划资源共享支持

4.2.5 设备驱动支持相关选项
  菜单选项(Device drivers)的子菜单中包含一些设备驱动的选项,如表4.7所示。重点说明了MTD设备相关的驱动。须要支持设备驱动时能够配置相关的选项。
表4.7 设备驱动
选 项 名
说 明
Connector - unified userspace <-> kernelspace linker
用户空间和内核空间的统一链接器
Memory Technology Devices (MTD) support
MTD设备支持,嵌入式系统使用
->Debugging
调试功能
->MTD concatenating support
链接多个MTD设备,例如使用JFFS2文件系统管理多片Flash的情形。只有一片Flash时不选
->MTD partitioning support
Flash分区支持,建议选择
->MTD tests support
MTD测试支持
->RedBoot partition table parsing
使用RedBoot解析Flash分区表,若是须要读取这个分区表的信息,选择此项
->Command line partition table parsing
容许经过内核命令行传递MTD分区表信息
->ARM Firmware Suite partition parsing
使用AFS分区信息
->TI AR7 partitioning support
AR7分区支持
->Direct char device access to MTD devices
将系统中的MTD设备看做字符设备进行读/写
  续表
选 项 名
说 明
->Caching block device access to MTD devices
文件系统挂载后,模拟块设备进行访问。经常使用于只读文件系统。若是是DiskOnChip使用NFTL方式
->FTL (Flash Translation Layer) support
提供对Flash翻译层支持,能够不选
?->NFTL (NAND Flash Translation Layer) support
NAND Flash翻译层支持,能够不选
-> INFTL (Inverse NAND Flash Translation Layer) support
提供INFTL支持,DiskOnChip使用
-> Resident Flash Disk (Flash Translation Layer)
support
提供RFD支持,为嵌入式系统提供相似BIOS 功能
-> NAND SSFDC (SmartMedia) read only translation layer
NAND SSFDC只读翻译层
-> Log panic/oops to an MTD buffer
MTD缓冲区日志
-> RAM/ROM/Flash chip drivers
RAM/ROM/Flash芯片驱动
->Mapping drivers for chip access
为芯片的访问方式选择Mapping驱动
-> Self-contained MTD device drivers
自身包含MTD设备驱动,通常不选
->NAND Device Support
NAND Flash支持
->OneNAND Device Support
One NAND相关驱动
->LPDDR flash memory drivers
LPDDR Flash内存驱动
->UBI - Unsorted block images
只提供UBI支持
Parallel port support
并口支持
Block devices
红外线支持
Bluetooth subsystem support
蓝牙支持
RxRPC session sockets
RxRPC会话套接字支持
Phonet protocols family
Phonet协议族支持
Wireless
无线电协议支持
WiMAX Wireless Broadband support
WiMAX无线宽带支持
RF switch subsystem support
RF交换子系统支持
Plan 9 Resource Sharing Support (9P2000)
9计划资源共享支持

4.2.6 文件系统类型支持相关选项
  菜单选项(File Systems)的子菜单中包含一些文件系统配置的选项,如表4.8所示。内核移植完成后,一般须要制做文件系统,能够在此部分选择内核支持的文件系统格式。
表4.8 文件系统
选 项 名
说 明
Second extended fs support
Ext2文件系统支持
Ext3 journalling file system support
Ext3文件系统支持
The Extended 4 (ext4) filesystem
Ext4文件系统支持
Reiserfs support
Reiserfs文件系统支持
  续表
选 项 名
说 明
JFS filesystem support
JFS文件系统支持
XFS filesystem support
XFS文件系统支持
OCFS2 file system support
OCFS2文件系统支持
Btrfs filesystem (EXPERIMENTAL)
Unstable disk format
Btrfs文件系统,不稳定,建议不选择
Dnotify support
文件系统变化通知机制支持
Inotify file change notification support
Inotify是Dnotify的替代者,在高版内核中默认支持
Quota support
磁盘限额支持
Kernel automounter support
自动挂载远程文件系统,如NFS
Kernel automounter version 4 support
(also supports v3)
自动挂载远程文件系统,对版本4和版本3都支持
FUSE (Filesystem in Userspace) support
在用户空间挂载文件系统,建议选择
CD-ROM/DVD Filesystems
ISO 9660,UDF等文件系统支持
DOS/FAT/NT Filesystems
FAT/NTFS文件系统支持。若是用于访问存储设备,而且包含像Windows文件时选上该选项
Pseudo filesystems
伪操做系统,多指内存中的操做系统
Miscellaneous filesystems
杂项文件系统,包括ADFS,BFS,BeFS,HPFS等,比较少用,建议不选
Network File Systems
网络文件系统。其中只有NFS在产品开发过程当中用。在开发过程能够选用
Partition Types
分区类型。该菜单下提供不少中类型,但在嵌入式产品中不多用,建议不选
Distributed Lock Manager (DLM)
分布式锁管理器

4.2.7 安全相关选项
  菜单选项(Security options)的子菜单中包含一些安全配置选项。不多用,建议不选。菜单选项(Kernel hacking)的子菜单中包含内核黑客配置选项。建议不选。菜单选项(Cryptographic API)的子菜单中包含内核加密算法配置选项。不多用,建议不选。
4.2.8 其余选项
  菜单选项(Bus Support)的子菜单中包含一些总线接口支持,嵌入式系统能够不选。菜单选项(CUP Power Management)的子菜单中包含电源管理选项,嵌入式系统能够不选。菜单选项(Floating)的子菜单中包含一些总线接口支持,嵌入式系统能够不选。菜单选项(Library routines)的子菜单中包含一些库配置选项,主要提供CRC支持,在开发通讯类产品时能够选择对应的CRC。
4.3 内核裁剪及编译
  通过对内核的认识和对裁剪配置项的了解,接下来实际操做。针对S3C2440开发板进行裁剪Linux内核。
4.3.1 安装内核源代码
  在前面章节中已经介绍了创建交叉编译环境。若是尚未创建编译环境,请参考相关章节。得到源码能够直接从网上下载开发板对应的源码。该源码相比Linux基本内核源码增长了对应平台相关的内容。将源代码压缩包复制到/usr/local/arm目录下,使用tar命令解压源码。

tar –zxvf linux-2.6.29-HY2440.tgz

  tar命令带上zxvf参数能够看到详细的解压过程,如图4.4所示。

图4.4 内核解压过程
4.3.2 检查编译环境设置
  源代码解压完成后,进入linux-2.6.29目录下,而后使用VI命令编辑Mackfile。肯定编译环境为arm交叉编译工具与本机安装的路径和一致。

ARCH = arm
CROSS_COMPILE = /usr/local/arm/4.3.2/bin/arm-linux-

4.3.3 配置内核
  使用make menuconfig命令进入内核配置界面,如图4.3所示。注意在linux-2.6.29目录下,执行make menuconfig命令才能正确进入配置界面。下面给出一个内核的基本配置。
  (1)在通常General setup配置项中选择子项System V IPC。因为要支持处理器在程序之间同步和交换信息,若是不选这项,不少程序将运行不起来,因此选择General setup配置项中的子项System V IPC,其余能够不选,如图4.5所示。在此配置界面中还有一个选项[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support在制做Ramdisk文件系统时,应该选上该选项,如图4.6所示。

图4.5 配置System V IPC

图4.6 配置RAM disk支持
  (2)在模块加载方式中,只选择子项Module unloading,其余能够不选。由于Force module loading和Force module unloading会形成安全隐患,因此通常不选。Module unloading支持动态卸载模块,减小内核占用的资源。如图4.7所示模块加载方式选项配置。

图4.7 模块加载方式选项配置
  (3)若是系统没有对磁盘调度方式有特殊的要求,对block layer能够不做任何配置。
  (4)在系统类型中选择S3C3410 DMA support和Force UART FIFO on during boot process,选DMA support选项是为了支持2440直接内存访问。选UART FIFO能够支持通常的串口通讯协议。如图4.8所示为系统类型选项配置。

图4.8 系统类型选项配置
  选择S3C2440 Machines进入S3C2440 Machines的配置界面,选择对应开发板类型的支持,笔者的开发板为Mini2440,则对应的配置如图4.9所示。
  (5)对于总线支持Bus support配置,通常状况下该选项能够不做配置,除非在开发对应的驱动时。

图4.9 选择对应的开发板类型
  (6)在对系统特性选项进行配置时,建议对选项Use the ARM EABI to compile the kernel和选项Allow old ABI binaries to run with this kernel(EXPERIMENTAL)(NEW)进行配置,如图4.10所示。若是交叉编译工具的版本为arm-linux-gcc4.3.2时,没有对这两个选项进行配置,就会在烧写完文件系统后出现系统没法启动的错误,错误提示为Kernel panic - not syncing: Attempted to kill init!

图4.10 系统类型选项配置
?注意:ARM EABI有许多革新之处,其中最突出的改进就是Float Point Performance,它使用Vector Float Point(矢量浮点),所以能够极大提升涉及浮点运算程序的运算速度。若是编译内核的编译器支持EABI,则在内核中也应该选择对该项的支持。
  (7)对启动参数的配置,Bootloader启动后会将板子的信息、Ramdisk大小、命令行字符串等信息传递给内核,而后开始启动内核,文件系统为Ramdisk时通常要配置该选项,对选项的具体地址和参数应该根据具体板子、内核大小、文件系统大小来定,该配置界面如图4.11所示。

图4.11 启动参数配置
  (8)选项CPU Power Management通常不做配置。
  (9)选项Floating point emulation通常不做配置。
  (10)选项Userspace binary formats,配置Kernel support for ELF binaries,如图4.12 所示。
  (11)对于电源管理选项通常不做配置。

图4.12 配置Kernel support for ELF binaries选项
  (12)对于网络选项的支持,配置Networking options中的TCP/IP networking和Unix domain sockets,配置如图4.13所示。在Networking support下的其余选项,在开发对应的驱动时将对应的选项选上。

图4.13 配置Networking options
  (13)设备驱动选择,设备驱动选项是最复杂也是用得最多的配置选项,特别是在开发驱动和系统移植的时候。
  在设备驱动选项中添加MTD支持,配置MTD partitioning support和Direct char device access to MTDdevices。配置MTD partitioning support是支持对Flash?分区的支持,配置Direct char device access to MTDdevices是支持将系统中的MTD设备看做字符设备进行读/写,如图4.14所示为驱动选项配置。

图4.14 驱动选项配置
  在网路设备驱动配置窗口中,为了使开发板支持网卡驱动选择Ethernet(10 or 100Mbit),若是但愿支持ppp拨号还能够选择对ppp协议的支持等,能够根据具体的开发进行配置,如图4.15所示,进入Ethernet(10 or 100Mbit)配置中选择对应的网卡驱动,如图4.16所示。

图4.15 配置网络协议的支持

图4.16 配置对DM9000支持
  在音频设备驱动时,应该配置Sound card support,在该配置窗口下有OSS驱动框架和ALSA驱动框架,其配置界面如图4.17所示。

图4.17 配置声卡驱动的支持
  在对驱动框架Advanced Linux Sound Architecture进行配置时,若是音频应用程序须要支持数字音频接口、混音接口,则须要配置OSS Mixer API和OSS PCM(digital audio)API,如图4.18所示。另外还要对开发板具体的芯片支持,如Mini2440采用的UDA134x,则还要对具体的芯片驱动进行配置,如图4.19所示。固然在配置具体音频驱动支持前应该先在内核代码中添加相应的驱动。

图4.18 对数字音频接口和混音接口支持

图4.19 对具体芯片和驱动的支持
  USB设备驱动,也是应该要用到的内核配置选项,在开发USB主机驱动时应该配置OHCI HCD support选项,在开发USB存储设备驱动时配置USB Mass Storage support选项,如图4.20所示。

图4.20 USB设备驱动配置
  在开发键盘、鼠标等输入设备驱动时,应该配置HID Devices选项。在开发SD卡驱动时应该配置MMC/SD/SDIO card support选项。
  (14)文件系统选择也是比较重要的部分,在文件系统配置选项时,应该根据所用的文件系统来添加对应的文件系统支持。笔者用到了网络文件系统和YAFFS2文件系统,在内核中添加对NFS和YAFFS2文件系统的支持,如图4.21和图4.22所示。

图4.21 对NFS的支持

图4.22 对YAFFS2的支持
  若是开发板在挂载其余存储设备时,这些存储设备还包含中文时,为了正确挂载这些设备,则应该在Native language support中添加对字符编码的设置,如图4.23所示为支持简体中文的配置。

图4.23 对字符编码的支持
  (15)剩下的内核选项通常不做配置,退出内核的配置界面并保存配置。
4.3.4 编译内核
  若是是第一次编译内核就不用清理之前的映像文件。不然可使用make clean命令清理之前编译的结果。在linux-2.6.29目录下使用make dep和make zImage命令生成内核映像文件,编译的过程如图4.24所示。

make clean
make dep
make zImage

?注意:make dep是当程序之间有依赖关系的时候,程序发生更新时,依赖的程序会自动更新。
  若是编译成功,最后会打印生成内核映像文件zImage及其目录。

OBJCOPY arch/arm/boot/Image
Kernel: arch/arm/boot/Image is ready
AS arch/arm/boot/compressed/head.o
GZIP arch/arm/boot/compressed/piggy.gz
AS arch/arm/boot/compressed/piggy.o
CC arch/arm/boot/compressed/misc.o
LD arch/arm/boot/compressed/vmlinux
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready

图4.24 编译过程
4.4 内核映像文件移植到ARM板
  4.3节中,介绍了编译内核映像文件。本节中介绍将映像文件下载到S3C2440开发板上。若是开发板没有烧写Bootloader,或者上位机没有安装下载映像文件工具DNW,请参考前面的相关章节。在这里依然能够暂时使用厂家自带的文件系统。等后面讲定制文件系统后,就可使用自制的文件系统。
4.4.1 移植准备
  将4.3节生成的映像文件复制到Windows目录下,将要下载的文件系统放映像文件、内核映像文件放在一块儿,便于下载。
  (1)将开发板与上位机正确链接,肯定开发板电源已经插上,且开发板处于关闭状态;串口线已经正确链接;USB线未链接。运行DNW工具,此时DNW的COM和USB状态如图4.25所示。
  (2)肯定上位机与开发板相连的串口编号。这里用的是笔记本,没有串口,采用USB转串口。在Windows设备管理器下能够看到与开发板相连的串口为COM4,如图4.26 所示。
  (3)选择Configuration | Options命令,进入串口配置界面,将波特率设置为115200,COM Port为设置COM4,下载地址设置为0x32000000,如图4.27所示。配置完成后单击OK按钮保存配置。

图4.25 未链接前DNW状态 图4.26 肯定与开发板相连的串口
  (4)选择Serial Port | connect命令,DNW状态应该变成如图4.28所示的状态。

图4.27 肯定与开发板相连的串口 图4.28 串口配置正确后状态
  (5)肯定以上步骤正确后,经过USB线将上位机和开发板链接起来。按住上位机的空格键,启动开发板。若是是第一次采用USB下载系统将会提示安装驱动。根据提示安装完驱动以后,DNW将进入vivi模式。此时USB状态为OK,在DNW显示正确的vivi信息,如图4.29所示。

图4.29 进入vivi模式
4.4.2 烧写系统
  烧写Linux系统的整个过程包括格式化Nand Flash、烧写Bootloader、烧写内核映像文件和烧写文件系统映像文件。下面具体介绍每一个步骤的详细过程。
  1.分区格式化Flash
  在vivi模式下输入:bon part 0 192k 1216k,将Nand Flash分红三个区。三个区的大小以下所示。
* 0~192k:大小为192k;
* 192k~1216k:大小为1M;
* 1216k~64M:大小为63M。
  执行分区命令后,会在屏幕上打印下列信息:

FriendlyARM> bon part 0 192k 1216k
doing partition
size = 0
size = 196608
size = 1245184

  以上信息显示分区的起始地址。

check bad block
part = 0 end = 196608
part = 1 end = 1245184
part = 2 end = 67108864
part0:
offset = 0
size = 196608
bad_block = 0
part1:
offset = 196608
size = 1048576
bad_block = 0
part2:
offset = 1245184
size = 65847296
bad_block = 0

  以上信息详细打印了分区大小、坏区大小和分区的起始地址等信息。
?注意:分区后不能掉电或者关电,由于此时Nand Flash中已经被清空。不然须要按照第3章介绍的方法使用H-JTAG从新烧写Bootloader。
  2.烧写Bootloader
  在vivi模式下输入load flash vivi u命令。DNW进入等待下载状态后,选择DNW菜单栏的USB Post | Transmit命令,选择vivi.bin文件。烧写完成后会打印以下信息。

FriendlyARM> load flash vivi u
USB host is connected. Waiting a download.

Now, Downloading [ADDRESS:30000000h,TOTAL:105154]
RECEIVED FILE SIZE: 105154 (102KB/S, 1S)
Downloaded file at 0x30000000, size = 105144 bytes
Found block size = 0x0001c000
Erasing... ... done
Writing... ... done
Written 105144 bytes

  若是烧写成功,就会打印Writing… …done。
?注意:在打印USB host is connected. Waiting a download信息后,单击DNW菜单栏的USB Post|Transmit命令。出现选择文件对话框,选择文件后开始烧写Bootloader。
  3.下载Linux内核文件
  在vivi模式下输入load flash kernel u命令,DNW进入等待下载状态后,单击DNW菜单栏的USB Post | Transmit命令,选择4.4.1节生成的内核文件zImage,如图4.30所示。下载内核的过程如图4.31所示。

图4.30 选择内核文件

图4.31 下载内核过程
  正确下载内核完成信息以下:

FriendlyARM> load flash kernel u
USB host is connected. Waiting a download.

Now, Downloading [ADDRESS:30000000h,TOTAL:1852554]
RECEIVED FILE SIZE: 1852554 (904KB/S, 2S)
Downloaded file at 0x30000000, size = 1852544 bytes
Found block size = 0x001c8000
Erasing... ... done
Writing... ... done
Written 1852544 bytes

?注意:在打印USB host is connected. Waiting a download信息后,单击DNW菜单栏的USB Post | Transmit命令。
  4.安装文件系统
  接上一步操做,输入命令loadyaffs root u安装文件系统,暂时使用开发板厂家提供的示例文件系统。选择文件系统映像文件root_qtopia_dm9000A43.img,如图4.32所示。安装文件系统过程如图4.33所示。

图4.32 选择文件系统映像文件
  正确安装文件系统后显示载入yaffs文件系统成功及文件系统的大小,打印以下信息。

Load yaffs OK:
Blocks scanned: 3947, Blocks erased: 3947, Blocks are bad: 0
RECEIVED and Writed FILE SIZE:45779722 (363KB/S, 123S)

  5.启动系统
  在vivi模式下输入boot启动系统,正确进入系统后显示如图4.34所示。或者直接重启开发板进入Linux系统。

图4.33 安装文件系统过程

图4.34 正确进入系统信息
4.5 内 核 升 级
  系统移植还包括内核升级。当开发板提供的内核和编译器版本过低,不能兼容不少新的驱动和功能时,此时就要着手考虑升级内核。本节将以at91rm9200为例,介绍为开发板移植高版本的内核。
4.5.1 准备升级内核文件
  开发板自带的内核版本为Linux-2.4.27,编译器版本为2.95.3。在开发一些新的应用程序和驱动时,编译器和内核不支持新的功能。准备将内核升级到2.6版本,编译器选择的版本为3.4.1。须要准备的资源文件列表以下所示。
* 内核:linux-2.6.10.tar.gz;
* 针对at91的内核补丁:2.6.10-at91.patch.gz;
* 交叉编译器:cross-3.4.1.tar.bz2。
4.5.2 移植过程
  下面详细介绍一下移植过程。
  (1)将全部文件复制到工做目录下,而后解压内核文件和编译器文件。
  (2)为内核打补丁。

#cd linu-2.6.10
#patch -p1< 2.6.10-at91.patch.gz

  (3)修改Makefile,修改编译环境。

ARCH = arm
CROSS_COMPILE =/usr/local/arm/3.4.1/bin/arm-linux-

  (4)修改machine ID。若是这一步省略,会在移植到开发板后Bootloader引导时出现机器ID错误的现象。出错的ID号将以十六进制给出,将其转化为十进制,替换mach-types文件中的对应项。这里移植后报的错误是0xFB,即对应十进制251。

#vi /usr/local/arm/linux-2.6.10/arch/arm/tools/mach-types

  找到

at91rm9200dk ARCH_AT91RM9200DK AT91RM9200DK 262

  将其修改成:

at91rm9200dk ARCH_AT91RM9200DK AT91RM9200DK 251

  (5)制做uImage文件。在内核目录下建议一个名为mkimage的文件,其内容以下:

/usr/local/arm/3.4.1/bin/arm-linux-objcopy -O binary -S vmlinux linux.bin
gzip -v9 linux.bin
./mkimage -A arm -O linux -T kernel -C gzip -a 0x20008000 -e 0x20008000 -d linux.bin.gz uImage

  (6)对内核进行配置。执行make at91rm9200dk_defconfig实际上就是完成对内核的 配置。

#make at91rm9200dk_defconfig

  其具体配置以下:

* Plug and Play support
* Block devices
RAM disk support (BLK_DEV_RAM) [Y/n/m/?] y
Default number of RAM disks (BLK_DEV_RAM_COUNT) [16] 16
Default RAM disk size (kbytes) (BLK_DEV_RAM_SIZE) [8192] 8192
Initial RAM disk (initrd) support (BLK_DEV_INITRD) [Y/n/?] y
Source directory of cpio_list (INITRAMFS_SOURCE) []
Packet writing on CD/DVD media (CDROM_PKTCDVD) [N/m/y/?] n
* IO Schedulers
Anticipatory I/O scheduler (IOSCHED_AS) [Y/n/m/?] y
* Multi-device support (RAID and LVM)
* Networking support
Networking support (NET) [Y/n/?] y
* Networking options
Packet socket (PACKET) [Y/n/m/?] y
Unix domain sockets (UNIX) [Y/n/m/?] y
TCP/IP networking (INET) [Y/n/?] y
IP: kernel level autoconfiguration (IP_PNP) [Y/n/?] y
IP: BOOTP support (IP_PNP_BOOTP) [Y/n/?] y
IP: TCP socket monitoring interface (IP_TCPDIAG) [Y/n/m/?] y
* Network packet filtering (replaces ipchains)
* SCTP Configuration (EXPERIMENTAL)
* QoS and/or fair queueing
* Network testing
* Amateur Radio support
* IrDA (infrared) subsystem support
* Bluetooth subsystem support
Network device support (NETDEVICES) [Y/n/?] y
* Ethernet (10 or 100Mbit)
Ethernet (10 or 100Mbit) (NET_ETHERNET) [Y/n/?] y
Generic Media Independent Interface device support (MII) [Y/?] y
AT91RM9200 Ethernet support (ARM_AT91_ETHER) [Y/n/m/?] y
RMII interface (ARM_AT91_ETHER_RMII) [Y/n/?] y
* Ethernet (1000 Mbit)
* Ethernet (10000 Mbit)
* Token Ring devices
* Wireless LAN (non-hamradio)
* Wan interfaces
* SCSI device support
* Fusion MPT device support
* IEEE 1394 (FireWire) support
* I2O device support
* ISDN subsystem
* Input device support
* Userland interfaces
Mouse interface (INPUT_MOUSEDEV) [Y/?] (NEW) y
Horizontal screen resolution (INPUT_MOUSEDEV_SCREEN_X) [1024] 1024
Vertical screen resolution (INPUT_MOUSEDEV_SCREEN_Y) [768] 768
* Input I/O drivers
* Input Device Drivers
* Character devices
* Serial drivers
* Non-8250 serial port support
AT91RM9200 serial port support (SERIAL_AT91) [Y/n/m/?] y
Support for console on AT91RM9200 serial port (SERIAL_AT91_CONSOLE) [Y/n/?] y
Legacy (BSD) PTY support (LEGACY_PTYS) [Y/n/?] y
Maximum number of legacy PTY in use (LEGACY_PTY_COUNT) [256] 256
* IPMI
* Watchdog Cards
Watchdog Timer Support (WATCHDOG) [Y/n/?] y
Disable watchdog shutdown on close (WATCHDOG_NOWAYOUT) [Y/n/?] y
* Watchdog Device Drivers
AT91RM9200 watchdog (AT91_WATCHDOG) [Y/n/m/?] y
* USB-based Watchdog Cards
* Ftape, the floppy tape device driver
SPI driver for AT91 processors (AT91_SPI) [Y/n/?] y
SPI device interface for AT91 processors (AT91_SPIDEV) [Y/n/?] y
* I2C support
I2C support (I2C) [Y/n/m/?] y
I2C device interface (I2C_CHARDEV) [Y/n/m/?] y
* I2C Algorithms
* I2C Hardware Bus support
Atmel AT91RM9200 I2C Two-Wire interface (TWI) (I2C_AT91) [Y/n/m/?] y
* Hardware Sensors Chip support
* Other I2C Chip support
* Multimedia devices
* Digital Video Broadcasting Devices
* File systems
Second extended fs support (EXT2_FS) [Y/n/m/?] y
* CD-ROM/DVD Filesystems
* Pseudo filesystems
/proc file system support (PROC_FS) [Y/n/?] y
/dev file system support (OBSOLETE) (DEVFS_FS) [Y/n/?] y
Automatically mount at boot (DEVFS_MOUNT) [Y/n/?] y
Debug devfs (DEVFS_DEBUG) [N/y/?] n
Virtual memory file system support (former shm fs) (TMPFS) [Y/n/?] y
* Miscellaneous filesystems
Compressed ROM file system support (cramfs) (CRAMFS) [Y/n/m/?] y
* Network File Systems
* Partition Types
* Native Language Support
* Profiling support
* Graphics support
* Console display driver support
* Sound
* Misc devices
* USB support
Support for Host-side USB (USB) [Y/n/m/?] y
USB verbose debug messages (USB_DEBUG) [Y/n/?] y
* Miscellaneous USB options
* USB Host Controller Drivers
SL811HS HCD support (USB_SL811_HCD) [N/m/y/?] n
* USB Device Class drivers
USB Mass Storage support (USB_STORAGE) [N/m/y/?] n
* USB Input Devices
* USB HID Boot Protocol drivers
* USB Imaging devices
* USB Multimedia devices
* Video4Linux support is needed for USB Multimedia device support
* USB Network Adapters
* USB port drivers
* USB Serial Converter support
* USB Miscellaneous drivers
* USB ATM/DSL drivers
* USB Gadget Support
* MMC/SD Card support
* Kernel hacking
Kernel debugging (DEBUG_KERNEL) [Y/n/?] y
* Security options
* Cryptographic options
* Library routines
CRC32 functions (CRC32) [Y/?] y
  上面已经对内核作了详细的配置,考虑到内容比较多的状况,省略了没有配置的选项。能够经过make menuconfig去查看对System Type(系统类型)的修改状况以确认进行正确的配置,如图4.35所示。

图4.35 系统类型已经被设置为AT91RM9200  (7)编译内核生成映像文件。 #make clean#make dep.#/mkimage 4.6 小 结  本章主要讲解Linux内核的目录结构、Linux内核配置选项及裁剪内核、编译内核。最后结合实例讲解内核移植和内核升级的具体过程。在开始接触内核移植时,不提倡初学者拿到源码就直接进行裁剪配置,这样常常会因为忽略了某个选项致使移植的时候失败。最好的办法是首先导入内核自带的配置,在这些配置的基础上根据本身的须要进行裁剪。

相关文章
相关标签/搜索