正文
make mrproper
删除之前编译的配置等,相当于make clean all
make menuconfig
加载配置管理界面,你可能需要先安装ncurses-devel。
这里面会有好多好多选项,比如是否编译蓝牙驱动,是否编译NAT模块等等,选项基本为m,y,n,这样会引发几个问题。
上面的
make menuconfig
命令,实际上就是在内核编译文件夹下生成了.config文件,只不过使用可视化方式让选择更方便一些,最终内核是基于.config文件的配置来进行编译的。
时至今日,内核模块已非常的丰富(繁多),如果全部都编译加载的话,内核将变的非常臃肿,你在编译的时候最好按需加载,每个模块是否加载都有.config文件来决定。 比如以下配置表明是否开启cgroup
CONFIG_CGROUP_SCHED=y
CONFIG_CGROUPS=y
CONFIG_CGROUP_NS=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_MEM_RES_CTLR=y
CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y
CONFIG_BLK_CGROUP=y
CONFIG_CGROUP_PERF=y
CONFIG_SCHED_AUTOGROUP=y
CONFIG_CFQ_GROUP_IOSCHED=y
CONFIG_NET_CLS_CGROUP=y
CONFIG_NETPRIO_CGROUP=y
在你编译内核过程中,必然面临一个问题,就是这么多内核选项,我要开启哪些?我要精简哪些?
这块有个技巧就是你找到现在服务器用得内核配置,把它拷贝一份作为一个默认的config文件,当然你得注意内核版本,版本相差太大很多参数是不一样的。
所以调优内核编译参数是个技术活
make dep
保存好配置以后,meke dep内核程序还会自己check依赖关系,哪些配置可用等,它会修改你的.config文件,把它变成这台机器上可用的。
make clean
清除上一次编译的残留文件
make -j8 bzImage
编译内核并压缩成一个img镜像,make -j8 -jn为多进程一般为cpu核心数2倍,如果24核就可以-j48 这样会速度会加快很多。
make -j8 modules
编译各个依赖模块
make -j8 modules_install
安装各个模块,其实就是把模块拷贝到/lib/modules/kernel.版本号/里
make -j8 install
安装内核,将镜像,预加载文件,拷贝到/boot中,修改/etc/grub.conf文件
默认内核程序会将新安装得内核顺序调成0,而启动调成1,把它手动调成0,重启才用新内核。
至此内核编译就结束了,然后到了最关键一步,重启,如果重启成功,基本上不会有太大问题,如果启动失败,那就要看具体报错来调整了。
内核移植
编译内核耗时很长,如果你编译好新的内核,想要在很多服务器上批量升级该怎么办?难道每台服务器都要重新编译一遍么?