如何在不进行任何发行版升级的情况下,将内核更新到最新的主线版本?

目前我正在运行Linux-3.0,我想将其更新到最新的稳定内核版本Linux-3.3.1,详见http://www.kernel.org。我在Ubuntu上更新内核时有没有崩溃的风险?我定期通过更新管理器更新我的内核。目前我使用的是Linux-3.0.0.17我可以进行更新吗?

注意:

在Ubuntu中,用户应该使用的最新内核版本会通过更新管理器自动更新,因此通常不需要用户采取任何行动来升级内核。问题提问者所指的是主线内核,请参阅:Should I upgrade to the "mainline" kernels?


17个回答

我经常使用的最简单的内核升级/降级指南是由一个名叫lykwydchykyn的ubuntuforums.org用户提供的(此链接已经为了这篇文章而修改)。
  1. 点击这里:http://kernel.ubuntu.com/~kernel-ppa/mainline/
  2. 将3(或者4)个deb文件下载到某个文件夹中:

    linux-headers-VERSION-NUMBER_all.deb
    linux-headers-VERSION-NUMBER_amd64.deb
    linux-image-VERSION-NUMBER_amd64.deb
    linux-image-extra-VERSION-NUMBER_amd64.deb   # 如果有的话
    
  3. 使用您所使用的软件包管理器前端(gdebi还在吗?)安装这些deb文件,或者使用以下命令:

    cd /path/to/folder/where/you/put/the/debs
    sudo dpkg -i *.deb
    

来源:


5你可以在这里找到两个版本的每个架构:lowlatencygeneric,应该选择哪个?http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.14.1-trusty/ - rubo77
没运气。我之前使用的是标准仓库中的64位Utopic低延迟内核(3.16.0-31)。我升级到了v3.16.7-ckt8(linux-image-3.16.7-031607-lowlatency_3.16.7-031607.201503111033_amd64.deb),虽然系统正常运行,但触摸板仍然无法使用。这是针对Acer C710的情况。 - Ubuntourist
我遇到了触摸板的问题。我的默认BIOS设置为高级模式。BIOS中提到,如果没有驱动程序,使用高级模式可能会出现问题。然而,在Ubuntu中,基本模式运行良好。不幸的是,在Windows中,基本模式运行得很糟糕!希望这对您有所帮助。 - Bhikkhu Subhuti
1为了完整起见,除了@Bucic的步骤之外,还有以下几点:(4)接受新的grub引导加载程序(第一个选项)。这可能是大多数人需要的。如果你想要看到具体的变化,请进行比较检查,但它可能只是用你想要的新内核信息重写你的Grub配置文件。(5)重新启动。此外,这是更安全的方法,也会升级你的Linux版本:sudo apt-get update && sudo apt-get dist-upgrade && sudo reboot。无论哪种情况,在重新启动后,运行echo $(uname -r)来确认你成功地启动到了新的内核。 - Manuel J. Diaz
1@rubo77关于低延迟与通用内核的讨论:http://askubuntu.com/questions/126664/why-to-choose-low-latency-kernel-over-generic-or-realtime-ones - Noremac
我可以在Kubuntu 16.10上做这个吗?我的版本是4.8.0-46-generic,我需要4.10.1,但在Kubuntu中它将随kubuntu 17.04和后门一起出现。 - Hrvoje T
@Hrvoje 是的,你可以这样做,不要忘记在必要时更新编译器(kmake)。重新编译内核模块可能也是必要的。 - ravery
@Ubuntourist -- 你重新编译内核模块了吗? - ravery
最后编辑于2014年;内容在2018年仍然有效;+1 - Willi Mentzel
@WilliMentzel:不适用于我。我尝试安装了5.9.12,然后是5.9.10,但在启动时,一直出现“找不到命令hwmatch”,并且内核具有无效的签名。 - Dan Dascalescu
1请注意,linux-image-extra-... 目前被称为 linux-modules-extra-... - Wolfson
我只是简单地输入了这个命令:'sudo reboot',然后正在使用的内核就更新到了最新版本。 - Abe
我建议通过使用apt install ./*.deb来简化第三点。这样可以避免提及gdebi,并且apt会处理任何潜在的依赖关系。顺便说一下:文件名应该以./开头,否则apt将无法将其解析为本地文件,并尝试下载具有相同名称的远程软件包。 - Hi-Angel

你可以随时做以下事情:
apt-cache search linux-image

选择你想要的那一个,然后执行以下操作:
sudo apt-get install linux-image-your_version_choice linux-headers-your_version_choice linux-modules-extra-your_version_choice

4这不会得到一个主线内核,而是会得到一个指定版本号的Ubuntu构建。 - Eliah Kagan
17虽然可能比使用主线版本更好,因为它已经针对目标操作系统进行了优化。 - quickshiftin
在Debian 8上运行得非常顺利。 谢谢! - GTodorov
这对我来说加载到了lightdm,但是我的笔记本键盘和USB端口都不工作。 - Goddard
11别忘了安装内核头文件:sudo apt-get install linux-headers-[version]-generic。[version] 应该与内核版本相同。 - mauek unak
我刚刚用一个忙碌的引导程序崩溃了我的系统。我觉得apt没有按照它应该做的去执行任务。它“推荐”其他安装,但是根据建议的名称它们并没有起作用。而且我认为它没有安装a、extras和headers all这些头文件。它还建议我自动删除一个库。千万不要尝试这个。从内核网站找到最新版本,然后搜索如何安装那个版本。Rc6给了我这个链接(对你来说,链接会随时间变化)http://www.yourownlinux.com/2016/03/how-to-install-linux-kernel-4-5-rc6-in-linux.html - Bhikkhu Subhuti
1这个条目应该被修改,以便告诉用户安装linux-image-extra软件包,因为如果没有它,一些功能可能无法正常工作,比如用于输入解密磁盘密码的USB键盘。 - wojci
@EliahKagan 最近我注意到Ubuntu的主线内核构建在一两天内就会出现。所以我认为http://kernel.ubuntu.com/~kernel-ppa/mainline/是一个合适的选择。 - WinEunuuchs2Unix

我的答案是,是的,你可以。稳定版本是3.4,但在本教程中我使用的是3.3.1。
Ubuntu(32位)通用PAE:
运行以下命令:
mkdir kernel\ v3.3.1-precise && cd kernel\ v3.3.1-precise
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.3.1-precise/linux-headers-3.3.1-030301-generic-pae_3.3.1-030301.201204021435_i386.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.3.1-precise/linux-headers-3.3.1-030301_3.3.1-030301.201204021435_all.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.3.1-precise/linux-image-3.3.1-030301-generic-pae_3.3.1-030301.201204021435_i386.deb
sudo dpkg -i linux-*.deb 
sudo update-grub
sudo reboot now

Ubuntu(64位):

运行以下命令:

mkdir kernel\ v3.3.1-precise && cd kernel\ v3.3.1-precise
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.3.1-precise/linux-headers-3.3.1-030301-generic_3.3.1-030301.201204021435_amd64.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.3.1-precise/linux-headers-3.3.1-030301_3.3.1-030301.201204021435_all.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.3.1-precise/linux-image-3.3.1-030301-generic_3.3.1-030301.201204021435_amd64.deb
sudo dpkg -i linux-*.deb 
sudo update-grub
sudo reboot now

请享受!


我按照你说的在我的Ubuntu 12.04上安装了内核3.8.5-raring。但现在我的操作系统崩溃了,没有命令行界面或任何引导菜单。只是在思考。 - shgnInc
好的,但需要更新。我建议找到该版本,然后搜索如何安装它。点击页面直到找到类似这样的内容。对于rc6,我找到了这个链接:http://www.yourownlinux.com/2016/03/how-to-install-linux-kernel-4-5-rc6-in-linux.html - Bhikkhu Subhuti

与一些答案相反,Ubuntu会在主要内核团队发布后的一两天内发布新内核。我曾经像这里的一些答案建议的那样通过困难的方式升级,但我发现这种方法更简单。
手动安装内核需要额外的工作。
有几个原因你想要安装最新的主线内核:
- 上一个Ubuntu LTS内核更新中的错误,无法降级 - 你有新硬件,当前Ubuntu LTS内核更新流或HWE更新不支持 - 你想要安全升级或仅在最新的主线内核版本中可用的新功能。
截至2018年1月15日,最新的稳定主线内核是4.14.13。在撰写本文时,许多人都对其进行了安装,以防止Meltdown安全漏洞。如果你选择手动安装它,你应该知道:
  • 老版本的LTS内核在它们大于主菜单第一个选项标题为Ubuntu之前将不会得到更新。
  • 手动安装的内核不能通过通常的sudo apt auto-remove命令来删除。您需要按照以下步骤操作:如何删除旧的内核版本以清理启动菜单?
  • 监视旧内核的发展情况,以便在您想要回到常规的LTS内核更新方法时。然后按照上一个项目链接中描述的步骤删除手动安装的主线内核。
  • 在手动删除最新的主线内核后运行sudo update-grub,然后Ubuntu的最新LTS内核将成为Grub主菜单上名为Ubuntu的第一个选项。

查找最新的内核

转到(kernel.ubuntu.com - Kernel PPA Mainline)并按下End键:

Mainline kernel 1

现在点击链接4.9.8(或者如果您在阅读此内容时有更新版本,则选择更新版本),将会出现以下内容:

mainline kernel 2

请注意带有黑色喷枪标记的链接。这三个链接是我们将使用Intel或AMD处理器下载适用于Ubuntu 16.04 64位的文件。
使用终端进行安装
打开一个终端会话,按下Ctrl+Alt+T,并使用以下命令:
cd ~/Downloads # Change to your downloads directory
ll linux*.deb  # Check if any previous downloads still exist
rm linux*.deb  # Use this command if any previous downloads found

现在切换回上面的下载界面,单击三个.deb内核下载链接。下载完成后(您将在浏览器中看到状态),切换回终端会话并使用以下命令:
sudo dpkg -i linux*.deb
rm linux*.deb
sudo reboot

Voila!- 当选择grub引导菜单中的第一个选项时,您正在运行最新的内核。您的旧内核版本仍然可以在grub的“高级选项”菜单下找到。
安装了最新的内核十几次后,您会问自己“如何删除旧的内核版本?”并且您将在这里找到答案,就在Ask Ubuntu上。

你应该回答这个问题,说"不要把事情搞得太复杂了"。 - Fabby
内核页面的布局和日志记录已经发生了变化。如果您能刷新这个答案的文本和截图,那就太好了。 - 8bitjunkie
@8bitjunkie 我刚刚查看了4.9内核的版本,看起来是一样的。你看的是哪个内核版本? - WinEunuuchs2Unix
嗨,@WinEunuuchs2Unix,我在看 https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.9.1 - 8bitjunkie

晚了但是新的答案。

我会在我的答案中添加一些更多的信息。现在我的旧内核是linux-headers-4.8.0-53。要找出您有哪个内核,请在终端中键入uname -r。现在输入此命令以获取可用内核列表。

apt-cache search linux-image

这将给你一个非常大的输出。现在选择其中一个你想要安装的,并按照以下命令进行安装(不要像这样输入这些命令,用你希望安装的内核版本替换单词“kernal_version”)。
sudo apt-get install linux-image-kernal_version
sudo apt-get install linux-image-extra-kernal_version
sudo apt-get install linux-headers-kernal_version

现在以我的情况来看,我选择了linux-image-4.10.0-22-generic,所以我的命令将如下所示
sudo apt-get install linux-image-4.10.0-22-generic 
sudo apt-get install linux-image-extra-4.10.0-22-generic
sudo apt-get install linux-headers-4.10.0-22-generic

现在最后通过命令删除旧内核。
sudo apt-get autoremove

当我第一次这样做的时候,我不知道是因为我的硬件问题还是因为删除了旧内核,但是我的笔记本显示出黑屏,这种情况有时会发生在我的笔记本上。因此,我拆下了电池并重新启动,并输入了命令。而且我不再遭受黑屏问题的困扰。

uname -r

而且它给了我

linux-image-4.10.0-22-generic

这意味着内核已经更新。

4你的黑屏问题可能是因为你移除了正在使用的内核。在安装新的内核之后,你需要重新启动。然后再移除旧的内核。 - ravery
1很棒的答案。尽管现在有些变化,但我不得不将版本4.18.0-22-generic中的linux-image-extra更改为linux-modules-extra才能使其正常工作。 - deerchao

有一种更简单的方法来完成这个任务,这也是我使用的方法。只需从终端下载Ubuntu Mainline Kernel Updater脚本并运行它。它会为您下载.deb文件,安装新内核,并可选择删除旧内核(不建议),然后可选择重新启动。

示例输出(从我的终端复制):

evilsupahfly@the-black-beast:~$ sudo KernelUpdateChecker -no-rc -r utopic
Run this command to install the new kernel
/tmp/kernel-update
root@the-black-beast:~# /tmp/kernel-update
Config Notes:
Rejecting Release Candidates
Accepting Latest Kernel
Accepting kernels compiled for utopic
Accepting kernels with a version higher than 3.15.0-031500-lowlatency

Information:
Origin: 
    http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.15.1-utopic
Kernel Version:
    3.15.1-031501
Release Date:
    2014/06/16 @ 18:41 (YYYY/MM/DD @ HH:MM)

Care to look at the change log? (y=Yes, n=No) (n)

(download output skipped)    

Greetings root
    I (the-black-beast) am now self aware and a sentient being, have a nice day.
    Oh and by the way SKYNET is now active.

Installing Linux 3.15.1-031501:

(installer output skipped)

The New Kernel looks to have been installed

WARNING: If the new kernel does not boot you may regret saying yes here.
Would you like to remove the current one? (y=Yes, n=No) (n): n

Are you ready to Reboot? (y=Yes, n=No) (n): n

几乎完全自动化,而且完全没有问题。

2014年我最初发表评论时还好,但自那以后,我发现跟着@Bucic之前给出的答案更容易 - 将.deb文件下载到一个文件夹中(在我的情况下是/home/evilsupahfly/Downloads/Kernels/X.XX-something/),然后在终端中执行cd {.deb位置}再执行dpkg -i *.deb。不需要搞PHP或SkyNet。 - EvilSupahFly

运行以下终端命令来安装新的Ubuntu主线内核
sudo apt-get update
sudo apt-get install python-bs4 python-apt
cd /tmp
rm -rf medigeek-kmp*
wget https://github.com/medigeek/kmp-downloader/tarball/master -O kmpd.tar.gz
tar xzf kmpd.tar.gz
cd medigeek-*
python kmpd.py -d

这个脚本托管在Github上。如果在Python脚本的某个问题上卡住了,只需按下Enter键,而不是输入数字。

3我是那个脚本的作者。我刚刚修复了它。请提交错误报告,大多数时候程序员并不知道存在bug,直到有人提交报告为止。 :) - Savvas Radevic
你的脚本相比于这里最佳答案中所描述的直接安装deb包有什么优势? - rubo77
我刚刚想到这种工具,因为我崩溃了,apt没有为我安装依赖项。你会认为apt都是关于依赖项的。错了。脚本可以更新到最新版本或搜索一个然后让用户选择。话虽如此,如果我再次启动我的系统,我会直接去找,因为我找到了rc6的终端命令。 - Bhikkhu Subhuti
@SavvasRadevic ImportError: No module named apt_pkg - Yahya
@Yahya 尝试安装 python-apt apt install python-apt - Savvas Radevic
1@SavvasRadevic 我已经完成了,但根据您的要求进行报告。 - Yahya

我写了一个脚本,它将始终保持最新状态。 ukupgrade: Ubuntu内核升级
  • 打开你喜欢的终端并运行以下命令
  • 给文件赋予可执行权限

    chmod +x ./ukupgrade

  • 调用脚本

    ./ukupgrade


1这是最棒的。 - Ali
当要求安装通用版本时,它一直安装低延迟版本。 - user2413
我之前不知道这个工具,所以我也写了一个类似的工具,同样支持选择通用/低延迟版本。你可以在这里找到它:https://github.com/cristim/kernel-update - Cristian Măgherușan-Stanciu
目前,这个脚本已经崩溃了,无法正常运行。 - Yousha Aleayoub

如果你不想费心手动升级内核,可以尝试使用UUKU。它在Ubuntu的衍生版本(如elementory、mint)上也能很好地运行。
我曾用它来解决WiFi问题,因为有时候旧内核无法检测到新硬件。 除了硬件驱动更新外,我并没有发现需要升级内核的必要性。 新内核确实具有安全性和轻微性能提升,但也有可能导致一些问题,比如虚拟机的故障。
sudo apt-add-repository -y ppa:teejee2008/ppa
sudo apt-get update
sudo apt-get install ukuu
ukuu-gtk

来源:

http://www.makeuseof.com/tag/upgrade-kernel-ukuu-ubuntu/

http://www.teejeetech.in/2016/07/ukuu-v167.html?m=1


另一个选择是尝试定制和优化的构建版本,例如这个专为Ubuntu优化的i3/i5/i7 3.2.1内核:

DuoPetalFlower, 我在Linux上的实验-3.2.1内核

他还有适用于Intel Atom优化的构建版本,如果你想从一台上网本中挤出最后一点性能,它们也可以很好地工作。

还有其他一些像Liquorix这样声称在桌面性能方面更优化的内核。

虽然有些人不建议,但通常情况下您可以无问题地运行来自较新版本Ubuntu的官方内核。我目前在oneiric上运行着3.3.3精确内核,我的机器工作得比以往任何时候都要好。性能和电池寿命增加,温度降低了几度。当从待机状态恢复时出现的黑屏问题也已经消失。尽管我个人使用较新的内核没有遇到问题,但您会发现一些强烈反对这样做的人。