- 硬件环境:联想Y485-PC机,AMD-A8(CPU)
- 编译器:GCC
- 原Linux系统内核2.6.32(Red Hat Enterprise 6.6光盘原始安装版本)
- 升级后Linux系统内核3.16.40
- Linux 系统位数: 32位(注: AMD-A8 CPU支持64bit系统,我配置内核的时候勾选64bit kernel时,make提示失败, 可能与我的gcc版本有关,用 Red Hat光盘yum安装的gcc是32位的,奇怪的是光盘安装linux后我的系统是el6.i686结尾,应该属于前一版本安装linux的历史遗留问题)
内核编译步骤:
-下载源码: https://www.kernel.org/pub/linux/kernel/
配置内核
root权限,解压源码到xxx/kernel文件夹,进入xxx/kernel/3.16.40
make mrproper
make clean
make menuconfig
一般来说利用旧配置文件来配置新的内核,可以执行:
cp /boot/configure-$Current_Version xxx/kernel/3.16.40/.configure
编译内核
在menuconfig 菜单下将.configure文件load进去,然后再根据自己的实际情况来做精细化微调。另外, 由于本人需要开发嵌入式linux跨平台的程序, 需要开启samba功能, 还经常需要调试网络, 所以为了避免不必要的麻烦,也将selinux功能给去掉,不将它编译进内核。 一般非开发用户还是需要将selinux功能添加上,以免出现安全漏洞。配置完成以后, 执行make bzImage -j4; 多核CPU就加-j命令,提高编译速度吧;
再执行: make modules -j4 编译模块, 需要等待较长时间;
安装module到/lib/module/3.16.40目录下:
执行 make modules_install;复制相关的文件到/boot文件夹下: cp xxx/kernel/3.16.40/x86/boot/bzImage /boot/vmlinuz-$version cp xxx/kernel/3.16.40/.configure /boot/configure-3.16.40 cp xxx/kernel/3.16.40/initrd-$version /boot
制作ramdisk:
mkinitrd -v /boot/initramfs-3.16.40.img 3.16.40修改grub启动菜单:
vi /boot/grub/menu.list
仿照原来的格式,重新构造一个新的内核启动,一个有4行,根据自己的配置情况修改一下即可。 我的配置如下:
title Simon’s Linux Kernel(3.16.40)
root(hd0, 0)
kernel /vmlinuz-3.16.40 ro root=/dev/mapper/ …
…..
….
….
initrd /initramfs-3.16.40.imgReferences:
- 鸟哥的Linux私房菜
by Simon
2017/05/30