《第12章Linux内核裁剪与编译》由会员分享,可在线阅读,更多相关《第12章Linux内核裁剪与编译(44页珍藏版)》请在金锄头文库上搜索。
1、Linux操作系统精讲,大连理工大学软件学院 邱铁 综合楼413,Tel:0411-87571632 E_mail: 参考教材: Linux应用与开发典型实例精讲邱铁、于玉龙、徐子川编著. 清华大学出版社. 2010.5,第12章 Linux内核裁剪与编译,学习本章要达到的目标: 1. 理解Linux内核编译选项的含义; 2学会根据不同的硬件配置裁减定制内核; 3 理解内核编译过程中每一步的功能,并编译Linux2.6.30内核。,12.1 内核编译选项,需要去重新编译Linux内核 增加操作系统对新的硬件设备的支持 增加内核新的功能 对内核代码或内核配置进行优化时,12.1.1常规设置Ge
2、neral setup,Prompt for development and/or incomplete code/drivers 显示处于开发调试中或尚未完善的代码或驱动 选中:如果是测试人员或者开发者; 不选:其他情况,Local version - append to kernel release 追加本地版本号 使用命令“uname a”进行查看。,Support for paging of anonymous memory (swap) 使用交换分区或支持虚拟内存,System V IPC System V进程间通信(IPC)支持,许多程序需要这个功能。这个功能一般是必选。,POSI
3、X Message Queues POSIX消息队列的支持,这是POSIX 进程间通信的一部分。 BSD Process Accounting 将进程的统计信息写入文件 信息通常包括建立时间、所有者、命令名称、内存使用、控制终端等,这个选项一般是选择的。,12.1.2可加载模块支持 Loadable module support,Enable loadable module support 使能可加载模块支持 如果使能此选项则可以通过“make modules_install“把内核模块安装在/lib/modules/中,Automatic kernel module loading 使能模块
4、自动加载 在内核需要一些模块时它可以自动调用modprobe命令来加载需要的模块。,12.1.3处理器类型及特性 Processor type and features,Subarchitecture Type (PC-compatible) CPU架构选择 Processor family(386) 处理器系列选择,Generic x86 support 通用x86支持,如果在“Processor family“中没有选择任何CPU,可以选择此项。,12.1.4可执行文件格式 Executable file formats,Kernel support for ELF binaries 内核
5、对ELF文件格式的支持 ELF是开放平台下最常用的二进制文件格式,支持动态连接,支持不同的硬件平台.,Kernel support for a.out and ECOFF binaries 早期UNIX系统的可执行文件格式,目前已经被ELF格式取代,12.1.5网络支持 Networking support,Unix domain sockets 本机高效率的Socket 仅能运行在本机上的高效率的Socket,简称Unix socket。 很多进程使用为这种机制在操作系统内部进行进程间通信,例如X Window和syslog 等。 TCP/IP networking TCP/IP网络协议的支
6、持,12.1.6设备驱动程序选项 Device Drivers,块设备选项中 RAM disk support 内存虚拟磁盘的支持 generic/default IDE chipset support 通用IDE芯片组支持,SCSI device support 对于具有SCSI/SATA/USB/光纤/FireWire/IDE-SCSI接口的设备就需要选上 。 SCSI disk support 具有SCSI接口的硬盘或U盘需要此选项。,ATA ACPI support 对于使用SATA或PATA接口的硬盘或光驱等设备的支持。 Intel PIIX/ICH SATA support Via
7、 SATA support 这两个选项是对具体芯片组的支持,一般选择模块方式,网卡驱动选项,Ethernet (10 or 100Mbit) 这是我们以前应用最广泛的10/100M网卡 。 Ethernet (1000 Mbit) 这是当前已成装机主流的1000M网卡。 Ethernet (10000 Mbit) 这是这是未来发网络发展的趋势:万兆网卡。 Wireless LAN 无线网卡的支持,输入设备支持,Generic input layer (needed for keyboard,mouse,.) 通用输入层的支持,要使用键盘、鼠标等就要选择此项。 Keyboards 键盘驱动,在通
8、用PC机中,通常选AT键盘。 Mouse 鼠标驱动, 在通用PC机中,通常选PS/2鼠标。,字符设备,Virtual terminal Linux的虚拟终端 选择此选项后linux启动时,在屏幕可以看到一些显示信息,另外还负责键盘输入信息等等。,Support for console on virtual terminal 内核将一个虚拟终端用作系统控制台,可以将模块错误、内核错误、启动信息等警告信息发送到这个虚拟终端。 对于通常的Linux来说,这是必备的,图形设备/显卡支持,Support for frame buffer devices 帧缓冲设备支持 帧缓冲设备是为了让应用程序使用统一
9、的接口操作显示设备,这是内核对硬件设备进行的抽象,通常使用桌面的用户需要选择这选项。,12.1.7文件系统,选项 在Linux的PC机中进行安装的最常用的标准文件系统EXT2、EXT3的相关选项一般都要选择 当前正在处于开发和调试阶段的文件系统是EXT4,但还没有正式发布,读者从2.6.30内核源码中会发现,EXT4现已加进内核选项。,12.1.8对于其它配置选项的说明,在配置编译选项时,一定要对每一个选项都进行查看,保证所编译的内核能在所对应的硬件下运行。 对于PC机来说,不确定的硬件或选项,通常可以采用默认的选项 参考所安装的Linux的发行版的配置文件(.config)的说明。,12.2
10、 内核编译与订制,获得Linux内核与补丁 准备编译需要的工具 解压内核 给内核打补丁 设定编译选项 编译与安装内核,12.2.1 获得Linux内核与补丁,最新的 Linux 官方源码是可以从www.kernel.org或其映像站点取得 最新 2.6.x 版本一般放在 /pub/linux/kernel/v2.6/,下载LINUX2.6.30内核补丁,12.2.2 准备编译需要的工具,1安装 gcc, make 等编译工具: 2安装 make menuconfig 时必须的库文件:NCurses (libncurses5-dev 或 ncurses-devel) ,这是当make menuc
11、onfig 时用作生成菜单窗口的程序库 3安装Linux系统生成 kernel-image 的一些配置文件和工具,4一般在编译 Linux 内核时,一般还需要以下工具(这些工具一般是可选的): GNU C+ Compiler (g+ 或 gcc-c+) - 编译 make xconfig 使用的 Qt 窗口时需要 Qt 3 (qt-devel 或 qt3-devel) - make xconfig 时用作 Qt 窗口的程序库 GTK+ (gtk+-devel) - make gconfig 时用作 GTK+ 窗口的程序库 Glade (libglade2-devel) - 要编译 make g
12、config 时的 GTK+ 窗口时需要,12.2.3 解压内核,tar xzvf linux-2.6.30.tar.gz tar xjvf linux-2.6.30.tar.bz2,12.2.4 给内核打补丁,这一步在内核的编译过程中是可选的,如果你对内核有特殊的要求,可以将自己写的补丁打到内核中去。 cd linux-2.6.30 bzcat /patch-2.6.30.bz2 | patch -p1,12.2.5 设定编译选项,make menuconfig菜单选项格式,make xconfig编译选项界面,make gconfig编译选项界面,12.2.5 编译与安装内核,清除所有旧的
13、配置和旧的编译目标等文件: cd /usr/src/linux-2.6.30 make mrproper 接着执行命令make来编译内核 在某些情况下,有的源文件不需以其他源文件为基础即可编译,这时可以使用 j 选项调用 make 来完成并行编译操作 make jn,经过上面的编译内核的步骤,会在目录 arch/x86/boot 目录下生成名为“bzImage”的文件 make install 进行来编译模块 make modules 将内核模块安装到/lib/modules中 make modules_install,12.3安装引导配置,创建initramfs 设置grub 启动选项,12
14、.3.1创建initramfs,mkinitramfs会把/lib/modules/$kernel_version/ 目录下的一些启动时需要使用的模块添加到initramfs中。 mkinitramfs -o /boot/initrd.img-2.6.30 /lib/modules/2.6.30,12.3.2 设置grub,12.3.3 启动选项,思考与练习,1分析Linux内核编译选项,理解编译选项中的常用功能描述。 2获取当前最新版本的Linux内核及其补丁,打开补丁包,分析补丁包意义,举例说明。 3根据你自己计算机的硬件配置进行裁减定制内核;并进行编译和安装,启动新安装的内核并查看其版本号。,