如何编译一个内核 - ubuntu方式

上传人:kms****20 文档编号:40371967 上传时间:2018-05-26 格式:DOC 页数:14 大小:124.50KB
返回 下载 相关 举报
如何编译一个内核 - ubuntu方式_第1页
第1页 / 共14页
如何编译一个内核 - ubuntu方式_第2页
第2页 / 共14页
如何编译一个内核 - ubuntu方式_第3页
第3页 / 共14页
如何编译一个内核 - ubuntu方式_第4页
第4页 / 共14页
如何编译一个内核 - ubuntu方式_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《如何编译一个内核 - ubuntu方式》由会员分享,可在线阅读,更多相关《如何编译一个内核 - ubuntu方式(14页珍藏版)》请在金锄头文库上搜索。

1、 如何编译一个内核如何编译一个内核 - Ubuntu 方式方式来源: ChinaUnix 博客 日期: 2007.08.26 07:12 (共有 0 条评论) 我要评论如何编译一个内核如何编译一个内核 - Ubuntu 方式方式 日期:2006-11-21 作者:赵珂 译 来自:每一个 Linux 发行版都有自己专门的工具去构建自定义的内核. 本文主要介绍在 Ubuntu 平台上编译内核,如何从www.kernel.org(也叫vanilla kernel)获得最新且未改动的内核源代码来构建一个自定义的内核, 这样你可以使用自己的内核而不是发行版的内核, 另外也介绍了如何给内核打补丁, 从而方

2、便增加新的功能.下面的工作我都在 Ubuntu 6.10 Server (“Edgy Eft“)和 Ubuntu 6.06 Desktop (“Dapper Drake“)上经过了测试.我想首先要说的是文章中构建自定义内核的方式不是唯一的, 还有许多其它的方式, 这不过是我习惯的方式. 我不能保证使用后不会出现任何问题.1. 预备工作预备工作我推荐使用 root 用户执行下面所有的步骤. 如果你还没有创建 root 登陆口令, 请运行下面的命令:sudo passwd root然后, 以 root 身份登陆:su如果你想使用一般用户来替代 root 用户, 记住在本文所有命令前输入 sudo,

3、 比如当我运行apt-get update你需要运行下面的命令来替代, 等.sudo apt-get update1.1 Ubuntu 6.10 上的上的/bin/sh (“Edgy Eft“)在 Ubuntu 6.10, /bin/sh 缺省是一个链接到/bin/dash 的字符链接. 当你编译软件源代码的时候, /bin/dash 似乎还存在问题. 至少我已经遇到了一些问题. 所以我把/bin/sh 链接到了/bin/bash.如果你使用 Ubuntu 6.10, 现在你可以运行:rm -f /bin/shln -s /bin/bash /bin/sh2 安装必需的软件包安装必需的软件包

