Linux内核编译安装

来源:互联网 发布:广州疯狂java在哪 编辑:程序博客网 时间:2024/05/21 08:00

目录
前言
一、编译前准备
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、清理删除

一、编译前准备
1、准备开发环境
开发包组(CentOS7)
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
二、编译前准备
1、安装开发包组
1 #yum groupinstall Development toos

2、下载源码文件及解压
tar –xvf linux4.13.10.tar.xz 。

3、准备配置文件
#cp /boot/config-3.10.0-514.el7.x86_64 /root/kernel/linux-4.13.10
#mv config-3.10.0-514.el7.x86_64 .config

解释一下上面的两步:
从boot目录拷贝一个config文件过来主要是为了方便,这个文件里保存都是之前你在安装系统是内核所安装的模块,这里拷贝过来为了主要为了方便演示,具体各位以后在应用中需要什么的模块那各位就自己去筛选了

三、编译开始
1、首先给执行make menuconfig 命令(该命令在源码目录下执行)

2、选择我们需要启动的内核模块。
在打开这个配置界面的第一个界面下依次选择 File systems – > DOS/FAT/NT file systems – > NTFS file systems support (利用空格键选中。[ ] N [M] 表示将模块打在ramdisk中 [*] y 表示将模块打在内核中。本实验将NTFS模块打在ramdisk中。 )

3、开始进行编译
因为远程编译可能终端如果断开那那就前功尽弃了 ,所以诸位在编译前最好使用screen 这样即使终端断开也不用担心编译中断了。
# make
(该命令在源码目录下执行) 编译过程可能需要一段时间机器性能好的话 几分钟性能不好的话半小时以上。编译过程总可能会报错最多的报错就是openssl 各位大可以提前安装(yum 安装就好 yum install openssl-devel)

4、make modules_install:安装模块
执行命令 make modules_install 就好了
5、make install :安装内核相关文件
执行命令 make install 安装内核相关文件,主要目的将所有的编译之后的内
容拷贝安装到相应的目录。
6、编辑grub配置文件

补充:
1、大概步骤:

1、安装开发包组 2、下载源码文件 3、.config:准备文本配置文件 4、make menuconfig:配置内核选项 5、make(这个要好久)6、make modules_install:安装模块 7、make install :安装内核相关文件 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.ko

4、编译内核
如何交叉编译内核:
编译的目标平台与当前平台不相同;
# make ARCH=arch_name
要获取特定目标平台的使用帮助
# make ARCH=arch_name help
# make ARCH=arm help

5、清理删除
在已经执行过编译操作的内核源码树做重新编译:
需要事先清理操作:
# make clean:清理大多数编译生成的文件,但会保留config文件等
# make mrproper: 清理所有编译生成的文件、 config及某些备份文件
# make distclean: mrproper、 patches以及编辑器备份文件
卸载内核
删除/lib/modules/目录下不需要的内核库文件
删除/usr/src/linux/目录下不需要的内核源码
删除/boot目录下启动的内核和内核映像文件
更改grub的配置文件,删除不需要的内核启动列表

原创粉丝点击