如何编译和安装自定义主线内核

如何编译和安装自定义主线内核

我在一台新笔记本电脑上运行着 Ubuntu 15.10,但为了获得对该硬件的全面支持,我显然需要 4.4 内核 + 自定义补丁。请参阅这里如果您对详细信息感兴趣。

我知道主线内核 PPA,但据我了解,它们不附带源代码。如果是这样的话,这似乎消除了使用主线内核 PPA 的可能性,因为我无法修补它。所以我一直在尝试查看 git 源代码并构建它,但找不到最新的相关说明。

有人能帮忙提供在 15.10 上构建 4.4 内核的说明吗?

答案1

获取并编译主线内核,git方法:

也可以看看:https://wiki.ubuntu.com/KernelTeam/GitKernelBuild 我做的事情有些不同(还有什么新鲜的?)。

先决条件(必须):

步骤 1 是apt-get updateapt-get dist-upgrade即确保所有内容都是最新的)
步骤 2

sudo apt-get install fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge

步骤3

sudo apt-get build-dep linux

步骤4

sudo apt-get install git-core libncurses5 libncurses5-dev libelf-dev asciidoc binutils-dev

自内核 4.3 起的先决条件:

sudo apt-get install libssl-dev

步骤 5 - 基于无法在新的 20.04 服务器安装上进行编译 2019.12.02

sudo apt install flex bison

第 6 步 - 基于无法在 20.04 服务器上编译内核 5.13 2021.07.02

sudo apt install zstd

先决条件(可选):

sudo apt-get install git-email git-doc

git 部分:

mkdir temp-k-git
cd temp-k-git
git clone   git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux

永远不要在默认主分支中做任何事情。始终留出一些工作区域。

git checkout -b k44rc8_stock v4.4-rc8

窃取Ubuntu内核配置文件(已安装):

ls -l /boot
cp /boot/config-4.4.0-040400rc8-generic .config

Ubuntu 配置文件有完整调试。内核非常庞大,编译时间是原来的两倍

scripts/config --disable DEBUG_INFO

特别注意,从内核 4.4 开始,如果使用 Ubuntu 14.04(我不知道 15.10)进行编译,并且使用旧版本的 c 编译器:它无法使用 CONFIG_CC_STACKPROTECTOR_STRONG 进行编译。

scripts/config --disable CC_STACKPROTECTOR_STRONG

如果您的版本没有 LZ4 压缩(即 16.04),您还需要:

scripts/config --disable KERNEL_LZ4
scripts/config --enable KERNEL_GZIP

特别注意,从内核 5.12-rc1 开始,需要覆盖一些新添加的证书内容。

scripts/config --set-str SYSTEM_TRUSTED_KEYS ""

或者

scripts/config --disable SYSTEM_TRUSTED_KEYS

特别注意,从内核 5.14-rc2 开始,需要覆盖更多添加的证书内容。

scripts/config --disable SYSTEM_REVOCATION_KEYS

编译内核:

time make -j9 bindeb-pkg       <<< Suggest use number of CPUs + 1. Use less for some responsiveness to be left for other uses
                               <<< I always time the kernel build.

或者

time make -j9 bindeb-pkg LOCALVERSION=-stock    <<< For a localized verion name append

或者

time make -j9 olddefconfig bindeb-pkg LOCALVERSION=-stock   <<< To automatically use defaults for any new config stuff (particuarly useful when bisecting the kernel).

构建完成后,安装它:

sudo dpkg -i ../linux-headers-4.4.0-rc8-stock_4.4.0-rc8-stock-144_amd64.deb
sudo dpkg -i ../linux-image-4.4.0-rc8-stock_4.4.0-rc8-stock-144_amd64.deb

因此,此时我们知道主线内核编译成功,因此转到自定义内核。创建一个新分支,应用补丁并编译:

$ git checkout -b k44rc8_custom v4.4-rc8
Switched to a new branch 'k44rc8_custom'

$ git am plv6_1_3.patch
Applying: cpufreq: intel_pstate: configurable algorithm to get target pstate
$ git am plv6_2_3.patch
Applying: cpufreq: intel_pstate: account for non C0 time
$ git am plv6_3_3.patch
Applying: cpufreq: intel_pstate: Account for IO wait time

$ time make -j9 olddefconfig bindeb-pkg LOCALVERSION=-custom

请注意,我故意不这样做make clean,因为增量构建可以节省大量时间。第一次编译耗时 21 分 26 秒,但下一次自定义编译仅耗时 4 分 43 秒。

答案2

以下是在基于 Debian 的发行版上安装的快捷方法:

# Install dependencies
sudo apt install -y git build-essential kernel-package fakeroot libncurses5-dev libssl-dev ccache

# Clone the kernel
mkdir ~/kernelbuild
cd ~/kernelbuild
git clone --depth=1 -b linux-5.4.y git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
#                      ^ change kernel branch to the one you're using.
#                        check with `uname -r` and see the available list at www.kernel.org

cd linux-stable

# Build custom kernel
cp /boot/config-`uname -r` .config # copy config from current  kernel
yes '' | make oldconfig
make clean
make -j `getconf _NPROCESSORS_ONLN` deb-pkg LOCALVERSION=-custom

# Install new kernel
sudo dpkg -i ~/kernelbuild/linux-*.deb

# Reboot
sudo reboot

答案3

如果你访问http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.4-rc8-wily您将找到一个 README,其中说明了如何获取 4.4rc8 的源文件

构建说明有点令人困惑。我见过几种构建内核的方法,它们都有点不同。有几个先决条件:4.4 内核可能还需要其他一些先决条件

sudo apt-get build-dep linux-image-$(uname -r)
sudo apt-get install libncurses5-dev

然后,我为成功构建而发出的命令是:

chmod a+x debian/scripts/*
chmod a+x debian/scripts/misc/*
nano debian.master/changelog
fakeroot debian/rules clean
fakeroot debian/rules editconfigs
fakeroot debian/rules binary-headers binary-generic skipabis=true

通过在显示的第一个版本号末尾添加一些内容,修改更改日志文件以表明我正在创建自己的内核。

相关内容