1、目录 前言 一、编译前准备 1、准备开发环境 2、获取目标主机硬件设备相关信息: 3、获取目标主机系统功能的相关信息 4、获取内核源码 二、编译前准备 1、安装开发包组 2、下载源码文件及解压 3、准备配置文件 三、编译开始 1、首先给执行make menuconfig 命令(该命令在源码目录下执行) 2、选择我们需要启动的内核模块。 3、开始进行编译 4、make modules_install:安装模块 5、make install :安装内核相关文件 ·6、编辑grub配置文件 四、补充: 1、大概步骤: 2、编译配置选项 3、编译 4、编译内核 5、清理删除
2、一、编译前准备 1、准备开发环境开发包组(CentOS6) Server platform development Development toos 2、获取目标主机硬件设备相关信息: CPU: cat /proc/cpuinfo x86info –a lscpu PCI设备: lspci -v (-vv 详细) lsusb -v -vv lsblk 块设备 了解全部硬件设备信息 hal-device 3、获取目标主机系统功能的相关信息 例如:需要启用相应的文件系统 这个实验里我们需要将NTFS文件系统格式启用。 在实际的应用中可能需求更为复杂。 4、获取内核源码 www.kernel.org
3、二、编译前准备1、安装开发包组1 #yum groupinstall Development toos2、下载源码文件及解压tar –xvf linux4.8.10.tar.xz (很多人说要解压在/usr/src其实都一样这里实验环境就没有讲究那么多至新建了一个kernel目录。)3、准备配置文件 #cp /boot/config-2.6.32-573.el6.x86_64 /root/kernel/linux-4.8.10 #mv config-2.6.32-573.el6.x86_64 .config #grep NTFS .config # CONFIG_NTFS_FS is not set 解释一下上面的两步: 从boot目录拷贝一个config文件过来主要是为了方便,这个文件里保存都是之前你在安装系统是内核所安装的模块,这里拷贝过来为了主要为了方便演示,具体各位以后在应用中需要什么的模块那各位就自己去筛选了(虽然这种工作几乎不会做当然除非有特殊需求的,既然刚刚来看这篇文章,那我相信你的老板也不放心让你去这样做。开个玩笑 哈。。) 至于 grep NTFS .confg (这里只是想让大家看下NTFS这个内核模块没有启动的下面在编译的时候我们就将NFTS启用)
4、三、编译开始1、首先给执行make menuconfig 命令(该命令在源码目录下执行) 第一步先给以后内核加个名称 。
5、选择我们需要启动的内核模块。 在打开这个配置界面的第一个界面下依次选择 File systems -- > DOS/FAT/NT file systems -- > NTFS file systems support (利用空格键选中。[ ] N [M] 表示将模块打在ramdisk中 [*] y 表示将模块打在内核中。本实验将NTFS模块打在ramdisk中。 )
6、退出保存 之后grep NTFS .config (看图就明白了)
7、开始进行编译 因为远程编译可能终端如果断开那那就前功尽弃了 ,所以诸位在编译前最好使用screen 这样即使终端断开也不用担心编译中断了。 # make -j 4(cpu 核心数 单一核心就不用写了) (该命令在源码目录下执行) 编译过程可能需要一段时间机器性能好的话 几分钟性能不好的话半小时以上。编译过程总可能会报错最多的报错就是openssl 各位大可以提前安装(yum 安装就好)
8、make modules_install:安装模块执行命令 make modules_install 就好了5、make install :安装内核相关文件执行命令 make install 安装内核相关文件,主要目的将所有的编译之后的内容拷贝安装到相应的目录。6、编辑grub配置文件
9、补充:1、大概步骤: 1、安装开发包组 2、下载源码文件 3、.config:准备文本配置文件 4、make menuconfig:配置内核选项 5、make [-j #] 6、make modules_install:安装模块 7、make install :安装内核相关文件 安装bzImage为/boot/vmlinuz-VERSION-RELEASE (去boot目录下查看) 生成initramfs文件 8、编辑grub的配置文件2、编译配置选项 配置内核选项 支持“更新”模式进行配置: make help (a) make config:基于命令行以遍历的方式去配置内核中可配置的每个选项 (b) make menuconfig:基于curses的文本窗口界面 (c) make gconfig:基于GTK (GNOME)环境窗口界面 (d) make xconfig:基于QT(KDE)环境的窗口界面 支持“全新配置”模式进行配置 (a) make defconfig:基于内核为目标平台提供的“默认”配置进行配置 (b) make allyesconfig: 所有选项均回答为“yes“ (c) make allnoconfig: 所有选项均回答为"no“3、编译 全编译:make [-j #] 编译内核的一部分功能: a) 只编译某子目录中的相关代码: # cd /usr/src/linux # make dir/ (b) 只编译一个特定的模块: # cd /usr/src/linux # make dir/file.ko 例如:只为e1000编译驱动: #make drivers/net/ethernet/intel/e1000/e1000.ko4、编译内核 如何交叉编译内核: 编译的目标平台与当前平台不相同; # make ARCH=arch_name 要获取特定目标平台的使用帮助 # make ARCH=arch_name help # make ARCH=arm help5、清理删除 在已经执行过编译操作的内核源码树做重新编译: 需要事先清理操作: # make clean:清理大多数编译生成的文件,但会保留config文件等 # make mrproper: 清理所有编译生成的文件、 config及某些备份文件 # make distclean: mrproper、 patches以及编辑器备份文件 卸载内核 删除/lib/modules/目录下不需要的内核库文件 删除/usr/src/linux/目录下不需要的内核源码 删除/boot目录下启动的内核和内核映像文件 更改grub的配置文件,删除不需要的内核启动列表最后写的不怎么样 ,望诸位见谅 希望朋友们能够有所收获。