一直以为Linux内核的编译是一件很复杂的事情,虽然有几次也实在是按捺不住冲动,要自己来编译一下试试,但是类似的几次尝试都是以失败而告终。在不久前,看到过一些关于Debian下编译内核的文章,说得很详细,而且似乎看起来也并不是很复杂的样子,于是决定自己编译一下内核,毕竟对于使用Linux的人来说没有自己编译过内核还真是一件叫人遗憾的事情。在这里记下的是自己编译2.6.19内核的方法,希望对于大家会有一些小小的帮助。
1 下载内核:我们可以在
http://www.kernel.org上找到我们所希望的内核,在这里我们使用的较新的2.6.19版本的内核。
2 将内核解压/usr/src目录下:
代码: |
|
- $ tar -xvf linux-2.6.19.tar.bz2
|
|
以前看到过的一些关于内核编译的文章都会说到在这里创建一个指向源码目录的linux链接,但是在新的2.6版本的内核中没有进行这一步,而且有时如果这样做反倒会造成编译不成功,所以在这里我们也就把这一步免了。
3 安装所需的软件包:
代码: |
|
- $ apt-get install kernel-package libncurses5-dev fakeroot build-essential
|
|
4 配置内核:
在这里我们可以按照我们的兴趣与需要来配置内核。而如果我们对于这些配置选项并不是很熟悉,我们可以使用我们以前的配置文件来进行配置:
代码: |
|
- $ cp /boot/config-`uname -r` .config
|
|
5 编译内核:
代码: |
|
- $ fakeroot make-kpkg --append-to-version=.061228 linux-image
|
|
在这里我们有必要先介绍一下make-kpkg与fakeroot这两个软件包。
在Debian编译内核,我们可以使用make-kpkg,这是一个可以自动替换"make dep;make clean;make bzImage;make modules"命令序列的脚本。而最其最常用的两个参数就是--append-to-version与--revision。
--append-to-version这个选项可以让我们来指定一个额外的内核版本,这个可以成为内核名的一问分。我们可以使用数字,"+",",",但是不要使用下划线"_".比较常见的用法是我们可以当天的日期作为参数,从而来区分不同的内核。如我正在运行的内核版本号如下:
代码: |
|
-
mylxiaoyi@debian:~$ uname -r
- 2.6.19.061228
|
|
这里我们要注意的是我们要避免设置--append-to-version为如"-686","-K7","-sparc"等值,因为这些值常为Debian的预编译内核所使用。
内核模块位于/lib/modules子目录下。每一个内核有他自己的子目录。每次当我们以一个新的名字来安装一个新的内核时,这个包安装程序就会在/lib/modules目录下创建一个新的子目录来保存他自己的模块。
这就意味着每一次我们使用--append-to-version的一个新的值来编译一个内核时,我们就可以保证这个内核有一个新的名字,而他的模块也不会与其他的内核模块相冲突。
注意:如果我们使用相同的名字来安装一个内核时,安装程序就会覆盖掉已安装的内核及其模块。
--revision只会影响Debian软件包本身的名字而不是内核的名字。与--append-to-version相似,我们只可以使用数,"+",".",不要使用下划线"_"。如果我们并没有为--revision指定一个值,make-kpkg就会使用"10.00.Custom".
使用不同的--revision的值就可以避免相同名字的内核之间的冲突。
Debian kernel-image文件的名字格式如下:
代码: |
|
- kernel-image-(kernel-version)(--append-to-version)_(--revision)_(architecture).deb
|
|
进行内核编译时我们用到的另外一个软件包就是fakeroot。使用fakeroot我们可以普通用户的身份来运行make-kpkg,并且可以以普通的权限来完成大多数的工作。在接近工作的结尾时,fakeroot就会以模拟root环境来创建一个kernel-image软件包。
这样经过一段时间的等待以后我们就会得到一个deb包,如:
代码: |
|
- linux-image-2.6.19.061228_2.6.19.061228-10.00.Custom_i386.deb
|
|
这时我们就可以使用dpkg来安装这个包了:
代码: |
|
- $ dpkg -i linux-image-2.6.19.061228_2.6.19.061228-10.00.Custom_i386.deb
|
|
6 创建ramdisk:
在新版本的内核中创建ramdisk使用的是mkinitrd.yaird。我们首先要安装这个软件包:
代码: |
|
- $ apt-get install mkinitrd.yaird
|
|
在使用这个软件包创建ramdisk之前,我们需要修改/boot/config-2.6.19.061228文件,将
代码: |
|
- CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
|
这句注释掉,否则我们就会得到一个错误信息。
代码: |
|
- $ vim /boot/config-2.6.19.061228
|
|
代码: |
|
- [...]
- # CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
- [...]
|
|
这样以后我们就可以创建ramdisk了:
代码: |
|
- $ mkinitrd.yaird -o /boot/initrd.img-2.6.19.061228 2.6.19.061228
|
|
7 修改Grub配置文件使用新版本的内核启动。
呵呵~~这样看来在Debina下编译内核也并不是一件很困难的事情,这样我们就可以完全按照我们的需要来配置我们的Linux内核了~~
参考:
http://www.linuxsir.org/bbs/showthread.php?t=284609
http://blog.chinaunix.net/u/19185/showart_202665.html
分享到:
相关推荐
本文详细介绍了Debian Linux系统下的内核编译方法。
VMware 环境下 Linux 内核编译过程详细解析 在 VMware 环境下编译 Linux 内核是一件复杂的事情,需要了解 Linux 内核编译过程和 VMware 环境的特点。本文将详细介绍 VMware 环境下 Linux 内核编译过程,包括编译...
通过上述步骤,可以在Debian系统中成功升级并编译带有grsecurity补丁的Linux内核。这一过程虽然相对复杂,但通过Debian的强大工具支持,使得整个流程变得更为简单高效。同时,grsecurity补丁的应用大大增强了系统的...
虚拟机允许你在不改变现有操作系统的情况下安全地探索Linux内核,而裸机安装则可以让你更深入地了解系统的运行机制。 3. **安装基础工具** - **文本编辑器**:如Vim、Emacs或Gedit,它们是编写和修改代码的必备...
在开始Linux内核的编译之前,首先需要确保系统中已安装了必要的构建工具。这些工具通常包括编译器、链接器以及其他支持库等。可以通过下面的命令来安装这些必要的软件包: ```bash $ sudo apt-get install build-...
在 /usr/src 文件夹下,删除 linux 文件夹(如果内核先前从未编译过,则没有这个文件夹),然后解压新内核源码包 using tar jvxf 命令,最后重新生成 linux 文件夹。 六、安装 module-init-tools 工具 在 /usr/src...
通过这次实验,您不仅可以了解如何在Ubuntu上编译Linux内核,还能体验到早期Linux版本的运行过程。这有助于深入理解操作系统的内部机制,为后续的Linux内核学习或开发打下基础。同时,这个过程也演示了如何使用Bochs...
Linux内核编译是Linux系统管理员和开发者必备的技能之一,尤其对于想要深入了解操作系统工作原理或者定制特定功能的用户来说,这是一个重要的过程。本指南将详细介绍Linux内核编译的步骤,适合对Linux有一定基础的...
Linux内核支持模块的动态加载,允许在运行时添加或删除内核功能,而不必重新编译和安装整个内核。以下是一个简单的模块加载示例: 1. **编写模块代码**: - 创建一个C文件,如`hello.c`,包含必要的头文件和初始化...
嵌入式Linux内核移植是将Linux操作系统内核适配到特定的硬件平台上的过程,以便在该硬件上运行Linux系统。这个过程涉及到对硬件驱动程序的开发、内核配置的调整以及整体系统的优化,以确保Linux能在目标设备上稳定...
### Linux内核裁剪步骤详解 #### 一、引言 随着微处理器技术的发展,价格低廉、体积小巧的中央处理单元(CPU)及其外围设备之间的连接变得更加稳定可靠,这为嵌入式系统的软硬件设计提供了良好的基础。然而,随着...
本文将深入探讨“Linux内核的安装与加载”这一主题,结合提供的资源,尤其是基于华清远见的FS4412开发板的教程,我们将详细解析这个过程。 首先,我们要理解Linux内核是什么。它是操作系统的核心部分,负责管理硬件...
现在,我们开始配置并编译Linux内核。进入解压后的`linux-3.16`目录,设置交叉编译器和目标架构,并配置内核: ```bash make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm O=./out_vexpress_3_16 vexpress_defconfig...
接下来,编译内核,并生成 vmlinux 文件。 二、根文件系统搭建 在 UML 系统中,需要一个根文件系统。可以下载 Debian-Squeeze-x86-root_fs.bz2 根文件系统,并将其解压缩到/home/tom/Public/目录下。 三、GDB + ...
编译Linux内核是学习内核的一个重要步骤,这包括配置和编译两个阶段。配置阶段可以通过多种方式进行,如`make config`、`make menuconfig`、`make xconfig`和`make oldconfig`,其中`menuconfig`和`xconfig`提供图形...
在Linux内核编程中,编写内核模块是常见的任务,它允许开发者在不重新编译整个内核的情况下,动态加载和卸载功能,极大地提高了系统的灵活性和可维护性。此外,内核编程还涉及到进程管理、内存管理、文件系统、网络...