一直以为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系统下的内核编译方法。
很多朋友一听到说编译内核,就觉得很高深莫测,...如果下面的步骤都注意并执行了,编译内核不是很复杂的事情,我在基于debian的ubuntu系统上第一次编译就成功了。本文介绍了在基于debian的ubuntu系统上编译内核的过程。
linux-kernel-utilities:用于为Debian及其衍生版本(例如Ubuntu,LinuxMint等)编译和/或更新linux内核的实用程序
linux内核编译详解_chonix_z.htm。。。。。。。
本项目致力于创建一个基于 Docker + QEMU 的 Linux 实验环境,方便大家学习、开发和测试 Linux 内核。 Linux Lab 是一个开源软件,不提供任何保证,请自行承担使用过程中的任何风险。 项目功能 现在,Linux Lab 已经...
《The Debian Administrator's Handbook》是一本关于 Debian GNU/Linux 的免费好书,该书覆盖的范围包括 Debian 安装、系统更新、创建包、编译内核、系统监视、备份与迁移、以及 Xen/KVM/LXC 等虚拟化技术。...
现代的Linux发行版已经带有了ixgbe驱动,通过可加载模块的方式使用。然而,有些情况你希望在你机器上的自己编译安装ixgbe驱动,比如,你想要体验ixbge驱动的最新特性时。同样,内核默认自带的ixgbe驱动中的一个问题...
本项目致力于创建一个基于 Docker + QEMU 的 Linux 实验环境,方便大家学习、开发和测试 Linux 内核。 Linux Lab 是一个开源软件,不提供任何保证,请自行承担使用过程中的任何风险。 项目功能 现在,Linux Lab 已经...
libmali库是Chrome浏览器打开调用驱动底层的接口,与内核和Debian文件系统版本有关,该资料提供多个版本的安装包。
Debian 5.x安装手册 ,图文解说,以及内核编译,显卡驱动安装,双链路设置
这是我自己编译的debian7的kernel的headers,针对bfs现在最新支持的内核版本3.16.0,而且吧vmware tools需要支持的驱动模块全部开启,可以再vmware里面高速运行。肉眼也感受得到的速度提升。比rt内核带来的影响明显...
本文在CubieBoard上构建一个基于ARMHF的Debian Linux,包括SPL,U-BOOT,内核(kernel),根系统(rootfs); 事实上“从零开始构建”是说我们除了CubieBoard之外,软件系统可以通过自己下载现成的软件或代码配置、编译 起来
这个驱动的移植主要是是将原来的2.....一、从网上将Linux内核源代码下载到本机上,并将其解压: #tar jxf linux-2.6.11.1.tar.bz2 二、打开内核顶层目录中的Makefile文件,这个文件中需要修改的内容包括以下两个方面。
是我自己写的ppt,介绍如何编译安装linux内核,用的内核代码是2.6.32,系统是Debian lenny,有详细的编译安装过程说明包括遇到的一些问题。 不对之处还请多包涵,欢迎指正。
RT内核编译说明有关如何为Raspberry pi 4b编译rt内核的说明#Download Debian 10.7 Virtualbox #依赖项sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev sudo apt install crossbuild...
使用说明:需要先安装 通用的固件数据包 firmware-aic8800dc-bin,再安装对应内核版本的驱动...原标题: [deb] 爱科微 AIC8800 芯片的无线网卡驱动(Debian 11.8, linux-image-6.1.0-0.deb11.11-amd64) 2023.10 发布
官网上提供的ethercat到1.5.2版本截止,此版本内核最高支持3.x系列linux内核,首先我在Debian10实验编译打实时补丁的内核3.6.xx,结果启动不了,我又试了3.8.11的内核也不行,应该是Debian10不支持较低版本内核,...
《The Debian Administrator's Handbook》是一本关于 Debian GNU/Linux 的免费好书,该书覆盖的范围包括 Debian 安装、系统更新、创建包、编译内核、系统监视、备份与迁移、以及 Xen/KVM/LXC 等虚拟化技术。...
QIHUA-X64 平台提供ubuntu、debian 等发行版linux 系统,在光盘 “QIHUA-X64 光盘/SDK 源码”目录下面,提供相关...Ubuntu、Debian、Linux+QT 内核完全相同,编译配置方法相同。这儿以 ubuntu18 源码为例简绍编译配置.
演示如何从源代码编译 Linux 内核。在演示过程中,我们将讨论各种重要的内核配置选项,更深入地介绍有关内核中 PCI USB 8 6 和支持的信息。在本系列教程(共篇;本文是第篇)结束时,您将具备成为 Linux 系统管理员...