显示标签为“kernel”的博文。显示所有博文
显示标签为“kernel”的博文。显示所有博文

2009/2/17

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 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
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 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"项。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/67661/showart_1768120.html

2008/12/25

Kernel v2.6.28 released

Kernel v2.6.28
Files Lines
Added 2777 Added 975678
Changed 11090 Changed 1248687
Deleted 1876 Deleted 490036

Release date: 24-Dec-2008
Documentation: None available
Links: Download patch, All 2.6 releases 
Patches:
None


 2.6.28 (4 files, 19 dirs)
 .mailmap (+3 lines)
 CREDITS (+11 lines)
 MAINTAINERS (+185 lines)
 Makefile (+6 lines)
 Documentation (52 files, 52 dirs)
 arch (1 file, 22 dirs)
 block (24 files)
 crypto (20 files, 1 dir)
 drivers (2 files, 68 dirs)
 firmware (2 files, 1 dir)
 fs (44 files, 52 dirs)
 include (26 dirs)
 init (6 files)
 ipc (5 files)
 kernel (71 files, 4 dirs)
 lib (17 files)
 mm (42 files)
 net (4 files, 30 dirs)
 samples (2 files, 2 dirs)
 scripts (14 files, 5 dirs)
 security (6 files, 3 dirs)
 sound (2 files, 17 dirs)
 virt (1 dir)

2008/11/27

Kernel release: 2.6.28-rc6

Publication:Kernel.orgDate:Nov 20 2008
Advertisement
Click 'Read full article' for changelog and additional information.

Files added: 2776
Files changed: 10889
Files removed: 1874

Lines added: 965822
Lines changed: 1242310
Lines removed: 485183


2008/11/26

Cygwin下vivi和kernel编译全攻略

最近打算设计新产品,在Friendly Arm买了一套Matrix5系统研究一下。发现用ARM-Linux开发似乎比较明智些!
但用Windows习惯了,还不太熟悉Linux,而且重装RH9恐怕很费事。还是先用Win2000吧,Linux熟悉熟悉再说!
看见版上有个Cygwin,可以在Windows下建立仿Linux系统,下了一个试用一下,感觉还不错,只可惜没有图形界面!
根据杨老板所说,Cygwin里可以编译Matrix5的vivi和kernel。就先以此开始熟悉Linux吧!
大约用了一周左右的时间,终于搞定了vivi和kernel在Cygwin里的编译。

