最新linux内核编译

来源:互联网 发布:javascript入门pdf 编辑:程序博客网 时间:2024/05/14 05:13
步骤

1.安装git工具,用它下载最新内核源代码.

sudo apt-get install git(基于ubuntu linux)

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git(这种方式下载速度可能有点慢,但对我们以后进入开源社区开发更方便,很多开源项目都是用git来托管的)

当然你也可以直接在linux内核官网直接下载,这样速度更快。我由于ubuntu是安装在虚拟机上,所以使用的是这种方式。

2.我下载的linux内核源代码是linux-3.17.4.tar.xz.,机器当前的内核是linux-3.13的。

解压tar.xz文件:先 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx.tar 然后,再用 tar xvf xxx.tar来解包

3.解压后的源文件,我们可以将源文件复制到/usr/src目录下,当然也可以其他目录下。我直接复制到这个目录下的,linux内核安装的默认目录也是/usr/src目录。

方法:cp linux-3.17.4.tar /usr/src

4.进入到内核源代码目录,需要配置内核,但是配置内核前,可能有一些清理工作需要做(因为是新下载的内核,所以通常可不必此步骤)

命令:cd /usr/src/linux-3.17.4

make clean 

make mrproper

关于make clean和make mrproper二者的区别,主要是清理程度不一样。

具体查看这篇文章:http://blog.csdn.net/sidely/article/details/40296745

5.  配置内核,有几个选项可以选择:

make config是基于文本的传统配置界面

make menuconfig是基于文本的选单式配置界面,是最为灵活的内核配置工具

make xconfig是基于图形窗口模式的配置界面,需要xWindow图形环境的支持

make oldconfig用于在原来内核配置的基础上作修改

但通常我们都是用第二种方式make menuconfig,但在使用该命令之前,一定要安装一个ncurses,没安装会出现下面的情况(见图)


至于ncurses是什么?

维基百科:ncursesnew curses)是一个程序库,它提供了API,可以允许程序员编写独立于终端的基于文本的用户界面。它是一个虚拟终端中的“类GUI应用软件工具箱。它还优化了屏幕刷新方法,以减少使用远程shell时遇到的延迟

执行安装命令:sudo apt-get install libncurses*

有时我们在一些老的ubuntu系统上安装ncurses库可能apt-get install libncurses*命令也安装不上。这时我们就需要自己去网上下载相关系

统版本ncurses,特别注意一定是要跟系统配套的,因为程序包跟系统有依赖关系的。

笔者前段时间安装了一个ubuntu 10.10,内核是2.6.35,想编译个2.6.32内核,于是下载了个libncurses5-dev_5.9-4的ncurses库,

结果不管怎么样也装不上,并出现下面的情况。


最后按照图上说的下载了个libncurses5-dev_5.7+20100626-0ubuntu1_i3就可以正常安装了

安装命令是:dpkg -ilibncurses5-dev_5.7+20100626-0ubuntu1_i3

安装完成后再运行make menuconfig,会出现如下界面代表安装成功,可以进行内核配置了。


在这里,进入到文本选单,当然可以做一些选择,但通常如果不是实际应用,只是练习内核编译,那么选择general setup就可以了,然后退出,并保存内核配置。

6.make dep命令是否

在网上有些讲诉编译内核前,还要执行make dep (建立模块间的依赖信息),我在3.17.4的内核编译前执行了下这个命令,结果如下:

-插图


在网上查了一下,这个命令在编译2.6内核以前是需要的,2.6以后就不需要执行这个命令就可以直接编译内核,从执行该命令后的警告信息可以看出。

7.编译内核和模块,注意这里是编译内核和模块,在网上很多地方都没将此处叙述清除,这里有3个命令可供选择:

make 编译内核和模块,相当于make bzImage 加 make modules; 3个多小时

make zImage 编译长生压缩形式的内核文件,30分钟左右

make bzImage 编译产生高压缩形式的内核文件,30分钟左右

关于zlmage,bzImage的区别?

zImage是vmlinuz经过gzip压缩后的文件,适用于小内核(512KB以内),加载到内存的开始640KB处。

bzImage是big zImage的缩写,是vmlinuz经过gzip压缩后的文件,适用于大内核。

