最新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是什么?
维基百科:ncurses(new 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期间没出息什么错误,执行完成后结果如下
mkinitramfs -o /boot/initrd.img-2.6.32.27
我的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
- 最新linux内核编译
- 详细教程:编译Linux最新内核
- 最新linux内核+文件系统(ramdisk)编译
- 详细教程:编译Linux最新内核
- 详细教程:编译Linux最新内核
- Ubuntu 10.04 编译安装最新版本Linux-2.6.34内核
- ubuntu 10.04 编译安装最新版本linux-2.6.34内核
- ubuntu 10.04 编译安装最新版本linux-2.6.34内核
- ubuntu 10.04 编译安装最新版本linux-2.6.34内核
- Ubuntu11.04下编译最新Linux-3.0-rc7内核
- ubuntu 10.04 编译安装最新版本linux-2.6.34内核
- ubuntu 10.04 编译安装最新版本linux-2.6.34内核
- Linux内核:编译内核
- 最新Linux 内核开发人员集体照
- 【LINUX内核】LINUX内核编译
- 在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)
- 在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)
- 在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)
- 找到的OpenLayers跨域访问WFS服务出现No 'Access-Control-Allow-Origin' header is present...错误的一种解决办法
- 后缀数组
- Fine-Grained Crowdsourcing for Fine-Grained Recognition(精读)
- 数据持久化之冷、热备份
- 动画 CALayer
- 最新linux内核编译
- 【tarjan】【bzoj 1123】: [POI2008]BLO
- map hash_map unordered_map 性能测试
- 二分加二分——POJ3685
- 数据持久化-CoreData、SQLite、FMDB
- 使用GDB命令行调试器调试C/C++程序
- 缅甸赌场首选永鑫娱乐城-永鑫会
- Binary Tree Postorder Traversal
- web学习之Cookies