在ubuntu12.04下使用make-kpkg完美编译安装3.3.4内核

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
aoshhi
帖子: 9
注册时间: 2012-05-03 14:34

在ubuntu12.04下使用make-kpkg完美编译安装3.3.4内核

#1

帖子 aoshhi » 2012-05-03 15:31

折腾了两天,总算完美地编译3.3.4内核!
以前,去很多论坛上逛后,开始对自己编译内核感兴趣,于是,就踏上编译内核的探索之路!再此过程中,发现很多论坛给出的帖子,多多少少有些不够完美。大部分都是能编译也能用新内核,但是对于kernel-headers产生的问题(如不能使用vmware/virtualbox等虚拟机软件、不能使用内核提供的头文件等),我是没有搜到完美的解决办法。折腾了两天,总算把kernel-headers产生的问题解决了 :em11 :em11 :em11
编译系统环境:ubuntu 12.04 LTS正式版
一、获取源代码,配置编译环境
首先,你得去内核官网www.kernel.org下载最新的内核(我用的是3.3.4),解压到家目录~/;
其次,根据你的系统,安装编译依赖的软件包,ubuntu12.04下只要安装libncurses5-dev软件包就可以了(安装命令:sudo apt-get install libncurses5-dev)。
安装编译工具make-kpkg:
sudo apt-get install kernel-package
二、配置内核
配置命令:sudo make menuconfig
a.jpg
如果已有配置好的配置文件,直接拷到内核文件夹来,更名为.config。如果不知道怎么配置内核,可以上百度、谷歌,上边有很多有关一般配置内核方法,实在不知道怎么配置(或者英语不过关,看不懂那些鸟语),可以直接到/boot目录下拷贝系统自带配置文件,考过来,更名为.config。根据自己的机器配置,选择相关选项,具体如何选择,这里不再赘述。配置好后保存。
三、编译
命令:sudo make-kpkg --initrd kernel_headers kernel_image -jn(n=你的cpu核心数的2倍,用以打开多线程编译,提高cpu利用率,加快编译速度)
这条命令要执行很长一段时间,根据机器的配置不同,所花时间也不同,耐心等待!
四、安装
在上条命令执行完后,会在当前目录的上一层目录产生两个*.deb文件,这就是咱编译了半天得到的安装包。回到上一层目录:cd ..
用命令:sudo dpkg -i *.deb来安装这两个.deb包,即可安装我们刚刚编译好的内核
五、kernel-headers
至此,重启电脑,选择3.3.4内核启动ubuntu。如果你删除了编译文件夹,kernel-headers就不能用。不删除呢,编译好的内核代码很占空间(大概4~6G),而且也没有用了。通过与系统自带内核相关文件对比,发现/lib/modules/3.3.4/下的build链接文件是链接到~/linux3.3.4,也就是内核源代码文件夹。猜测它的主要作用是告诉系统Kbuild文件在哪儿。于是就手动更改,使kernel-headers能正常使用。
解决方法:将内核编译文件夹下的Kbuild拷贝到/usr/src/linux-headers-3.3.4/下,删除/lib/modules/3.3.4/下的build链接文件,用命令:sudo ln -s /usr/src/linux-headers-3.3.4/Kbuild build重新建立build链接文件。这样你就可以删除很站空间的编译内核文件夹,而且kernel-headers能使用。至此,你可以卸载系统自带的内核,使用自己编译的内核,畅游ubuntu 12.04世界!
总结:在前人的基础上,使用make-kpkg简化编译过程;通过手动重建build文件,解决删除编译内核文件夹带来的kernel-headers不能用的问题。用这个编译方法,你还可以把自己编译的安装包应用于debian/ubuntu类的衍生系统,前提是在配置时要选择更多的驱动程序,才能支持更多的硬件。
b.jpg
头像
麦斯特
帖子: 1034
注册时间: 2005-03-28 0:00
系统: Gentoo x64
来自: ☸我佛山人

Re: 在ubuntu12.04下使用make-kpkg完美编译安装3.3.4内核

