debian安装内核,debian更新内核命令
使用Debian的内核包系统来创建你自己的内核。
1 .简介
我以前都是手动编译内核,要按顺序经历一系列步骤;内核包被编写来完成这些必要的步骤。(现在他已经超越了这一范畴,但实际上,他也正是这么做的。)这一点对于新手来说相当重要:make-kpkg已经完成了编译一个内核所需的所有步骤,内核的安装就是一个快照。-Manoj Srivastava,kpkg- package的作者。
如果我们曾经编译过内核,我们会惊讶于它的简单。本指南旨在让我们能够使用Debian的内核包系统,它可以极大地简化定制内核的构建和安装。学习创建Debian的内核包及其模块,使用dpkg管理生成的内核镜像。
注意:如果我们不小心,我们会使我们的系统无法启动。强烈建议至少阅读一遍整个文档,并根据它编译我们的内核。
这里我们应该记住的是,不可避免地,有些人会利用这份文件进入他们的系统。不要成为他们中的一员。如果我们不知道一些事情,我们应该在做之前获得更详细的信息。
准备
2.1.备份启动盘。
在我们制作一个新的内核之前,我们要做的第一件事就是为我们正在运行的内核制作一个启动盘。这样,如果有什么东西使我们的系统崩溃,我们可以启动我们的机器并修复它。拿一张我们不介意擦除的软盘来做这样的事情(作为root用户):
bash:~# mkboot path_to_kernel
用合适的信息代替path_to_kernel,比如/boot/vmlinuz-2.4.18-bf2.4 (如果我们是用2.4内核安装Woody的话)。
2.2.安装什么?
我们想用Debian 3.0r1(Woody版本1);我们需要以下软件包:
1.
(同groundcontrolcenter)地面控制中心
2.
内核包
3.
Kernel-source-2.4.18(或者任何我们想要使用的内核源代码)
4.
图书馆6-发展
5.
tk8.0或tk8.1或tk8.3
6.
图书馆5-发展
7.
fakeroot
8.
Bin86(用于在PC上安装2.2.x内核)
我们可以通过以下命令安装这些软件包(作为root用户):
bash:~# apt-get安装gcc内核-包内核-source-2 . 4 . 18 libc 6-dev tk 8.3 libncurses 5-dev fake root
安装这些软件包将导致安装其他一些软件包,以满足某些依赖关系。
注:如果我们在PC结构上安装2.2系统的内核(使用AMD处理器的机器是PC,Mac或Alpha不是),需要bin86软件包。
我们可以使用任何我们想要的内核:我选择了2.4.18,因为它是Woody中最新的。Debian的维护者在将内核源代码打包成一个. deb文件方面做得非常出色,建议使用这些源代码包而不是其他源代码包。我能理解的使用其他源代码包的唯一原因是Debian支持的硬件支持。
3.设置源树
源代码树是包含我们想要编译的内核源代码的目录。
3.1.加入src小组
安装内核源码包时,源码包放在/usr/src目录中。要在此目录中工作,我们必须是root用户或src组的成员。为了避免在任何时候以root身份工作,我们可以加入src组。只有root可以将用户添加到组中,因此我们必须首先是root,然后执行以下命令:
bash:~# adduser我的用户名src
将用户my_username添加到组src.
完成了。
当然,我们必须使用自己的用户名,而不是“我的用户名”。我们组的成员身份会在登录时被检测到,所以我们需要注销后重新登录才能被识别为src的成员。有三种方法可以做到这一点:
1.如果我们在X的终端窗口中,注销X并退出控制台。然后登录控制台,开始另一个X会话。
2.如果我们使用的是图形登录管理器,比如xdm、gdm、kdm,退出X并再次登录。
3.如果我们在控制台中,注销并再次登录。
为了确保我们真正加入src组,我们可以执行以下命令(在我们完成注销/登录之后):
bash:~$ groups
我的用户名src
我们将在组列表中看到src(默认情况下,我们也属于非用户组‘my _ username’)。
3.2.解压缩源文件包。
作为普通用户,进入/usr/src目录,列出他的内容;我们将看到我们安装的bzip格式的tar包文件:
bash:~$ cd /usr/src
bash:/usr/src$ ls
内核-源代码-2.4.18.tar.bz2
如果我们还看到一个名为linux的符号链接,请删除它:
bash:/usr/src$ rm linux
注意:如果我们有这个链接,但是在解压我们的新源码包之前没有删除它,我们会把旧的和新的混合在一起,它不会正确编译。
Debian的源码包解压到一个名为kernel-source-x.y.z的目录下,官方的内核源码解压到一个名为linux的目录下,直到2.4.18(我们建议该目录改名为Linux-x.y.z)。2.4.19及以后的官方源代码会被提取到linux-x.y.z/。
要解压缩一个源包,我们可以作为普通用户执行以下命令:
bash:/usr/src $ tar-jxf kernel-source-2 . 4 . 18 . tar . bz2
这将创建一个名为kernel-source-2.4.18/的目录,它属于我们的src组。
3.3.设置符号链接
现在没有到任何源代码树的符号链接,现在我们必须创建一个:
bash:/usr/src $ ln-s kernel-source-2 . 4 . 18 Linux
将这里的“kernel-source-2.4.18”源目录替换为我们解压缩源代码时创建的源目录。
检测符号链接是一个好主意,如下所示:
bash:/usr/src$ ls -l
总计66908
-rw-r-r-1 roott roott 23833519 Mar 20 16:18 kernel-source-2 . 4 . 18 . tar . bz2
drwxr-Sr-xx 15 kjmcckk srcc 4096 Mar 20 16:30 kernel-source-2 . 4 . 18
lrwxrwxrwxx 1 kjmcckk srcc 20 Mar 20 16:36 Linux-kernel-source-2 . 4 . 18
3.4.测试当前需求
进入linux目录,我们会找到另一个名为Documentaion的目录。进入此目录以查看更改文件。用我们最喜欢的编辑器打开这个文件,找到“当前最低要求”部分。下面是一个例子:
当前最低要求
============================
升级到至少*这些软件版本,然后才认为您已经
遇到了bug!如果您不确定您当前的版本
运行时,建议的命令应该会告诉您。
oo Gnu CC 2.95.33 # gcc -版本
oo Gnu makee 3.777 #制作版本
oo binutilss 2.9.1.0.255 # ld -v
oo util-linuxx 2.10oo # fdformat -版本
面向对象模块2.4.22 # insmod -V
oo e2fsprogss 1.255 # tune2fs
oo reiserfsprogs 3 . x . 0jj # reiserfsck 2 1 grep reiserfsprogs
oo pcmcia-css 3.1.211 # cardmgr -V
oo PPPP 2.4.00 # pppd -版本
oo isdn4k-utilss 3.1 pr e11 # isdnctrl 2 1 grep版本
更改文件在第一列中列出所需的程序,在第二列中列出所需的版本,在第三列中列出检测版本的命令。我们可能不需要所有列出的程序或软件包。(比如我们不用PC卡,就不需要pcmcia-cs)。
我们不必单独检测每个需要的程序,我们可以运行ver_linux脚本,它可以在内核树的脚本目录中找到。我们应该首先让它运行起来。这里要注意的是,这个脚本可能检测不到Changes中列出的所有需要的程序,但是会检测到一些没有列出的程序。
如以下测试结果:
bash:/usr/src/Linux/Documentation $ CD./脚本
bash:/usr/src/Linux/scripts $ chmod x ver _ Linux
bash:/usr/src/linux/scripts$。/ver_linux
如果一些字段为空或看起来不寻常,您可能有一个旧版本。
与当前文件/变更的最低要求进行比较。
Linux Sirius 2 . 4 . 18 . 030309 # 1 Sun Mar 9 22:15:39 EST 2003 i586未知未知GNU/Linux
Gnu CC 2.95.4
Gnu makee 3.79.1
util-linuxx 2.11n
安装2.11n
模块2.4.15
e2fsprogss 1.27
pcmcia-css 3.1.33
Linux C库y 2.3.1
动态链接器(ldd)) 2.3.1
Procpss 2.0.7
网络工具1.60
控制台工具
sh-实用程序2.0.11
加载的模块ds I 82365 3c 589 _ cs PCMCIA _ core ext3 jbd RTC
如果上面的方法无法确定Debian系统上的程序版本,可以尝试使用dpkg。
使用dpkg检测所需的内容,如下所示:
bash:/usr/src/Linux/scripts $ dpkg-l make
所需=未知/安装/删除/清除/保留
Status=Not/Installed/Config-files/Unpacked/Failed-Config/半安装
/Err?=(none)/Hold/Reinst-required/X=both-problems(状态,Err:大写=错误)
/名称版本描述
-==============-==============-============================================
makee 3 . 79 . 1-144 GNU版本的“make”实用程序。
如果我们在kernel.org上使用版本或者使用描述测试或者不稳定分支,我们需要更新一些工具来满足我们的需求。如果用Debian的稳定分支的源码,就不需要上面的了。现在我们已经完成了内核源代码树的配置。
4.配置内核
4.1.注意力
内核配置的一个重要原则是Tanstaafl(天下没有免费的午餐)。我们添加到内核中的任何特性都会增加内核的大小和编译时间,即使我们选择将其作为模块添加。
为了让大多数硬件上的大多数人都能使用内核,Linux发行版通常包括对大多数硬件和功能的支持。Debian也是。预编译内核包含对我们永远不会使用的硬件和永远不会阅读的语言的支持。我的内核配置总的原则是:“有疑问就留着”。如果我们测试我们的新内核,但发现一些硬件不能正常工作,我们可以很容易地切换到另一个配置,并编译另一个内核。
为了避免不断增加的大小,内核映像最近的另一个特点是使用initrd。我电脑旁边的一本专门的字典把initrd定义为“需要担心的事情”。我们可以通过将对引导硬件和根文件系统的支持直接编译到内核中(而不是作为一个模块)来避免这种担心。如果我们的引导硬盘是IDE,把IDE支持编译进内核。如果我们的根文件系统是Reiserfs,一定要把对Reiserfs的支持编译到内核中,而不是作为一个模块。
这里要注意的是,软盘必须编译成内核。如果我们把它编译成一个模块,那么我们就不能从软盘启动我们的新内核。
不幸的是,内核选项的详细解释超出了本文的范围。要获得更多关于内核配置的信息,我们可以查看LDP、/usr/src/Linux/documentation文件和硬件文档。
4.2制作xconfig
配置内核的方法有很多,这里我们首先接触到的就是xconfig。在我们进入/usr/src/linux目录后,我们可以输入命令:
bash:/usr/src/Linux $ make xconfig
4.3制作菜单配置
可能我们用的不是x,可能这一步配置我们会做的更好,我们相信键盘比鼠标快。按如下方式运行命令:
bash:/usr/src/Linux $ make menu config
4.4进行配置
内核0.01根本没有配置选项。内核1.0有49个不同的配置选项,所以配置机制是必要的。键入make config。
我们现在退出make config。我们不想一次回答超过1300个不同的问题。更好的方法是使用xconfig或menuconfig。
5编译内核映像。
如果我们的机器是带有低速处理器的旧机器,编译一个Debian内核映像可能需要几个小时。(我们也可以把我们的内核编译在快速的机器上,安装在低速的机器上。这里就不讨论这个话题了)。
5.1制造-千克
要编译内核,我们可以调用make-kpkg,它可以自动替换make dep使干净;制作bzImage制作模块命令序列的脚本。我们必须花一些时间阅读make-kpkg的手册页。
注意:make-kpkg是内核包软件包的一部分。他的文档位于/usr/share/doc/kernel-package/。
make-kpkg命令相当复杂,乍一看有点吓人。基本语法格式如下:
make-kpkg选项目标
我们的目标可以是kernel_image。让我们解释两个重要且常用的用法选项,“附加到版本”和“修订”。
5.2 -附加到版本
第一个选项允许我们指定一个额外的内核版本,这可能是一个内核名称的问题。我们可以用数字,‘,‘,’,但不要使用下划线“_”。
下面是我正在运行的内核:
bash:/usr/src/linux$ uname -a
bash:/usr/src/Linux $ Linux Sirius 2 . 4 . 18 . 030309 # 1 Sun Mar 9 22:15:39 EST 2003 i586 Unknown Unknown GNU/Linux我编译这个内核的时候,使用的选项是-append-to-version=.030309 (注意开头
注意:我们应该避免将-append-to-version设置为诸如-686 、-K7 和-sparc 这样的值,因为这些值经常被Debian的预编译内核使用。
内核位于/lib/modules子目录中。每个内核都有自己的子目录。每次我们安装一个新名字的新内核,这个包安装程序都会在/lib/modules目录下创建一个新的子目录来保存自己的模块。
这意味着我们每次使用-append-to-version的新值来编译内核时,都可以确保内核有一个新的名称,并且它的模块不会与其他内核模块发生冲突。
注意:如果我们安装一个同名的内核,安装程序将会覆盖已安装的内核及其模块。
5.3 -修订
make -kpkg的另一个选项是- revision ,这个选项只会影响Debian包本身的名字,不会影响内核的名字。类似于- append-to- version,我们只能使用数字,,.,而不是下划线“_”。如果我们不为- revision指定值,make-kpkg将使用 10.00.Custom 。
使用不同的- revision值可以避免同名内核之间的冲突。
5.4内核包字
Debian内核映像文件的名称格式如下:
kernel-image-(kernel-version)(-append-to-version)_(-revision)_(架构)。黛比
包的名称是第一个下划线之间的所有内容。以下是我的内核包列表:
bash:/usr/src$ ls
内核映像2.4.18.030309_1.0_i386.deb
内核映像2.4.18.030320_1.0_i386.deb
内核映像2 . 4 . 18 . 030320 _ 10.00 . custom _ i386 . deb
现在我们将理解为什么我们不在make-kpkg的选项中使用下划线。它用于分隔软件名称之间的元素。
5.5假根
当我们将自己加入src组时,我们可以用普通用户的权限完成大多数内核包工作。但是,作为内核包一部分的文件(比如内核和内核模块)归root所有,它们应该以root权限运行。它们必须被创建为root权限。
有了fakeroot,我们就可以以普通用户的身份运行make-kpkg,用普通权限就可以完成大部分工作。在工作接近尾声时,fakeroot将通过模拟根环境来创建一个内核映像包。
make-kpkg的手册页描述了使用fakeroot的方法。这里,我们使用最简单的方法将fakeroot放在make-kpkg命令的开头:
fakeroot make-kpkg选项目标
5.4制作内核映像
最后的时刻已经到来,我们准备制作内核映像:
bash:/usr/src/Linux $ fake root make-kpkg clean
然后执行以下命令:
bash:/usr/src/Linux $ fake root make-kpkg-append-to-version=. 030320 kernel _ image
我们现在要做的就是等待计算机完成这项工作。
6安装内核映像包。
一旦构建了内核映像,我们就可以安装内核映像包,它包含内核和相应的模块。首先,我们必须进入/usr/src目录进行检查以确保成功构建,并列出内容:
bash:/usr/src/linux$ cd.
bash:/usr/src$ ls
内核源代码2.4.18
内核-源代码-2.4.18.tar.bz2
内核映像2 . 4 . 18 . 030320 _ 10.00 . custom _ i386 . deb
Linux操作系统
要安装内核及其所有模块,我们必须以root用户身份运行:
bash:/usr/src # dpkg-I kernel-image-2 . 4 . 18 . 030320 _ 10.00 . custom _ i386 . deb
要从磁盘安装内核映像包,我们需要指定完整的文件名。
安装后脚本将询问我们是否要创建启动盘。如果我们之前已经创建了它,我们可以在这里添加NO。
如果一切正常,我们可以重新启动我们的机器,并用一个新的内核引导它。
你现在做什么?
7.1保存内核
如果我们使用-append-to-version,我们就不需要担心apt-get会试图更新我们的内核。如果我们是疯子,我们可以用root运行以下命令:
bash:~ # echo kernel-image-2 . 4 . 18 . 030320持有 dpkg - set-selections
当然,这里我们将使用我们实际的内核名。我们可以使用以下命令进行查询:
bash:~ # dpkg-get-selections grep内核映像
内核映像2.4.18.0303200保留
7.2删除符号链接
我们可以使用下面的命令来操作:
bash:~# cd /usr/src
bash:/usr/src# rm linux
7.3备份内核
当然这不是必须的,但是备份我们自己的内核确实是个好主意。
7.4创建新的启动盘。
为我们刚刚安装的内核创建一个新的启动盘:
bash:/usr/src# cd /boot
bash:/boot # mkboot/boot/vmlinuz-2 . 4 . 18 . 030320
7.5删除旧内核
既然我们已经看到了编译和安装一个新内核是多么简单,用不了多久我们的/boot目录就会变得拥挤不堪。我们可以使用dpkg清理我们不需要的内核:
bash:/boot # dpkg-P kernel-image-2 . 4 . 18 . 030309
如果我们得到消息“/lib/modules/2 . 4 . 18 . 030309 not empty now t removed”,可能是因为我们在那里安装了一个第三方模块。我们可以用类似下面的命令删除它:
bash:/boot # dpkg-P PCMCIA-modules-2 . 4 . 18 . 030309
如果我们的模块子目录仍然不为空,可能是我们没有使用make-kpkg编译这些模块。我们可以手动删除。
7.6编译我们下一个内核
如果我们想重新编译我们的内核,因为我们买了一个新的声卡,或者我们想使用一个新的特性,那么我们所要做的就是重新配置它,执行 fakeroot make-kpkg clean ,然后用不同的-append-to-version值重新编译它。我们的会话如下所示:
bash:~$ cd /usr/src
bash:/usr/src $ ln-s kernel-source-2 . 4 . 18 Linux
bash:/usr/src$ cd linux
bash:/usr/src/Linux $ make xconfig
(重新配置您的内核)
bash:/usr/src/Linux $ fake root make-kpkg clean
(这里有大量的清洁工作)
bash:/usr/src/Linux $ fake root make-kpkg-append-to-version=. 030401 kernel _ image
(屏幕和屏幕的东西)
8个高级主题
8.1第三方模块
这里我所说的第三方模块是内核源代码树外以源代码形式使用的内核模块。一个很好的例子就是pcmcia-cs,这是很多笔记本用户需要的对pcmcia的支持。
要使用pcmcia-cs,可以使用apt-get安装pcmcia-source包。这个源包必须放在/usr/src目录中。以普通用户的身份将源包解压缩到/usr/src/modules/pcmcia-cs目录。如果我们没有这个模块目录,我们可以手动创建一个。
当我们配置内核时,我们需要禁用PCMCIA支持。(如果我们打开pcmcia支持,pcmcia-cs将不编译驱动程序)。如果我们想使用无线局域网,我们可以在网络设备支持下打开此支持,但不要选择任何设备。
当我们准备好编译内核时,我们可以在命令行中添加modules_image:
bash:/usr/src/Linux $ fake root make-kpkg-append-to-version=. 030401 kernel _ image modules _ image
当我们创建kernel_image的deb安装包时,make-kpkg会进入/usr/src/modules目录,为每个子目录编译一个模块的deb安装包。这个安装包将拥有与我们的内核相同的版本和-append-to-version。我们安装好kernel_image的deb包之后,就可以安装这些模块的deb安装包了。
8.2在现有内核中添加第三方模块。
当我们浏览Debian用户列表时,会发现越来越多的人对alsa感兴趣。但是我们发现我们的声卡声音听起来不是很好,我们想自己试试alsa。我们可以熟练的使用make menuconfig进行配置,但是在声音部分没有看到任何标注alsa的内容。我该怎么办?
安装alsa源包。此时,我们将在/usr/src目录中有一个新的tar包。如下所示:
bash:/usr/src$ ls
alsa-driver.tar.bz2
内核映像2 . 4 . 18 . 030401 _ 10.00 . custom _ i386 . deb
内核源代码2.4.18
内核-源代码-2.4.18.tar.bz2
模块
PCMCIA-modules-2 . 4 . 18 . 030401 _ 3 . 1 . 33-6 10.00 . custom _ i386 . deb
解压缩alsa-driver并重新创建符号链接。这时,我们应该注意内核映像的-append-to-version的值。我们需要使用它作为一个选项来制作-kpkg。
bash:/usr/src$ cd linux
bash:/usr/src/Linux $ fake root make-kpkg-append-to-version=. 030401
-added-modules=alsa-驱动程序模块_映像
注意:这里我们不需要kernel_image的目标。除非我们重新配置我们的内核,否则我们不需要重新编译。使用- added-modules 选项可以使我们只编译我们需要的模块,而不是所有的模块。
8.3 Debian内核补丁
Debian提供了各种内核补丁。根据需要,这里我们下载了内核-补丁-debianlogo。
安装单人内核补丁,不需要执行补丁。这可以通过使用- added-patches 选项调用make-kpkg来实现:
bash:/usr/src/Linux $ fake root make-kpkg-append-to-version=. 030401
-added-patches=debian logo kernel _ image modules _ image
如果我们有多个内核补丁,我们可以在“- added-patches==”后用逗号分隔多个补丁。
默认情况下,make-kpkg将运行“make oldconfig”来执行内核补丁。如果我们的补丁包含新内核的选项,系统会询问我们。如果我们想查看整个内核配置选项,我们可以使用另一个命令行选项,- config=menuconfig 。在我们保存配置并退出后,make-kpkg将继续执行。
在我们的内核映像被创建之后,make-kpkg将保存我们执行的补丁,因此我们在每个配置/编译周期中都将有一个未打补丁的源代码树。