4、(为内核编译做准备为内核编译做准备)首先我们升级软件(包)库:apt-get update然后我们安装所有需要的软件包:apt-get install kernel-package libncurses5-dev fakeroot wget bzip23 下载内核源代码下载内核源代码接下来我们下载需要的内核到/usr/src 目录(去www.kernel.org网站下载你需要的内核版本, 比如. linux-2.6.18.1tar.bz2(你可以从这里下载所有的 2.6 内核: http:/www.kernel.org/pub/linux/kernel/v2.6/). 然后下载到/usr/sr

5、c 目录:cd /usr/srcwget http:/www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.1.tar.bz2然后解压内核源代码, 创建一个指向内核源代码目录的 linux 字符链接:tar xjf linux-2.6.18.1.tar.bz2ln -s linux-2.6.18.1 linuxcd /usr/src/linux 4 给内核源代码打补丁给内核源代码打补丁(可选可选)有时你的缺省内核不支持新买的设备, 你需要安装新的驱动. 或者你需要使用虚拟技术或其它高级的技术, 而这些现有的内核都不支持. 这样情况下你需要给给内核源

6、代码打补丁(当然补丁已经发布.)现在我们假设你已经下载需要的补丁(以下例子我叫它 patch.bz2)到/usr/src. 运行下面的命令给内核源代码直接打上补丁(你的用户必须位于/usr/src/linux 目录):bzip2 -dc /usr/src/patch.bz2 | patch -p1 -dry-runbzip2 -dc /usr/src/patch.bz2 | patch -p1第一个命令用于测试, 对内核没有任何影响. 如果没有显示错误, 你可以运行第二个命令给内核打补丁. 如果第一个命令有误, 请务继续的操作!你也能够通过内核的 prepatches 方式打补丁. 比如, 如

7、果你需要一个功能, 而这个功能仅存在于2.6.19-rc4 中,正式完整的内核版本仍没有发布, 而 patch-2.6.19-rc4.biz2 已经发布. 你可以把这个补丁打到 2.6.18的内核源代码中,但请不要达到 2.6.18.1 或 2.6.18.2, 等. 这个规则在接下来的网页中注明:http:/kernel.org/patchtypes/pre.htmlprepatches 等同于 linux 中的测试发行; 他们位于存档的测试目录中,我们可以使用 patch(1)工具对上一个完整发行版(版本号分三部分)打补丁(例如, 2.6.12-rc4prepatch 只可以给 2.6.11

8、 内核源代码打补丁, 而不是 2.6.11.10.)所以如果你想编译 2.6.19-rc4 内核, 你必须在步骤 3.1 下载 2.6.18(http:/www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2)替代 2.6.18.1 内核源代码!下面是如何给 2.6.18 打上 2.6.19-rc4 补丁:cd /usr/srcwget http:/www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.19-rc4.bz2cd /usr/src/linuxbzip2 -dc /u

9、sr/src/patch-2.6.19-rc4.bz2 | patch -p1 -dry-runbzip2 -dc /usr/src/patch-2.6.19-rc4.bz2 | patch -p15. 配置内核配置内核使用当前工作内核的配置文件做为新内核配置文件的基础是一个很好的主意. 因此我们拷贝已存的配置文件到/usr/src/linux:cp /boot/config-uname -r ./.config 然后运行make menuconfig然后我们看到内核的配置菜单. 移动绿色光标到 Load an Alternate Configuration File 行后选择.config

10、文件(包含了当前工作内核的配置)做为配置文件:然后浏览内核配置菜单, 选择你需要的功能. 完成配置后, 选择 Exit, 回答下面的问题(Do you wish to save your new kernel configuration? 你希望保存新的内核配置吗?), 选择 Yes: 6 构建内核构建内核 执行下面命令来构建内核:make-kpkg clean fakeroot make-kpkg -initrd -append-to-version=-custom kernel_image kernel_headers 在-append-to-version= 后面你可以写上任何字符串来区

11、别内核版本, 但是必须以“ - “ 符号开始而且后面不包括任何空格. 保持耐心, 内核编译需要一定时间, 主要看你的内核配置和处理器速度. 7 安装新内核安装新内核 在成功构建内核后, 你在/usr/src 目录能发现两个.deb 软件包.cd /usr/src ls -l 在我的测试系统上, 他们分别名为linux-image-2.6.18.1-custom_2.6.18.1-custom-10.00.Custom_i386.deb (包含了实际的内核) 和linux-headers-2.6.18.1-custom_2.6.18.1-custom-10.00.Custom_i386.deb

12、(包含了需要的文件, 用于以后需要编译额外的内核模块). 我是这样安装的:dpkg -i linux-image-2.6.18.1-custom_2.6.18.1-custom- 10.00.Custom_i386.deb dpkg -i linux-headers-2.6.18.1-custom_2.6.18.1-custom- 10.00.Custom_i386.deb (现在你甚至能够拷贝这两个.deb 文件到其它的 Ubuntu 系统, 通过上面的方式安装. 你 将不再需要编译内核.) 然后检查 /boot/grub/menu.lst 文件, 现在你将能发现新内核使用的两个引导配置块:

13、vi /boot/grub/menu.lst 在我测试系统上已经添加好的引导配置块是这样的:title Ubuntu, kernel 2.6.18.1-custom root (hd0,0) kernel /boot/vmlinuz-2.6.18.1-custom root=/dev/sda1 ro quiet splash initrd /boot/initrd.img-2.6.18.1-custom savedefault boot title Ubuntu, kernel 2.6.18.1-custom (recovery mode) root (hd0,0) kernel /boot/

14、vmlinuz-2.6.18.1-custom root=/dev/sda1 ro single initrd /boot/initrd.img-2.6.18.1-custom boot 现在重启系统:shutdown -r now 如果一切进展顺利, 你的新内核正常工作. 你还可以通过运行下面命令来检查新内核是否 运行:uname -r 这将会显示如:2.6.18.1-custom 如果系统没有起来, 重启一下, 你会看到:按 ESC 进入 GRUB 菜单:选择你以前的内核启动系统, 现在你能再次尝试编译新的工作内核. 不要忘记从 /boot/grub/menu.1st 文件中移去不需要的引导内核信息.= = = = = = =另一篇= = = = = = = = 编译编译 Linux2.6 内核总结内核总结在 X86, Ubuntu 上编译 Linux2.6 内核,总结如下: 基础知识 在介绍如何编译内核之前, 需要对内核相关概念有一定的了解. 关于 Linux kernel 的介绍 浩如烟海, 这里只介绍系统中相关的目录, 文件及命令./boot /boot/vmlinuz- : 用于启动的压缩内核镜像, 它也就是/arch/boot 中的压缩镜像. /boot/system.map-

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号