#2

帖子 麦斯特 » 2012-05-03 15:55

学习了。
Je ne suis pas d'accord avec ce que vous dites, mais je me battrai jusqu'à la mort pour que vous ayez le droit de le dire.
孤云独闲
帖子: 214
注册时间: 2012-03-21 10:56

Re: 在ubuntu12.04下使用make-kpkg完美编译安装3.3.4内核

#3

帖子 孤云独闲 » 2012-07-11 16:37

楼主试过在台式机编译内核产生的deb包在笔记本上使用吗?
未来还很年轻,我们不要提前变老
hopstone
帖子: 13
注册时间: 2012-07-21 21:13

Re: 在ubuntu12.04下使用make-kpkg完美编译安装3.3.4内核

#4

帖子 hopstone » 2012-07-24 10:09

aoshhi 写了:折腾了两天,总算完美地编译3.3.4内核!
以前,去很多论坛上逛后,开始对自己编译内核感兴趣,于是,就踏上编译内核的探索之路!再此过程中,发现很多论坛给出的帖子,多多少少有些不够完美。大部分都是能编译也能用新内核,但是对于kernel-headers产生的问题(如不能使用vmware/virtualbox等虚拟机软件、不能使用内核提供的头文件等),我是没有搜到完美的解决办法。折腾了两天,总算把kernel-headers产生的问题解决了 :em11 :em11 :em11
编译系统环境:ubuntu 12.04 LTS正式版
一、获取源代码,配置编译环境
首先,你得去内核官网www.kernel.org下载最新的内核(我用的是3.3.4),解压到家目录~/;
其次,根据你的系统,安装编译依赖的软件包,ubuntu12.04下只要安装libncurses5-dev软件包就可以了(安装命令:sudo apt-get install libncurses5-dev)。
安装编译工具make-kpkg:
sudo apt-get install kernel-package
二、配置内核
配置命令:sudo make menuconfig
a.jpg
如果已有配置好的配置文件,直接拷到内核文件夹来,更名为.config。如果不知道怎么配置内核,可以上百度、谷歌,上边有很多有关一般配置内核方法,实在不知道怎么配置(或者英语不过关,看不懂那些鸟语),可以直接到/boot目录下拷贝系统自带配置文件,考过来,更名为.config。根据自己的机器配置,选择相关选项,具体如何选择,这里不再赘述。配置好后保存。
三、编译
命令:sudo make-kpkg --initrd kernel_headers kernel_image -jn(n=你的cpu核心数的2倍,用以打开多线程编译,提高cpu利用率,加快编译速度)
这条命令要执行很长一段时间,根据机器的配置不同,所花时间也不同,耐心等待!
四、安装
在上条命令执行完后,会在当前目录的上一层目录产生两个*.deb文件,这就是咱编译了半天得到的安装包。回到上一层目录:cd ..
用命令:sudo dpkg -i *.deb来安装这两个.deb包,即可安装我们刚刚编译好的内核
五、kernel-headers
至此,重启电脑,选择3.3.4内核启动ubuntu。如果你删除了编译文件夹,kernel-headers就不能用。不删除呢,编译好的内核代码很占空间(大概4~6G),而且也没有用了。通过与系统自带内核相关文件对比,发现/lib/modules/3.3.4/下的build链接文件是链接到~/linux3.3.4,也就是内核源代码文件夹。猜测它的主要作用是告诉系统Kbuild文件在哪儿。于是就手动更改,使kernel-headers能正常使用。
解决方法:将内核编译文件夹下的Kbuild拷贝到/usr/src/linux-headers-3.3.4/下,删除/lib/modules/3.3.4/下的build链接文件,用命令:sudo ln -s /usr/src/linux-headers-3.3.4/Kbuild build重新建立build链接文件。这样你就可以删除很站空间的编译内核文件夹,而且kernel-headers能使用。至此,你可以卸载系统自带的内核,使用自己编译的内核,畅游ubuntu 12.04世界!
总结:在前人的基础上,使用make-kpkg简化编译过程;通过手动重建build文件,解决删除编译内核文件夹带来的kernel-headers不能用的问题。用这个编译方法,你还可以把自己编译的安装包应用于debian/ubuntu类的衍生系统,前提是在配置时要选择更多的驱动程序,才能支持更多的硬件。
b.jpg
按照楼主的方法,一步一步试了下,结果编译出错,提示如下:

