1、Linux内核定制及编译方法,目的、要求 了解Linux内核主要的模块组成,掌握内核的定制或配置方法,重点掌握Linux内核的编译过程及相关命令的使用方法。,Linux内核系统模块组成,1、进程调度模块 Linux 以进程作为系统资源分配的基本单位,并采用动态优先级的进程高级算法,保证各个进程使用处理机的合理性。进程调度模块主要是对进程使用的处理机进行管理和控制。2、内存管理模块 Linux的内存管理模块采用先进的虚拟存储机制,实现对多进程的存储管理。它提供了十分可靠的存储保护措施,对进程赋予不同的权限,用户不能直接访问系统的程序和数据,保证了系统的安全性。同时,为每个用户进程分配一个相互独立
2、的虚拟地址空间。,Linux内核系统模块组成及功能,3、文件系统模块 Linux 的文件系统模块采用先进的虚拟文件系统(VFS)技术,屏蔽了各种文件系统的差别,为处理各种不同的文件系统提供了统一的接口,支持多种不同的物理文件系统达90多种。同时,Linux把各种硬件设备看作一种特殊的文件来处理,用管理文件的方法管理设备,非常方便、有效。 4、 网络接口模块 Linux具有最强大的网络功能。网络接口模块通过套接字(Socket)机制实现计算机之间的网络通信,并采用网络层次模型提供对多种网络协议和网络硬件设备的支持。 5、进程间通信模块 进程间通信模块保证了Linux支持多种进程间通信机制,包括最
3、基本的信息和管道,同时支持信息队列、信号量和共享内存等。,Linux内核的编译模式: 1、编译到内核:内核启动时可以支持相应的功能,其优点是方便、速度快,系统启动即可使用这部分功能;缺点是内核变得很庞大。同时,系统安全性会降低。 2、编译成模块:内核启动后可以动态加载。优点是不会使内核过分庞大,缺点是必须由自己来调用这些模块。(主流),内核配置界面(#make menuconfig):,内核配置主要选项及功能: 1. Code maturity level options(代码成熟度) Prompt for development and/or incomplete code/drivers
4、使用尚在开发中或尚未完成的代码与驱动程序。,2. General setup(常规设置) 1) Local version - append to kernel release 在内核版本后面加上自定义的版本标识(如直接输入:test)。 2) Automatically append version information to the version string 自动在版本字符串后面添加版本标识信息,编译时需要有perl以及git仓库支持。 3) Support for paging of anonymous memory (swap) 内核使用交换分区或者交换文件作为虚拟内存。 4)
5、System V IPC 支持System V的进程间通信(IPC),许多程序需要这个功能。,5) POSIX Message Queues POSIX消息队列。 6) BSD Process Accounting 将进程的统计信息写入文件的用户级系统调用,主要包括进程的创建时间、创建者、指令名、内存占用情况等信息。 7) Export task/process statistics through netlink(EXPERIMENTAL) 通过netlink接口向用户空间导出任务/进程的统计信息。 8) UTS Namespaces 支持UTS名字空间。 9) Auditing suppo
6、rt 审计支持,某些内核模块(例如SELinux)需要它,只有同时选择其子项才能对系统调用进行审计。,10) Kernel .config support 把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本来提取这些信息。 11) Create deprecated sysfs files 创建过时的sysfs文件系统 。 12) Kernel-user space relay support (formerly relayfs) 提供从内核空间向用户空间传递大量数据的接口。 13) Initial RAM filesystem and RAM di
7、sk (initramfs/initrd) support 支持内存文件系统(initramfs/initrd) 。 14) Optimize for size (Look out for broken compilers!) 编译时优化内核尺寸。 15) Configure standard kernel features (for small systems) 配置标准的内核特性(面向小型系统)。,3. Loadable module support(可加载模块支持) 1)Enable loadable module support 打开可加载模块支持,如果打开它则必须通过“make mo
8、dules_install”把内核模块安装在/lib/modules/目录下。 2)Module unloading 允许卸载已经加载的模块。 3)Forced module unloading 允许强制卸载正在使用中的模块。 4)Module versioning support 允许使用其他内核版本的模块。 5)Source checksum for all modules 为所有的模块校验源码。 6)Automatic kernel module loading 允许内核通过运行modprobe来自动加载所需要的模块。,4. Block layer(块设备层) 1) Support fo
9、r Large Block Devices 使用大于2TB的块设备时需要选择。 2) Support for tracing block io actions 块队列IO跟踪支持。 3) Support for Large Single Files 使用大于2TB的文件时需要。 4) IO Schedulers IO调度器。,5. Processor type and features(CPU类型及特性) 1) Tickless System (Dynamic Ticks) 支持动态时钟。 2) High Resolution Timer Support 支持高解析度时钟。 3) Symmet
10、ric multi-processing support 对称多处理器支持,如多个CPU或者使用的是多核CPU。 4) Subarchitecture Type 处理器的子体系结构类型。,5) Paravirtualization support (EXPERIMENTAL) 支持同时运行双Linux系统。 6) Processor family 处理器系列,按照实际使用的CPU选择。 7) Generic x86 support 通用x86支持。 8) HPET Timer Support HPET是替代8254芯片的新一代定时器。 9) Preemption Model 内核抢占模式。 1
11、0) Local APIC support on uniprocessors 支持多处理器APIC。,11) Machine Check Exception 让CPU检测到系统故障时通知内核。 12) Toshiba laptop support Toshiba笔记本模块支持。 13) Dell laptop support Dell笔记本模块支持。 14) Enable X86 board specific fixups for reboot 修正某些旧X86主板的bug。 15) /dev/cpu/microcode - Intel IA32 CPU microcode support 支
12、持IA32微代码,仅对Intel的CPU有效。 16) /dev/cpu/*/msr - Model-specific register support 支持MSR (Model-Specific Register)寄存器。 17) /dev/cpu/*/cpuid - CPU information support 支持从/dev/cpu/x/cpuid获得CPU的唯一标识符(CPUID)。,18) Firmware Drivers 固件驱动程序。 19) High Memory Support 支持最高内存。 20) Memory model 内存模式。 21) 64 bit Memory
13、 and IO resources (EXPERIMENTAL) 使用64位的内存和IO资源。 22) Allocate 3rd-level pagetables from highmem 对内存大于4GB的机器,将用户空间的页表放到高位内存区,以节约宝贵的低端内存。 23) Math emulation 数学协处理器仿真。,24) MTRR (Memory Type Range Register) support 提升PCI/AGP总线上的显卡2倍以上的速度。 25) Boot from EFI support EFI是一种可代替传统BIOS的技术。 26) Enable seccomp t
14、o safely compute untrusted bytecode 允许seccomp (快速计算)安全地运算非信任代码。 27) Timer frequency 内核时钟频率。 28) kexec system call kexec系统调用。 29) kernel crash dumps 产生内核崩溃转储。 30) Build a relocatable kernel(EXPERIMENTAL) 建立内核的重定位信息。 31) Compat VDSO support 对VDSO(Virtual Dynamically-linked Shared Object)提供支持。,6. Power
15、 management options(电源管理选项) 1) Power Management support 支持电源管理,包括APM和ACPI两种标准。 2) CPU Frequency scaling 允许动态改变CPU主频,达到省电和降温的目的。,7. Bus options (PCI,PCMCIA,EISA,MCA,ISA)( 总线选项) 1) PCI support 支持PCI总线。 2) ISA support 支持ISA总线。 3) MCA support 支持微通道总线。 4) NatSemi SCx200 support AMD Geode处理器的机器功能支持。 5) PC
16、CARD (PCMCIA/CardBus) support PCMCIA卡(主要用于笔记本)支持。 6) PCI Hotplug Support 支持PCI的热插拔。,8. Executable file formats(可执行文件格式) 1) Kernel support for ELF binaries ELF是开放平台下最常用的二进制文件格式,支持动态连接,支持不同的硬件平台。 2) Kernel support for a.out and ECOFF binaries 早期UNIX系统的可执行文件格式。 3) Kernel support for MISC binaries 允许插入二
17、进制的封装层到内核中,使用Java、.NET、Python、Lisp等语言编写的程序时需要它。,9. Networking(网络) 1) Networking options 网络选项。 2) Amateur Radio support 业余无线电支持。 3) IrDA (infrared) subsystem support 红外线支持, 4) Bluetooth subsystem support 支持蓝牙技术 5) Generic IEEE 802.11 Networking Stack 通用无线局域网(IEEE 802.11系列协议)支持。,6) Enable full debuggi
18、ng output 支持全面的调试输出。 7) IEEE 802.11i CCMP support 支持IEEE 802.11i CCMP。 8) IEEE 802.11i TKIP encryption 支持IEEE 802.11i TKIP。 9) Software MAC add-on to the IEEE 802.11 networking stack 支持MAC地址加入IEEE 802.11网络堆栈。,10. Device Drivers(设备驱动程序) 1) Generic Driver Options 通用驱动程序选项。 2) Connector - unified users
19、pace kernelspace linker 统一的用户空间和内核空间连接器。 3) Memory Technology Devices (MTD) 支持特殊的存储技术装置,如常用于数码相机或嵌入式系统的闪存卡。 4) Parallel port support 打印机并口支持。 5) Plug and Play support 即插即用支持。,6) Block devices 支持块设备。 7) Misc devices 支持其他杂项设备。 8) ATA/ATAPI/MFM/RLL support IDE硬盘和ATAPI光驱。 9) SCSI device support 支持SCSI设备
20、。 10) Serial ATA and Parallel ATA drivers 支持SATA与PATA磁盘设备。,11) Multi-device support (RAID and LVM) 支持多磁盘设备 (RAID和LVM) 。 12) Fusion MPT device support 支持Fusion MPT设备。 13) IEEE 1394 (FireWire) support 支持IEEE 1394。 14) I2O device support 支持I2O(智能IO)设备 。,15) Macintosh device drivers 支持Macintosh系统设备。 16)
21、 Network device support 支持网络设备。 17) ISDN subsystem 支持综合业务数字网(ISDN,Integrated Service Digital Network)。 18) Telephony Support 支持VoIP。 19) Input device support 支持输入设备。 20) Character devices 支持字符设备。 21) I2C support 支持I2C。可用于监控电压、风扇转速及温度等。 22) SPI support 串行外围接口(SPI)常用于微控制器(MCU)与外围设备之间的通信。,23) Dallass 1
22、-wire bus 一线总线。 24) Hardware Monitoring support 支持硬件监测。 25)Multifunction device drivers 支持多功能设备驱动。 26) Multimedia devices 支持多媒体设备。 27) Graphics support 图形设备/显卡支持。 28) Sound 支持声卡。 29) HID Devices 支持HID设备。 30) USB support 支持USB。,31) MMC/SD Card support 支持MMC/SD卡设备。 32) LED devices 支持LED设备。 33) InfiniB
23、and support 支持InfiniBand设备。 34) EDAC - error detection and reporting (RAS) (EXPERIMENTAL) 支持错误检测和报告。 35) Real Time Clock 支持实时时钟。 36) DMA Engine support 支持DMA引擎。 37) Auxiliary Display support 支持高级显示。 KS0108 LCD Controller:支持KS0108 LCD显示。 38) Virtualization 支持虚拟技术。,11. File Systems(文件系统) 1) Second ext
24、ended fs support 支持Ext2文件系统。 2) Ext3 journalling file system support 支持Ext3文件系统。 3) Ext4dev/ext4 extended fs support development (EXPERIMENTAL) 支持Ext4文件系统。 4) ReiserFS extended attributes 支持ReiserFS文件系统。 5) JFS filesystem support 支持JFS文件系统。 6) XFS filesystem support 支持XFS文件系统。 7) GFS2 file system su
25、pport 支持GFS2文件系统。,8) OCFS2 file system support 支持OCFS2文件系统。 9) minix fs support 支持minix文件系统。 10) ROM file system support 支持ROM文件系统。 11) Inotify file change notification support 支持Inotify文件系统。 12) Quota support 支持Quota磁盘定额文件系统。 13) Kernel automounter support 支持内核自动挂载。 14) Kernel automounter version 4
26、 support (also supports v3) 支持内核第四版本自动挂载。 15) Filesystem in Userspace support 支持文件系统的用户空间。,16) CDROM/DVD Filesystems CDROM/DVD文件系统。 17) DOS/FAT/NT Filesystems 支持DOS/FAT/NT文件系统。 18) Pseudo Filesystems 支持Pseudo文件系统。 19) Miscellaneous Filesystems 支持其它文件系统。 20) Network Filesystems 支持网络文件系统。 21) Partitio
27、n Types 支持分区类型。 22) Native Language Support 支持多国语言。 23) Distributed Lock Manager 分布式上锁管理。,12. Instrumentation Support(分析支持) 1) Profiling support (EXPERIMENTAL) 支持Profiling系统评测 。 2) Kprobes (EXPERIMENTAL) 支持Kprobes 探测 。,13. Kernel Hacking (内核探测) Show timing information on printks 使用printk函数时显示时间。 Ena
28、ble _must_check logic 使用“必须检查”的逻辑 。 3) Magic SysRq key 支持SysRq键。 4) Enable unused/obsolete exported symbols 支持输出标志。 5) Debug Filesystem 支持调试文件系统。 6) Run make headers_check when building vmlinux 编译内核时,支持make headers_check。 7) Kernel debugging 支持内核调试。,14. Security Options(安全选项) 1) Enable access key re
29、tention support 支持access key。 2) Enable different security models 支持各种安全模式。,15. Cryptographic Options(加密选项) 1) Cryptographic API 支持加密API(应用程序接口)。,16. library Routines(库例程 ) 1) CRC-CCITT functions 支持CRC-CCITT功能。 2) CRC16 functions 支持CRC16功能。 3) CRC32c (Castagnoli, et al) Cyclic Redundancy-Check 支持CRC
30、32c检测。,Linux内核编译方法,1、下载最新稳定的内核 从互联网内核官方网站(www.kernel.org)下载最新内核源代码,如linux-2.6.21.tar.gz。 2、内核源码文件解包 把内核源代码文件linux-2.6.21.tar.gz拷贝到/usr/src目录下,进入/usr/src目录并执行解包命令 #tar -zxvf linux-2.6.21.tar.gz,所有的内核源代码将被解包到当前目录下的linux-2.6.21目录。 3、配置内核 图形界面:#make xconfig;字符界面:#make menuconfig 4、设置关联文件 #make dep 5、清理一
31、些不必要的文件 #make clean 6、编译内核 对于大内核(比如需要SCSI支持:#make bzImage 对于小内核:#make zImage,7、编译模块 #make modules 8、安装模块 make modules_install 9、编译生成initrd.img文件 #mkinitrd /boot/initrd-2.6.21test.img 10、复制新内核 #cp /usr/src/linux2.6.21/arch/i386/boot/bzImage /boot/vmlinuz-2.6.21test 11、修改grub引导,增加新内核的引导 在/boot/grub/gr
32、ub.conf文件中增加如下内容。 title Red Hat Advanced Server 2.6.21test /引导标记 root (hd0,9) /指定Linux引导设备名和分区 kernel /boot/vmlinuz-2.6.21test ro root=/dev/hda10 /指定内核及根分区 initrd /boot/initrd-2.6.21test.img /指定initrd文件名 最后重启系统,测试新内核系统。,作业,1) 从互联网内核官方网站上下载最新的内核源代码,解包在用户当前目录,并编译生成新内核。最后增加新内核的GRUB引导,并测试可否引导成功。 2) 配置最新的Linux内核程序,编译生成最小的内核目标程序,要求文件大小要小于160KB。,