linux内核剪裁_weixin_30716725的博客-程序员秘密

技术标签: 操作系统  内存管理  嵌入式  


首 页 阅览室 馆友 我的图书馆 登录注册

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



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

在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键盘和鼠标选项,一定要选择

第十一部分:除以下选项,其它全部删除
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大写表示缺省值。

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/?]

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支持ext2、vfat、ntfs、yaffs2、ramfs、cramfs和romfs等多种文件系统。在嵌入式系统中常用的闪存设备的文件系统有cramfs、romfs、ramfs、jffs2、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内核配置选项及裁剪内核、编译内核。最后结合实例讲解内核移植和内核升级的具体过程。在开始接触内核移植时,不提倡初学者拿到源码就直接进行裁剪配置,这样经常会由于忽略了某个选项导致移植的时候失败。最好的办法是首先导入内核自带的配置,在这些配置的基础上根据自己的需要进行裁剪。

 

转载于:https://www.cnblogs.com/ccccccccc/p/3473953.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30716725/article/details/99584316

智能推荐

C语言中的const,volatile,restrict用法总结_jasonxty的博客-程序员秘密

const, volatile, restrict是我们在程序中经常遇到的几个限定词,是时候好好总结一下了。本文转自http://www.jb51.net/article/42348.htmconst 变量声明中带有关键词const,意味着不能通过赋值,增量或减量来修改该变量的值,这是显而易见的一点。指针使用const则要稍微复杂一点,因为不得不把让指针本身称为const和指针指向的值称为co

TeXworks中文乱码问题_texworks改编译方式_程序猿架构的博客-程序员秘密

转载自:http://blog.csdn.net/lydyangliu/article/details/8714151指定texworks的encoding是件要注意的事情。缺省是utf8,打开文件若发现乱码,千万不要修改并保存(结果就成了UTF8编码的文件了)。找个能够正常打开的编辑器,如Notepad++,在文件开头加入双引号之间的内容:"% !TEX encoding = S

cf C. Duff and Weight Lifting (二进制编码_好题)_h1021456873的博客-程序员秘密

已知一堆数列,找出k的元素使得 2a1 + 2a2 + ... + 2ak = 2x       我们使用二进制编码来实现,最高位为1,其余都为0,才能保证存在2^x这样一个数字!!!!这个还有一个要注意的是: 要用ios::sync_with_stdio(false);关闭同步,因为数据量大,会超时Recently, Duff has been pract

scikit-learn linearRegression 1.1.1 普通最小二乘法_瑟瑟发抖的菜鸡望的博客-程序员秘密

普通线性回归公式:在这个公式中,为权值,有些书籍和文章也称为参数和权重,再线性回归中,通过优化算法求出最佳拟合的w和b(偏值),来进行预测sklaern实例应用:LinearRegression 用系数 :math:w = (w_1,...,w_p) 来拟合一个线性模型, 使得数据集实际观测数据和预测数据(估计值)之间误差平方和最小,这也是最小二乘法的核

Cousera-stanford-机器学习练习-第二周-Linear Regression with Multiple Variables_逍遥扇的博客-程序员秘密

Linear Regression with Multiple Variables1Suppose m=4 students have taken some class, and the class had a midterm exam and a final exam. You have collected a dataset of their scores on the two exa

第二周编程作业 -Logistic Regression with a Neural Network mindset_plt.plot(d['costs'])_致Great的博客-程序员秘密

Logistic Regression with a Neural Network mindsetWelcome to your first (required) programming assignment! You will build a logistic regression classifier to recognize cats. This assignment will step

随便推点

机器学习-多元线性回归(Multiple Regression)算法_多元线性回归算法_YEN_csdn的博客-程序员秘密

学习彭亮《深度学习基础介绍:机器学习》课程与简单线性回归区别简单线性回归:一个自变量(x)多元线性回归:多个自变量(x)多元回归模型y=β0+β1x1+β2x2+ … +βpxp+ε 其中:β0,β1,β2… βp是参数 ε是误差值多元回归方程E(y)=β0+β1x1+β2x2+ … +βpxp估计多元回归方程y_hat=b0+b1x1+

人脸检测(十七)--Faceness-Net_Eason.wxd的博客-程序员秘密

转自:https://blog.csdn.net/zhangjunhit/article/details/78337570?locationnum=4&amp;amp;fps=1Faceness-Net: Face Detection through Deep Facial Part Responses PAMI2017From Facial Parts Responses to Face Dete...

AI科普(二):人工智能的根本任务_人工智能分类任务_AI有温度的博客-程序员秘密

AI科普(二):人工智能的根本任务一、结论先行二、分类任务三、回归任务一、结论先行人工智能要处理的任务多种多样,比如人脸识别、垃圾邮件检测、电源票房预测、降雨量预测等等。但是这些任务背后的根本任务只有两类,就是分类与回归。分类任务:模型输出是对象的所属类别,数据类型是离散数据。例如预测一封邮件是否是垃圾邮件、预测照片中的人是男性还是女性还是偏中性?这种结果只有两个值或者多个值的问题,我们可以把每个值都当做一类,预测对象到底属于哪一类。对于结果只有两个值的问题,我们一般称为二分类问题,结果有多个值的问题

IP跨网段协议转换网关WTGNet-NAT_无锡望天观科技有限公司的博客-程序员秘密

WTGNet-NAT协议转换网关采用多路通讯设计,实现数据共享具备1个RS485串口、1个两口以太网交换机接口和一个以太网通讯接口。不对原系统做任何硬件和软件修改,不影响原系统通讯,可以设备的IP地址和通讯端口的转换。

learning to rank_排序_增加qid进行排序_weixin_ry5219775的博客-程序员秘密

背景在信息过载的时代,如何从互联网的海量数据中,准确、及时、高效地获取用户所需信息是信息检索研究的主要问题,其本质是信息的排序问题。伴随着人工智能的蓬勃发展,机器学习的思想逐渐渗透到信息检索等重要领域,如何利用机器学习提升信息检索的性能成为热门研究领域。在信息检索领域,一般按照相关度对文档进行排序,比较典型的做法是针对搜索引擎中的一条查询query,返回一个相关的文档document集合,然后根据(query, document)之间的相关度进行排序,再返回给用户。而随着影响相关度的因素变多,使用传统排序

后缀自动机概念的温习_weixin_30393907的博客-程序员秘密

觉得对于一个数据结构充分的学会使用,一定要对它的构成部分和定义概念有很充分很全面的了解.所以我觉得的一种温习的最好方式就是:明晰概念-&gt;分析运用这样的层次.概念的明晰确实是十分有用的,它既是理解他人算法的必要前提,也是你在看到题目后可以有创新想法的重要基础.下面这篇文章主要是写给笔者自己看的...所以逻辑有点混乱是因为写的顺序不是这样一路下去的...2331.状态...

推荐文章

热门文章

相关标签