-
编译内核:
-
前提:
-
准备好开发环境;
-
获取目标主机上硬件设备的相关信息;
-
获取到目标主机系统功能的相关信息,例如要启用的文件系统;
-
获取内核源代码包;www.kernel.org
-
-
-
准备好开发环境:
包组(CentOS 6):
Server Platform Development
Development Tools
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[root@centos68 initrd]# yum grouplist | grep Dev
Additional Development
Development tools
Server Platform Development
Desktop Platform Development
yum groupinstall “Server Platform Development” -y
yum groupinstall ” Development tools ” –y
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
目标主机硬件设备相关信息:
-
CPU:
-
~]# cat /proc/cpuinfo
~]# x86info -a
~]# lscpu
-
PCI设备:
~]# lspci
-v
-vv
~]# lsusb
-v
-vv
~]# lsblk
-
了解全部硬件设备信息
~]# hal-device
-
简单依据模板文件的制作过程:
~]# tar xf linux-3.10.67.tar.xz -C /usr/src
~]# cd /usr/src
~]# ln -sv linux-3.10.67 linux
~]# cd linux
~]# cp /boot/config-$(uname -r) ./.config
~]# make menuconfig
~]# screen
~]# make -j #
~]# make modules_install
~]# make install
重启系统,并测试使用新内核;
-
练习:编译好,并启用之;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
yum groupinstall “Server Platform Development” -y
yum groupinstall ” Development tools ” –y
yum install screen
tar xf linux-4.9.6.tar.xz -C /usr/src/
cd /usr/src/
ln -sv linux-4.9.6 linux
cd linux
cp /boot/config-$(uname -r) ./.config
make menuconfig
screen
make modules_install
make install
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
编译内核的步骤
-
下载kernel
www.kernel.org
-
配置内核选项
-
支持”更新”模式进行配置:
-
make config:基于命令行以遍历的方式去配置内核中可配置的每个选项;
-
make menuconfig:基于curses的文本窗口界面;
-
make gconfig:基于GTK开发环境的窗口界面;
-
make xconfig:基于Qt开发环境的窗口界面;
-
-
支持”全新配置”模式进行配置:
-
make defconfig:基于内核为目标平台提供的”默认”配置进行配置;
-
make allnoconfig: 所有选项均回答为”no”;
-
-
-
-
编译
make [-j #]
-
如何只编译内核中的一部分功能:
-
只编译某子目录中的相关代码:
-
# cd /usr/src/linux
# make dir/
例如:只编译drivers/net/文件夹
#make drivers/net/
-
只编译一个特定的模块:
# cd /usr/src/linux
# make dir/file.ko
例如:只为e1000编译驱动:
# make drivers/net/ethernet/intel/e1000/e1000.ko
-
如何交叉编译内核:
-
编译的目标平台与当前平台不相同;
# make ARCH=arch_name
-
-
要获取特定目标平台的使用帮助
# make ARCH=arch_name help
-
如何在已经执行过编译操作的内核源码树做重新编译:
事先清理操作:
-
# make clean:清理大多数编译生成的文件,但会保留config文件等;
-
# make mrproper: 清理所有编译生成的文件、config及某些备份文件;
-
# make distclean:mrproper、patches以及编辑器备份文件;
-
-
安装模块
#make modules_install
-
安装内核等
make install
-
安装bzImage为/boot/vmlinuz-VERSION-RELEASE
-
生成initramfs文件
-
编辑grub的配置文件
-
-
screen命令:
-
打开新的screen:
# screen
-
退出并关闭screen:
# exit
-
剥离当前screen:
Ctrl+a,d
-
显示所有已经打开的screen:
screen -ls
-
恢复某screen
screen -r [SESSION]
-