或许你不需要编译Linux内核,但通过本教程你可以快速上手。在计算世界中,内核是处理硬件和通用系统之间通信的低级软件。除了烧入计算机主板的一些初始固件外,当您启动计算机时,内核会让系统知道它有硬盘、屏幕、键盘和网卡。为每个组件分配相同的时间(或多或少)可以让图形、音频、文件系统和网络平稳甚至并行运行。然而,对硬件的需求是不变的,随着更多硬件的发布,必须将更多代码合并到内核中以保持硬件正常工作。很难获得具体数字,但就硬件兼容性而言,Linux内核无疑是顶级内核之一。Linux运行无数计算机和手机、用于工业和业余爱好的板级嵌入式系统(SoC)、RAID卡、缝纫机等等。回到20世纪(甚至21世纪初),Linux用户在购买新硬件后下载最新的内核代码并编译安装使用是不合理的。现在很少看到Linux用户为了好玩而编译内核或从高度专业化的定制硬件上赚钱。如今,通常不再需要编译Linux内核。这里有一些原因和快速编译内核的教程。更新您当前的内核无论您是购买带有新显卡或Wifi芯片组的全新计算机,还是为您的房子配备新打印机,您的操作系统(称为GNU+Linux或Linux,也是内核的名称)都需要更新驱动程序为新组件(图形卡、芯片组、打印机等)打开通道。有时当您插入一些新设备并且您的计算机说它找到它时,它可能是骗人的。不要被愚弄,有时这就足够了,但通常情况下,您的操作系统只是使用通用协议检测到新设备的安装。例如,您的计算机可能能够识别一台新的网络打印机,但有时这只是因为打印机的网卡设计用于在网络上识别自己以获得DHCP地址。这并不意味着您的计算机知道如何将文档发送到打印机进行打印。事实上,您可以争辩说计算机甚至“不知道”该设备是一台打印机。它可能只是表示网络上的特定地址有一个设备,并且该设备使用一系列字符“p-r-i-n-t-e-r”来标识自己。人类语言的便利对计算机来说毫无意义。计算机需要的是驱动程序。内核开发人员、硬件制造商、技术支持和爱好者都知道新硬件一直在发布。他们中的大多数直接向内核开发团队贡献驱动程序以包含在Linux中。例如,Nvidia显卡驱动程序通常被写入Nouveau内核模块,由于Nvidia显卡非常普遍,其代码包含在任何日常发行版的内核中(例如您下载Fedora或Ubuntu时获得的内核).Nvidia也有不常见的地方,比如嵌入式系统中的Nouveau模块通常会被去掉。其他设备也有类似的模块:打印机受益于Foomatic和CUPS,无线网卡有b43、ath9k、wl模块等。发行版倾向于在其Linux内核构建中包含尽可能多的合理驱动程序,因为它们希望您插入新设备并立??即使用,无需安装驱动程序。这在很大程度上是正确的,尤其是现在许多设备供应商正在资助他们销售的硬件的Linux驱动程序的开发,并将这些驱动程序直接提交给内核团队以用于通用发行版。有时,也许您正在运行一个六个月大的内核和一个上周刚刚上市的令人兴奋的新设备。在这种情况下,您的内核可能没有该设备的驱动程序。好消息是,经常会发生该设备的驱动程序已经存在于最新版本的内核中,这意味着您只需要更新正在运行的内核。通常,这是通过安装包管理软件来完成的。例如在RHEL、CentOS和Fedora上:$sudodnfupdatekernel在Debian和Ubuntu上,首先获取当前内核版本:$uname-r4.4.186搜索更新版本:$sudoaptupdate$sudoaptsearchlinux-image安装找到最新版本。在此示例中,最新版本为5.2.4:$sudoaptinstalllinux-image-5.2.4内核更新后,您必须重新启动(除非您使用kpatch或kgraft)。此时,如果您需要的设备驱动程序包含在最新的内核中,您的硬件就可以正常工作了。安装内核模块有时,发行版不希望用户使用设备(或者至少没有足够的驱动程序让设备包含在Linux内核中)。Linux对驱动程序采用模块化方法,因此即使驱动程序未编译到内核中,发行版也可以推送单独的驱动程序包供内核加载。虽然复杂,但它非常有用,特别是当驱动程序未包含在内核中但在引导期间加载时,或者内核中的驱动程序与模块化驱动程序相比已过时。第一个问题可以通过“initrd”(初始化RAM磁盘)解决,这超出了本文的范围,第二个问题可以通过“kmod”系统解决。kmod系统确保当内核更新时,所有随它安装的模块化驱动程序也会更新。如果您手动安装驱动程序,您将不会体验到kmod提供的自动化,因此只要您可以使用kmod安装软件包,就应该选择它。例如,虽然Nvidia驱动程序作为Nouveau模块内置到内核中,但官方驱动程序仅由Nvidia发布。你可以去官网手动安装Nvidia品牌的驱动程序,下载“.run”文件,运行提供的shell脚本,但是安装新内核后你必须重复同样的过程,因为没有什么可告诉包管理软件你手动安装了内核驱动程序。Nvidia驱动你的显卡,手动更新nvidia驱动一般需要通过终端进行更新,因为没有显卡驱动是无法显示的。但是,如果您通过kmod软件包安装了Nvidia驱动程序,则更新您的内核也会更新您的Nvidia驱动程序。在Fedora和相关发行版上:$sudodnfinstallkmod-nvidia在Debian和相关发行版上:$sudoaptupdate$sudoaptinstallnvidia-kernel-commonnvidia-kernel-dkmsnvidia-glxnvidia-xconfignvidia-settingsnvidia-vdpau-drivervdpau-va-driver这只是一个例子,但如果你真的想安装Nvidia驱动程序,你还必须禁用Nouveau驱动程序。有关最佳过程,请参阅您的发行版文档。下载和安装驱动程序并非所有内容都包含在内核中,也并非所有内容都可作为内核模块使用。有些情况下需要下载厂商编写并捆绑的专用驱动,有些情况下你有驱动,但是没有配置驱动的前端界面。两个常见示例是HP打印机和Wacom数位板。如果您有HP打印机,您可能有通用驱动程序可以与打印机通信,甚至可以打印东西。但一般驱动不提供针对特定型号打印机的自定义选项,如双面打印、校对、纸盒选择等。HPLIP(HPLinux成像和打印系统)提供任务管理、调整打印设置、选择可用纸盒等选项。HPLIP通常包含在包管理软件中;只需搜索“hplip”。同样,电子艺术家使用的主要数位板Wacom的驱动程序通常包含在内核中,但调整压力敏感度和按键功能等设置只能通过默认包含在GNOME中的图形控制面板访问。但它也可以作为KDE上的附加包“kde-config-tablet”访问。以下是一些类似的个别示例,其中驱动程序未包含在内核中,但驱动程序的kmod版本可以RPM或DEB文件的形式提供,可通过包管理软件下载和安装。修补和编译您的内核即使在21世纪的未来主义乌托邦中,供应商仍然对开放源代码的了解不足以提供可安装的驱动程序。有时,公司会为驱动程序提供开源代码,需要您下载代码、修补内核、编译并手动安装。此发行版与在kmod系统外安装打包驱动程序有相同的缺点:更新内核会破坏驱动程序,因为每次更换新内核时都必须手动将其重新集成到内核中。令人高兴的是,这种事情正在变得越来越少,因为Linux内核团队已经做好了打电话给公司与他们交谈的工作,公司终于接受了开源不会很快消失的事实。但是仍然有一些新颖或高度专业化的设备只提供内核补丁。正式地,发行版有关于如何编译内核以使包管理器参与升级系统这一重要部分的特定习惯用法。包管理器太多了,无法涵盖所有??包管理器。例如,当您在Fedora上使用rpmdev或build-essential等工具时,在Debian上使用devscripts。首先,像往常一样,找出您正在运行的内核版本:$uname-r在大多数情况下,如果您还没有升级内核,请尝试升级。完成后,也许您的问题将在最新的内核版本中得到修复。如果您尝试了它但它不起作用,那么您应该下载正在运行的内核的源代码。大多数发行版都提供了执行此操作的特定命令,但要手动执行此操作,可以在kernel.org上找到其源代码。您必须下载内核所需的任何补丁。有时这些补丁对应特定的内核版本,所以要慎重选择。通常,或者至少当人们习惯于编译内核时,他们会获取源代码并修补/usr/src/linux。解压缩内核源代码并应用所需的补丁:$cd/usr/src/linux$bzip2--decompresslinux-5.2.4.tar.bz2$cdlinux-5.2.4$bzip2-d../patch*bz2补丁文件可能有关于如何使用它们的教程,但通常它们被设计为可在内核源代码树的顶层执行。$patch-p1