可参考http://www.tuicool.com/articles/NvMB3m

 

如果你执行了make,就没必要执行make modules,前一个在30分钟,后一个在3小时时间,如果执行make bzImage则需要make modules,前者编译内核,后者编译模块,如果是第一次编译内核则通常两个都需要,但如果是后来编程需要,只是修改了内核源码,则重新编译内核时并不需要重新编译模块。

在此,我先执行

make -j2 bzImage

再执行make modules

 注意,在编译内核时,可以添加-j选项,来加快内核编译速度,单核使用-j2,双核使用-j4

make -j2 bzImage在执行完后,结果如下,代表编译完成


内核编译完成后,会在/usr/src/linux/arch/x86/boot目录中生成一个新内核的映像文件bzImage。如果编译的内核很小,系统会提示你使用make zImage命令来编译。这时,编译程序就会生成一个名叫zImage的内核映像文件。 

make modules这个过程时间较长,估计2~3个小时,3.17.4期间没出息什么错误,执行完成后结果如下


8.安装模块
命令:make modules_install(此时,所有的东西包括安装好的模块会在/boot/下生成相应的文件夹

9.安装内核
命令:make install(完成内核的安装(会复制内核至标准位置/boot..)相应的grub文件也会做更改

10.安装完后,重启按uname -r可以查看linux版本变成了3.17.4


关于老版本的ubuntu系统,安装完内核与模块后还需要自己配置一些东西,步骤如下:

具体请参见:http://www.cnblogs.com/devil-91/archive/2012/07/23/2605568.html
1.创建 initrd文件: 
mkinitramfs -o /boot/initrd.img-2.6.32.27
2.更新配置GRUB引导列表 
sudo gedit /boot/grub/grub.cfg 
我的grub.cfg添加如下: 
menuentry 'Ubuntu 10.04,Linux 2.6.32.27' --class ubuntu --class gnu-linux --class gnu --class os { 
recordfail 
insmod ext2 
set root='(hd1,9)' 
search --no-floppy --fs-uuid --set 501d3a42-1d52-4438-99bf-e679da605867 
linux /vmlinuz-2.6.32.27 root=UUID=33883099-83a5-49f3-9c12-ee6a4d90da9e ro   quiet splash 
initrd /initrd.img-2.6.32.27 

# 以下是原2.6.32内核启动项 
menuentry 'Ubuntu,Linux 2.6.35-22-generic' --class ubuntu --class gnu-linux --class gnu --class os { 
recordfail 
insmod ext2 
set root='(hd1,9)' 
search --no-floppy --fs-uuid --set 501d3a42-1d52-4438-99bf-e679da605867 
linux /vmlinuz-2.6.35-22-generic root=UUID=33883099-83a5-49f3-9c12-ee6a4d90da9e ro   quiet splash 
initrd /initrd.img-2.6.35-22-generic 


        到此为止,整个内核的编译就全部完成啦。 

    不过也许你重启系统时,虽然启动菜单中增加了新内核2.6.34的启动项,但极可能会启动失败,出现以下提示:

warning:can't open directory /lib/modules/2.6.32.27/modules.dep,no such files or directory 


        此时不应气馁,玩LINUX要有敢食螃蟹的勇气和毅力,哈哈。静下心,选择从旧内核启动登录系统,然后执行以下命令(为了避免输入错误,最好复制下面的命令)修改后就能成功启动新内核了。 


###################################### 
sudo su  (保证获得root权限,否则会提示权限不够,不能成功完成任务哦) 
cd /boot 
cp initrd.img-2.6.32.27 initrd-2.6.32.27.old (先做一个备份以防万一,哈哈) 
depmod -a 
update-initramfs -k 2.6.32.27 -c 
cd /tmp 
gzip -dc /boot/initrd.img-2.6.32.27| cpio -id 
touch lib/modules/2.6.32.27/modules.dep 
find ./ | cpio -H newc -o > /boot/initrd.img-2.6.32.27.new 
gzip /boot/initrd.img-2.6.32.27.new 
cd /boot 
mv initrd.img-2.6.34.new.gz initrd.img-2.6.32.27 




0 0
原创粉丝点击