查看: 10403|回复: 16
收起左侧

[资料库] Ubuntu下Linux内核编译的一点总结

[复制链接]
ubuntu2011
发表于 2013-5-21 16:14:08 | 显示全部楼层 |阅读模式
本帖最后由 ubuntu2011 于 2013-5-21 19:04 编辑

ubuntu 13.04使用的3.8内核在电源管理方面改动比较大,结果就是跟我的笔记本的acpi不兼容。刚好3.10内核RC版发布,所以这些天尝试自己编译安装内核,这里做一个小总结吧。那个ubuntu的综合贴已经够长了,没几个人会有耐心全部看完吧,所以就另发一贴了。


首先要做的当然是下载并解压内核源码

https://www.kernel.org/,点击下载你要的版本的tar.xz文件

网上有的说法是解压到/usr/src目录下边,真不建议这么做。首先是编译内核对目录没什么特殊要求,其次,如果你编译前的配置不当,选择了太多模块(modules)的话,编译完成后的文件可达10G以上,有可能撑爆/分区。(第一次编译的时候惨遭此祸)
建议解压到用户主目录,可以在文件管理器里边解压,也可以用mkdir、tar等命令解压。

安装编译环境:
sudo apt-get install build-essential

编译前的配置:

1,打开终端,用cd命令进入源码目录。

2,用make mrproper命令清除以前编译产生的一切文件,包括配置、.o文件等等,如果是首次编译则跳过此命令

3,运行配置命令

最常用的配置内核的方法是“make menuconfig”。“make config”太简陋(基于文本的最为传统的配置界面),“make xconfig”(基于图形窗口模式的配置界面)虽然更加直观,但需要庞大的qt类库支持,menuconfig(基于文本选单的配置界面)应该是最佳的折中。(如果已有配置好的配置文件,直接拷到内核源码文件夹下,更名为.config,跳过配置的命令即可)

在ubuntu和debian下运行make menuconfig会自动从/boot目录下导入当前使用的内核的配置文件(其他系统不清楚,可以自己从/boot目录下copy当前内核的配置文件到内核源码目录下,更名为.config)。ubuntu 13.04使用的3.8内核和我要安装的3.10内核毕竟版本跨越不大,导入的3.8内核的配置只检测到4个无效的选项(会自动屏蔽无效选项),保存配置之后编译安装新内核一切正常。

如果内核版本跨越比较大,或者想根据自己的机器配置做适当的配置和精简,则需要手动修改配置了。相关的选项多达数千个,英文比较好的人加上google、百度就知道相关选项是干什么的了, 官方的文档在源码目录下的Documentation目录!

配置用到的键只有几个,esc退出菜单;空格改变选项状态;光标键上下左右移动,回车选定。
选项意义:M是编译成可以随时加入的模块,*是编译进入内核,空就是不要。
我们可以精简的部分是硬件模块部分,对于自己没有的硬件可以毫不犹豫的清除。

自动精简内核的命令(不建议):

可以使用“make localmodconfig”自动精简内核。注意:该方法会执行 lsmod 命令查看当前系统中加载了哪些模块 (Modules), 并最后将原来的 .config 中不需要的模块去掉,仅保留前面 lsmod 出来的这些模块,从而简化了内核的配置过程。所以,在执行命令前可以先使用下你的摄像头,挂载下iso等等…免得编译好了发现有硬件不能用。
本人测试了一下这个命令,发现精简的幅度很大,结果编译成的内核无法启动,所以建议有更深了解的人使用。


4、编译内核和模块

依次执行“make bzImage ”、“make modules”、“sudo make modules_install”、“sudo make install”,如果前面的配置没有问题的话,耐心等待一段时间就可以得到编译好的内核和模块了。执行命令前要保证有足够的空间。最后的安装内核命令会自动更新grub配置的,执行完重启就可以进入新内核了。如果新内核有问题,自然也可以在启动的时候选择进入旧版内核。


如何删除编译安装的内核:

如果新内核工作不正常,删除很简单。/boot目录和/lib/modules下新内核相关的文件或目录直接删除,然后在终端里更新grub配置:sudo update-grub

评分

参与人数 1经验 +20 收起 理由
恋爱的夏娜 + 20 特殊主题

查看全部评分

woodelf
发表于 2013-5-21 18:57:18 | 显示全部楼层
本帖最后由 woodelf 于 2013-5-21 18:58 编辑

从2.6.32开始便一直是自己编译内核,这种习惯也带到了FreeBSD,NetBSD以及OpenBSD下面,喜欢精简通用内核。
另外,个人是习惯需要的东西全部编入内核,而没有模块,这样可以不用生成initramfs。当然,由于现在全盘ZFS,不得不靠initramfs来挂载/文件系统。
ubuntu2011
 楼主| 发表于 2013-5-21 19:07:18 | 显示全部楼层
woodelf 发表于 2013-5-21 18:57
从2.6.32开始便一直是自己编译内核,这种习惯也带到了FreeBSD,NetBSD以及OpenBSD下面,喜欢精简通用内核。 ...

全部编译进内核的话开机会比较慢吧?
woodelf
发表于 2013-5-21 19:10:11 | 显示全部楼层
ubuntu2011 发表于 2013-5-21 19:07
全部编译进内核的话开机会比较慢吧?

你认为现今的硬件环境还在乎那么一点内核的大小么?况且,我的内核是根据自己硬件完全定制的,不需要的模块不保留,我甚至去掉了ext4等文件系统的支持。
另外,我也试着用ubuntu的内核配置来进行定制,结果才看了几个选项树就没耐心了,ubuntu确实是通用内核,但却未必适合所有人。
levibeta
发表于 2013-5-21 20:24:18 | 显示全部楼层
喜欢自己编译东西的,/usr最好单独分出,给的空间尽量大一点(当然,如果像2楼一样用ZFS的可以无视)。
ZHIZAI100
发表于 2013-5-21 20:27:48 | 显示全部楼层
正在学习编译openwrt
恋爱的夏娜
头像被屏蔽
发表于 2013-5-21 20:56:41 | 显示全部楼层
我还是不打扰你们好了。。。




    夏娜疾风菲特奈叶
    道常在
    发表于 2015-5-16 13:02:17 | 显示全部楼层
    楼主好,我在8.1下安装ubuntu,重启电脑后提示“对安装所在分区控制失败”(大概意思,具体忘了)然后说可能是硬盘有多个主分区,一直过不了那个什么验证安装,我硬盘分了4个主分区,请问怎么办
    风之咩~
    发表于 2015-5-16 13:14:09 来自手机 | 显示全部楼层
    道常在 发表于 2015-5-16 13:02
    楼主好,我在8.1下安装ubuntu,重启电脑后提示“对安装所在分区控制失败”(大概意思,具体忘了)然后说可能 ...

    你这坟挖的挺深嘛
    用的什么安装方法?
    道常在
    发表于 2015-5-16 13:29:44 | 显示全部楼层
    风之咩~ 发表于 2015-5-16 13:14
    你这坟挖的挺深嘛
    用的什么安装方法?

    8.1下启动wubi.exe
    您需要登录后才可以回帖 登录 | 快速注册

    本版积分规则

    手机版|杀毒软件|软件论坛| 卡饭论坛

    Copyright © KaFan  KaFan.cn All Rights Reserved.

    Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-1-13 07:46 , Processed in 0.144617 second(s), 17 queries .

    卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

    快速回复 客服 返回顶部 返回列表