一、编译一个内核
1.下载Linux2.6.*的内核源代码
2.tar解压到目录dd后,在dd内操作:
1)从/boot里拷贝一份config文件命名为.config; 并make menuconfig 保存
2)make -j 8
3)make modules_install
4)make install
(如果缺包,http://archives.fedoraproject.org/pub/archive/fedora/
)
3.重启。
一言以蔽之:
make -j 8 && make modules_install && make install
二、怎么删除多余的内核?
cd到/boot目录下
ll
删除所有的带有旧版本内核的文件
rm *4.9.6*
更新grub
sudo update-grub2
三、centos下的一个错误
错误:
ERROR: modinfo: could not find module mlx5_ib
解决:
yum install libpciaccess libpciaccess-devel
四、arch Linux下编译安装内核
安装核心软件包
安装 base-devel 软件组 pacman -S base-devel
下载内核并解压
简单配置
导出当前内核设置
导出正在运行的内核的 .config 配置文件:
$ zcat /proc/config.gz > .config
警告: 如果使用导出的 .config 文件,不要忘了在 General Setup —> 选项中修改内核版本,这样可以避免编译的内核覆盖当前内核文件。(其实这个可以不用做,版本错不了的)
编译内核
编译时间将从15分钟到超过一小时不等。这很大程度依赖于选择了多少选项/模块和处理器性能。详情参考 Makeflags[broken link: invalid section]。.config 配置好之后,在内核目录允许:
$ make
编译内核模块
Warning: 从这里开始,需要 root 权限执行命令,否则会失败.
编译完内核后编译模块:
# make modules_install
该命令将编译好的模块拷贝至 /lib/modules/-,例如 /lib/modules/3.18.28-ARCH。这样,这些模块和那些被你电脑上其他内核使用的模块就独立开来。
Tip: 如果系统需要正常 Linux 内核外的模块,需要在定制内核安装完成之后重新编译它们。
拷贝内核到 /boot 目录
内核编译完成后会生成内核的 bzImage (big zImage) 文件,根据系统架构,将此文件复制到 /boot 目录,以 3.18 内核为例:
32-bit (i686) kernel:
# cp -v arch/x86/boot/bzImage /boot/vmlinuz-linux318
64-bit (x86_64) kernel:
# cp -v arch/x86_64/boot/bzImage /boot/vmlinuz-linux318
制作初始化内存盘
自动生成
复制和修改 mkinitcpio preset,就能用官方内核一样的方式生成自定义内核的 initramfs 镜像。下面例子中将已有的 preset 复制到 linux318 要使用的版本:
# cp /etc/mkinitcpio.d/linux.preset /etc/mkinitcpio.d/linux318.preset
针对定制内核编辑和修改此文件,ALL_kver= 应该和定制内核匹配:
/etc/mkinitcpio.d/linux318.preset
...
ALL_kver="/boot/vmlinuz-linux318"
...
default_image="/boot/initramfs-linux318.img"
...
fallback_image="/boot/initramfs-linux318-fallback.img"
用官方内核一样的方式生成 initramfs 镜像:
# mkinitcpio -p linux318
拷贝System.map
如果 /boot 支持软链接(i.e., not FAT32), 将 System.map 复制到 /boot, 然后创建 /boot/System.map 软链接到 /boot/System.map-YourKernelName:
# cp System.map /boot/System.map-YourKernelName
# ln -sf /boot/System.map-YourKernelName /boot/System.map
完成以上所有步骤之后,你的/boot目录中应该多出以下三个文件和一个软链接:
- Kernel: vmlinuz-YourKernelName
- Initramfs: Initramfs-YourKernelName.img
- System Map: System.map-YourKernelName
- System Map kernel symlink
Bootloader 设置
在你的启动器(bootloader)配置文件中为你神奇的新内核添加一个入口。范例见GRUB, LILO, GRUB2 or Syslinux。