/opt/dev/codes/kernel/linux-3.4.6/arch/x86/Makefile:81: stack protector enabled but no compiler support
SYSHDR arch/x86/syscalls/../include/generated/asm/unistd_32.h
SYSHDR arch/x86/syscalls/../include/generated/asm/unistd_64.h
SYSHDR arch/x86/syscalls/../include/generated/asm/unistd_x32.h
SYSTBL arch/x86/syscalls/../include/generated/asm/syscalls_32.h
HOSTCC arch/x86/tools/relocs
CHK include/linux/version.h
CHK include/generated/utsrelease.h
UPD include/generated/utsrelease.h
CC kernel/bounds.s
cc1: error: unrecognized command line option "-mregparm=3"
kernel/bounds.c:1: error: bad value (i686) for -march= switch
make[3]: *** [kernel/bounds.s] 错误 1
make[2]: *** [prepare0] 错误 2
make[2]:正在离开目录 `/opt/dev/codes/kernel/linux-3.4.6'
make[1]: *** [debian/stamp/conf/kernel-conf] 错误 2
make[1]:正在离开目录 `/opt/dev/codes/kernel/linux-3.4.6'
make: *** [debian/stamp/conf/minimal_debian] 错误 2
Failed to create a ./debian directory: 没有那个文件或目录 at /usr/bin/make-kpkg line 984.

不知是哪里错了。。。
孤云独闲
帖子: 214
注册时间: 2012-03-21 10:56

Re: 在ubuntu12.04下使用make-kpkg完美编译安装3.3.4内核

#5

帖子 孤云独闲 » 2012-07-28 18:36

3.4.6有问题 我编译也出错了 不过是和ck3补丁冲突
未来还很年轻,我们不要提前变老
longyuan
帖子: 18
注册时间: 2010-04-29 20:45
系统: ubuntu 14.04,Windows

Re: 在ubuntu12.04下使用make-kpkg完美编译安装3.3.4内核

#6

帖子 longyuan » 2012-07-28 23:19

表示试过DEB,遇到双显卡这个坎儿了,bumblebee跟不上
头像
rapistor
帖子: 1983
注册时间: 2009-01-19 15:09

Re: 在ubuntu12.04下使用make-kpkg完美编译安装3.3.4内核

#7

帖子 rapistor » 2012-07-29 1:30

先mark下。
坚守在linux的天堂!
孤云独闲
帖子: 214
注册时间: 2012-03-21 10:56

Re: 在ubuntu12.04下使用make-kpkg完美编译安装3.3.4内核

#8

帖子 孤云独闲 » 2012-07-29 18:10

楼上 明月
未来还很年轻,我们不要提前变老
mkdir_new
帖子: 3
注册时间: 2012-03-27 11:02

Re: 在ubuntu12.04下使用make-kpkg完美编译安装3.3.4内核

#9

帖子 mkdir_new » 2013-03-06 11:04

学习了!!!! :em11 :em11
头像
ahwad
帖子: 1112
注册时间: 2009-05-06 0:36

Re: 在ubuntu12.04下使用make-kpkg完美编译安装3.3.4内核

#10

帖子 ahwad » 2013-11-26 22:47

学习了,我编译3.12 ,好像大黄蜂有问题。。。。
rediscover
帖子: 3173
注册时间: 2010-01-13 23:26

Re: 在ubuntu12.04下使用make-kpkg完美编译安装3.3.4内核

#11

帖子 rediscover » 2013-11-27 4:20

为啥是这么特殊的一个版本?
Here I am.
Ubuntu 桌面培训 - 全中文官方文档,含汉化截图,提供PDF
回复