我最近买了一台 HP Stream,这是一台简洁、便宜的笔记本电脑,我打算在上面安装 Xubuntu。不幸的是,由于它的 eMMC 驱动器,我遇到了一些问题。
我发现如果不应用这个,似乎无法安装任何版本的 Linux(我试过 Ubunbtu 系列、Debian 和 Arch)内核补丁。
尽管我对 Linux 操作系统很熟悉,但我从未真正打过内核补丁,而且我完全不确定如何才能达到我的目的。到目前为止,我发现的教程都是为希望升级当前运行的操作系统的高级用户准备的。
据我所知,只要具有相同的架构,就可以在不同的机器上编译内核。 (两台计算机都是 x64) 并具有必要的驱动程序。
我的问题是:
我该如何应用这个内核补丁?
我如何将它安装到我的机器上(ISO?)
我知道这可能是一个漫长而详细的问答,但我有点想不出主意了。
答案1
我认为这不是特别容易,如果有任何内核启动选项可以帮助使用标准内核启动 HP(例如 noapic、nomodeset 等),我会首先尝试它们。
有些说明太长且多变,不适合在这里发布[https://help.ubuntu.com/community/Kernel/Compile],但如果您针对相同的架构和 Ubuntu 版本进行编译,那么实际上有一个页面看起来几乎合理。
这些步骤适用于在您当前的机器上编译内核,如果它是相同的“类型” x64 并且运行相同的 Ubuntu 版本,它可能会起作用。[来自https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel]:
获取 Ubuntu 版本的源代码
任何一个
- 任何一个
apt-get source linux-image-$(uname -r)
- 或者
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-<release codename>.git
例如获取精确的树:
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-precise.git
构建环境
如果您之前没有在系统上构建过内核,则在成功构建之前需要一些软件包。您可以使用以下命令安装这些软件包:
sudo apt-get build-dep linux-image-$(uname -r)
修改配置
[ 这是您应用补丁的部分。该链接看起来补丁只是修改了drivers/mmc/card/block.c
,因此该文件应该在下载的源文件中。它看起来只是在一行中添加了一点点内容,因此如果您想手动编辑一行并复制粘贴,它应该可以工作,它只会删除“ -
”起始行并添加“ +
”起始行。或者使用带有(如果它不起作用,也许没有,控制它如何找到要修补的文件,请参阅信息)patch
的程序。如果您不做其他更改,我会按照说明建议跳过其余部分。 ]patch --verbose -p1 <the_patch_file
-p1
man patch
如果不需要更改配置,则可以跳过此步骤。构建过程将使用由各种子配置文件组合而成的配置。修改此处任何内容的最简单方法是运行:
chmod a+x debian/scripts/*
chmod a+x debian/scripts/misc/*
fakeroot debian/rules clean
fakeroot debian/rules editconfigs
这将获取每个支持的架构/风格的当前配置,并调用 menuconfig 来编辑其配置文件。需要 chmod 是因为源包的创建方式会丢失脚本上的可执行位。
如果您构建自定义内核而未在内核版本末尾附加额外字符串,apt-get 将尝试将内核“升级”到 Ubuntu 内核的常规版本。为了防止 apt-get 在您输入 apt-get upgrade 时将 Ubuntu 内核列为可升级,您必须(根据内核文档)在内核版本末尾附加一个额外字符串。例如,当您输入 uname 时,这将显示出来。
为了防止这种情况,在内核配置菜单中,导航并修改:
- 常规设置--->
- ()本地版本-附加到内核版本
构建内核
构建内核非常简单。将工作目录更改为内核源代码树的根目录,然后输入以下命令:
fakeroot debian/rules clean
fakeroot debian/rules binary-headers binary-generic
如果构建成功,则会在构建根目录上方的目录中生成一组三个 .deb 二进制包文件。例如,在 amd64 系统上构建版本为“2.6.38-7.37”的内核后,将生成以下三个(或四个).deb 包:
cd ..
ls *.deb
linux-headers-2.6.38-7_2.6.38-7.37_all.deb
linux-headers-2.6.38-7-generic_2.6.38-7.37_amd64.deb
linux-image-2.6.38-7-generic_2.6.38-7.37_amd64.deb
在更高版本中,您还会发现一个 linux-extra- 包,如果存在,您也应该安装它。
测试新内核
使用 dpkg -i 安装三个软件包(在你的构建系统上,或者在其他目标系统上),然后重新启动:
sudo dpkg -i linux*2.6.38-7.37*.deb
sudo reboot
关于安装部分,我不会费心构建 ISO(使用类似 remastersys 的东西),这可能只是另一个令人头疼的问题 ;-)
如果您可以将文件复制到硬盘上,这可能会有用。我通常建议使用 Linux Live CD/USB,但如果 Ubuntu 无法启动……也许可以使用具有不同内核的其他发行版,或者使用 Windows 复制文件,或者使用分区映像和与 Windows 等效的dd
工具?