我对在 Ubuntu 12.04 x86 64 位下编译新内核很感兴趣。
我发现这个 wiki 页面基本上是这个博客的镜像,并且有很多步骤(git等)对我来说毫无用处。
在早期版本/发行版中,我曾经创建一个.config文件并Makefile根据需要修改一个文件,然后运行即可make完成。
在 Ubuntu 下有没有一种简单的方法可以做到这一点?
ish*_*ish 41
apt-get source用于下载Ubuntu版本的内核apt-get source linux-image-$(uname -r)
Run Code Online (Sandbox Code Playgroud)
给出一个文件夹,例如:
linux-3.2.0 linux_3.2.0-26.41.dsc linux_3.2.0-26.41.diff.gz linux_3.2.0.orig.tar.gz
粗体差异包括所有 Ubuntu/Debian 自定义。
.config使用“老式”Debianmake-kpkg方法这是维基中描述的另一种老式方法:
sudo apt-get install kernel-package
Run Code Online (Sandbox Code Playgroud)
如果您是第一次编译内核:
sudo apt-get build-dep linux-image-$(uname -r)
Run Code Online (Sandbox Code Playgroud)
然后cd进入源目录(此处为linux-3.2.0),然后运行make oldconfig以.config使用正在运行的内核的配置创建文件,或者将第三方复制.config到此目录。
根据您想要文本还是图形配置,安装:
(文本)
sudo apt-get install libncurses5 libncurses5-dev
Run Code Online (Sandbox Code Playgroud)
(图形)
sudo apt-get install qt3-dev-tools libqt3-mt-dev
Run Code Online (Sandbox Code Playgroud)
然后运行:
(文本)
make menuconfig
Run Code Online (Sandbox Code Playgroud)
(图形)
make xconfig
Run Code Online (Sandbox Code Playgroud)
完成后,只需运行:
fakeroot make-kpkg -j N --initrd --append-to-version=my-very-own-kernel kernel-image kernel-headers
Run Code Online (Sandbox Code Playgroud)
whereN是并行运行的作业数量(通常是您拥有的 CPU 数量),并且my-very-own-kernel是用于标识此构建的自定义字符串。
完成后,内核映像和头文件将在父目录中作为 deb 准备就绪;您可以使用 安装它们sudo dpkg -i,这也将负责添加 GRUB 条目等。
Nov*_*ice 21
以下是步骤。此过程基于nixCraft的How to: Compile Linux kernel 2.6 -- 但相当现代化。
您可以在kernel.org 上获取上游内核源代码。此处将使用3.16.1版(撰写本文时最新的稳定内核)。因此,如果您使用不同的版本,则可能需要修改这些命令。
内核源代码目前以 . 焦油。xz档案,所以点击你想要的任何版本的“tar.xz”链接:

进入cd下载存档的目录后,您可以使用tar以下命令将其解压缩:
tar xf linux-3.16.1.tar.xz
Run Code Online (Sandbox Code Playgroud)
要获得 Ubuntu 的工具链(gcc、、make等等),请安装build-essential 元包:
sudo apt-get update
sudo apt-get install build-essential
Run Code Online (Sandbox Code Playgroud)
两个合理人性化的方式来配置什么进入你的内核是由提供make目标xconfig和menuconfig。
xconfig运行图形配置实用程序,而menuconfig基于文本(即,其界面完全显示在您的终端中)。每个都需要一些由build-essential不提供的额外软件.
要以图形方式配置,请安装libqt4-dev和pkg-config
并运行
make xconfig:
sudo apt-get install libqt4-dev pkg-config
make xconfig
Run Code Online (Sandbox Code Playgroud)
要在终端中进行配置,请安装libncurses5-dev(感谢Hannu提供此信息)并运行make menuconfig:
sudo apt-get install libncurses5-dev
make menuconfig
Run Code Online (Sandbox Code Playgroud)
首先运行它来编译内核并创建vmlinuz:
make
Run Code Online (Sandbox Code Playgroud)
vmlinuz是“内核”。具体来说,内核映像将被GRUB或您使用的任何其他引导加载程序解压缩并加载到内存中。
然后构建可加载的内核模块:
make modules
Run Code Online (Sandbox Code Playgroud)
假设这些make命令成功完成,是时候安装新内核了。首先安装模块:
sudo make modules_install
Run Code Online (Sandbox Code Playgroud)
然后安装内核本身:
sudo make install
Run Code Online (Sandbox Code Playgroud)
将vmlinuz-3.16.1(的副本vmlinuz)、config-3.16.1(存储内核配置参数的文本文件)和System.map-3.16.1(内核符号查找表)放入/boot. 有关更多详细信息,请参阅Hadron和man installkernel.
本节部分基于Kernel/Compile 中的信息。
有了现在需要的内核,它需要:
引导加载程序配置中的一个条目,因此您可以从中进行选择和引导。
在初始RAM文件系统,环境从内核加载驱动程序和坐骑的/文件系统。
(如果您正在安装旧内核或已将内核配置为使用 devfs 而不是较新的 udev,您可能需要或希望改为设置初始 ramdisk。如果您知道需要它,请参阅man initrd。)
生成您的initramfs有mkinitramfs:
cd /boot
sudo mkinitramfs -ko initrd.img-3.16.1 3.16.1
Run Code Online (Sandbox Code Playgroud)
当您更新 GRUB2 引导加载程序的配置时(自 9.10 以来一直是 Ubuntu 中的默认设置)应自动检测新内核并添加一个选项以从中引导。
sudo update-grub
Run Code Online (Sandbox Code Playgroud)
现在您可以重新启动以测试您的新内核。您可能需要在引导过程中按住Shift或按下Esc才能看到 GRUB 引导菜单,您可以在其中选择已安装的不同内核。
要使您的内核(或其他内核)成为默认内核,请参阅如何更改 GRUB 引导顺序?
| 归档时间: |
|
| 查看次数: |
88983 次 |
| 最近记录: |