现在把编译的过程贴出来,以供有相同感受的兄弟们参考:
(由于Cygwin里操作全部使用行命令输入方式,所以最好先熟悉一下Linux的常用命令)
1、安装Cygwin:
安装过程不多说了,开发中心里有参考。不过要提两点:最好在系统比较干净时安装,建议系统刚启动完就安装,否则安装可能会出错;另外安装时一定要装gcc和ncurse库,否则menuconfig用不了,假如搞不清就全部安装吧!
装完Cygwin后会有一个快捷方式,运行它就可以进入Cygwin系统了。第一次进Cygwin系统还会有一些初始化过程,完了会进入命令输入状态,提示符为“@”。 ARM
这里要先说明一下,Linux的文件系统是从/开始的,Cygwin系统的/就是在Windows里安装Cygwin时选的安装路径 (X:\cygwin)。假如想在Cygwin里访问Windows的所有逻辑盘,到/cygdrive里找。比如Windows里的C:就是 Cygwin里的/cygdrive/c 。这样可以在Windows和Cygwin中交叉访问文件,对于已经熟悉Windows操作的人来说是比较方便的。
还有就是要注重Linux里是区分大小写的,也就是说“file”和“FILE”不是同一个名字。尤其一些文件或目录名中既有大写字母也有小写字母,注重不要输错!
2、安装arm-linux-gcc:
这个安装开发中心里也有,去下载一下解开就算安装好了,注重要解到/opt目录(Windows中的X:\cygwin\opt)下。
修改启动脚本/etc/profile文件(可在Windows中用文本编辑器修改X:\cygwin\etc\profile)中的PATH环境变量为
PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/opt/FriendlyARM/crosstool/arm-linux/gcc-2.95.3-glibc-2.2.3/binPATH
gdbserver可以先不用,好象是Debug时才会用到。至少我在编译时是没用到。
输入“arm-linux-gcc -v”,自己测试一下吧。
3、编译VIVI:
在开发中心已有较具体的说明。一定要下载版上的“vivi_cygwin.tgz”,不要用光盘里的。预配置文件在包里已经有了(config.friendlyarm),不用再下载。 字串5
由于VIVI要用到kernel的一些头文件,所以需要kernel的源代码,在光盘里“SBC-2410X/SBC-2410X-Linux /matrix5-kernel-v5.5.tgz”。将vivi和kernel都解到/friendly-arm下,即/friendly-arm /vivi和/friendly-arm/kernel里。然后需修改/friendly-arm/vivi/Makefile里的一些变量设置:
LINUX_INCLUDE_DIR = /friendly-arm/kernel/include/
CROSS_COMPILE = arm-linux-
ARM_GCC_LIBS = /opt/FriendlyARM/crosstool/arm-linux/gcc-2.95.3-glibc-2.2.3/lib/gcc-lib/arm-linux/2.95.3
三个变量在不同位置,自己找一下吧。其中前面两个变量杨老板已经改好了,核对一下就可以了;注重第三个变量中FriendlyARM中间没有减号,gcc-2.95.3-glibc-2.2.3中的g是小写。
为确保编译的有效性,最好在编译之前将vivi里所有的“*.o”和“*.o.flag”文件删掉(本人曾经上过当)。
进入/friendly-arm/vivi目录里,输入“make menuconfig”,开始选择配置。可以Load也可以自己修改试试(不要乱选,有些选项是不能支持的)。注重Exit时一定要选“Yes”保存配置。
再输入“make”正式开始编译,一会儿就完了。假如不报错,在/friendly-arm/vivi里面就有你自己的“vivi”了。 字串5
4、编译kernel:
这是最痛苦的一步,开发中心里虽然有这个条目,但还没放上去。只好自己摸,搞了好几天。
kernel的源程序在上面编译vivi时已经解到/friendly-arm/kernel中了。因为这个程序包已在Linux中编译过,有一些中间和目标代码和Cygwin是不兼容的。必须先处理一下,否则不能正常进行编译。
首先,还是把kennel里所有的“*.o”和“*.o.flag”文件删掉,以免不必要的麻烦。然后进入/friendly-arm/kernel目录,可以输一下“make menuconfig”试试。结果提示出错。这是由于配置脚本已在Linux中编译过,在scripts/lxdialog里产生了一个Linux下的可执行程序lxdialog。在Cygwin里这是个坏东西,它既不能执行,还会阻止可执行程序的生成。必须把它删掉。类似的文件如下:
/friendly-arm/kernel/scripts/lxdialog/lxdialog
/friendly-arm/kernel/scripts/mkdep
/friendly-arm/kernel/scripts/split-include
/friendly-arm/kernel/drivers/char/conmakehash
/friendly-arm/kernel/drivers/net/hamradio/soundmodem/gentbl
这几个文件必须删掉,注重是没有扩展名的文件,不要把源文件“*.c”删掉!
现在应该可以用“make menuconfig”进行配置了。这里的选项太多,先Load包里的config.friendly配置,待会儿再慢慢研究各个选项吧。同样,Exit时一定要选“Yes”保存配置。
下面可以开始编译了。输入“make zImage”,可以看见开始一个个模块的编译。但是过了一、二分钟,就会报一个错,大概是说“/friendly-arm/kernel /include/asm/arch/ide.h”没找到。这个问题很希奇,按理说头文件丢失是个低级错误,不可能发现不了,不知道RH9中编译是否也有同样问题。可以这样解决,从别的地方复制一个ide.h过来,只要其中有相应的两个函数定义就可以了。比如:
cp /friendly-arm/kernel/include/asm/arch-l7200/ide.h /friendly-arm/kernel/include/asm/arch/ide.h
再执行“make zImage”应该可以完成编译了。不过时间比较长,得要好几分钟。不报错的话,在/friendly-arm/kernel/arch/arm/boot目录里会生成你编译的zImage 。
接下来,也许你打算自己修改一下“make menuconfig”里的配置。这里有个比较麻烦的问题,你最好先把“/friendly-arm/kernel/.hdepend”这个文件备份一下。问题是这样的:当你修改了某些比较要害的选项后,会提示你进行“make dep”。此时即使你直接进行“make zImage”,该过程亦会自动先运行。一旦执行到一个要生成“.hdepend”的命令时会提示命令参数太长。再看.hdepend已成了一个空文件。 ARM开发论坛
这个“.hdepend”真是个头痛的问题,估计在RH9里应该没这种事,否则这编译根本进行不下去。开始想把Cygwin的设置改一下应该就可以了,可找了半天也没找到有关的设置。求助杨工,倒是给了一个办法,可还是不顶用。直到现在,这个问题仍没有很好的解决。不过,把我自己用的两个方法写出来给大家参考一下:
a)把备份好的“.hdepend”复制回来,修改“/friendly-arm/kernel/Makefile”,将其中一行“scripts /mkdep -- `find $(FINDHPATH) -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` > .hdepend”的行首加一个“#”字符。实际上就是直接使用原有的“.hdepend”,编译时跳过重新生成该文件。此法已经试过,是可以的。但有什么副作用不知道!
b)仍然要把“Makefile”中生成“.hdepend”那一行去掉,换成下面三个命令行:
scripts/mkdep -- `find $(HPATH)/asm -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` > .hdepend
scripts/mkdep -- `find $(HPATH)/linux -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` >> .hdepend 字串4
scripts/mkdep -- `find $(HPATH)/scsi $(HPATH)/net -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` >> .hdepend
注重三行前面都有一个TAB。当执行过“make dep”后还要手工修改一下“.hdepend”:查找“.PRECIOUS:”字样引导的三段列表,将它们合并成一个“.PRECIOUS:”列表(列表头上的“.PRECIOUS:”留着,中间两个删掉即可)并将列表放在文件尾上。然后再执行“make zImage”即可完成编译。此法较麻烦,但可靠性高一点!

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/29898/showart_1296232.html