LoginSignup
1
0

More than 3 years have passed since last update.

Ubuntu16.04でFedora30のカーネルを使ってみる話

Last updated at Posted at 2019-06-24

Ubuntu16.04でFedora30のカーネルを使ってみる話

環境

% dmesg |grep -i pana
[    0.000000] DMI: Panasonic Corporation CF-SX2ADHCS/CFSX2-3, BIOS V3.00L10 12/27/2012
[    3.465184] input: Panasonic Laptop Support as /devices/virtual/input/input13
% cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"

経緯

もともと半年に1回くらいのペースで、その時の最新のvanillaカーネルを自己ビルドして使ってきました。レッツノートの場合i8042.cにパッチを当てないとsuspend〜resumeが上手く行かない不具合があってずっと手パッチ当てててたのが、今回は要らなかったので良かったです。いや、ソース覗いて、i8042_pm_opsのresumeとrestoreの実装がほぼ同じだったのでもしや、という予感はありましたけど。

また、これまでも気が向いた時にFedoraのカーネルと.configで動作トライはしてきたんですが、起動に失敗続けていまして、今回初めて成功したため、ネタとして上げて見ました。

ソース取得

koji.fedoraproject.orgからkernelで検索して、ビルドに成功&ほぼ最新、とう言う条件で、以下のソースをgetしました。
(A) kernel-5.1.12-300.fc30.src.rpm

また、執筆時(6/24)での最新vanillaカーネルを取得します。
(B) linux-5.1.14.tar.xz

(A)と(B)は$HOMEに置いておくと仮定します。

ビルド準備

(B)を展開します。

% tar Jxf linux-5.1.14.tar.xz

(A)は適当なディレクトリ作ってrpm2cpioとcpioで、中身を展開しときます。

% mkdir -p /tmp/x
% cd /tmp/x
% rpm2cpio ~/kernel-5.1.12-300.fc30.src.rpm|cpio -id

あとは、kernel.specを覗いて、496行目からFedora向けのpatchを当てているところをなぞります。

% cd ~/linux-5.1.14
% patch -p1 < /tmp/x/arm-sdhci-esdhc-imx-fixes.patch
% patch -p1 < /tmp/x/arm64-rock960-enable-tsadc.patch
% patch -p1 < /tmp/x/bcm2835-cpufreq-add-CPU-frequency-control-driver.patch
% patch -p1 < /tmp/x/watchdog-bcm2835_wdt-Fix-module-autoload.patch
% patch -p1 < /tmp/x/arm64-tegra-jetson-tx1-fixes.patch
% patch -p1 < /tmp/x/arm64-tegra-Add-NVIDIA-Jetson-Nano-Developer-Kit-support.patch
% patch -p1 < /tmp/x/input-rmi4-remove-the-need-for-artifical-IRQ.patch
% patch -p1 < /tmp/x/0001-s390-jump_label-Correct-asm-contraint.patch
% patch -p1 < /tmp/x/0001-Drop-that-for-now.patch
% patch -p1 < /tmp/x/KEYS-Make-use-of-platform-keyring-for-module-signature.patch
% patch -p1 < /tmp/x/net-vhost_net-fix-possible-infinite-loop.patch
% patch -p1 < /tmp/x/0001-platform-x86-ideapad-laptop-Remove-no_hw_rfkill_list.patch
% patch -p1 < /tmp/x/ipv6_sockglue-fix-missing-check-bug-in-ip6_ra_control.patch
% patch -p1 < /tmp/x/Buffer-overflow-read-checks-in-mwifiex.patch
% patch -p1 < /tmp/x/0001-efi-x86-Add-missing-error-handling-to-old_memmap-1-1.patch
% patch -p1 < /tmp/x/0001-ip_sockglue-Fix-missing-check-bug-in-ip_ra_control.patch
% patch -p1 < /tmp/x/drm-edid-fix-missing-check-bug-in-drm_load_edid_firmware.patch
% patch -p1 < /tmp/x/consolemap-fix-memory-leaking-bug.patch
% patch -p1 < /tmp/x/clk-sunxi-fix-a-missing-check-bug-in-sunxi_divs_clk_setup.patch
% patch -p1 < /tmp/x/wcd9335-fix-a-incorrect-use-of-kstrndup.patch
% patch -p1 < /tmp/x/scsi-mpt3sas_ctl-fix-double-fetch-bug-in_ctl_ioctl_main.patch
% patch -p1 < /tmp/x/powerpc-fix-a-missing-check-in-dlpar_parse_cc_property.patch
% patch -p1 < /tmp/x/0001-netfilter-nat-fix-udp-checksum-corruption.patch
% patch -p1 < /tmp/x/mwifiex-Fix-heap-overflow-in-mwifiex_uap_parse_tail_ies.patch
% patch -p1 < /tmp/x/0001-platform-x86-asus-wmi-Only-Tell-EC-the-OS-will-handl.patch
% patch -p1 < /tmp/x/drm-panel-orientation-quirks.patch
% patch -p1 < /tmp/x/efi-bgrt-acpi6.2-support.patch

全部p1なので覚えておくと良いのかも。
※efi-secureboot.patchと0001-netfilter-nat-fix-udp-checksum-corruption.patchは
patch当てに失敗するので手パッチしてください。カーネルの5.1.14と5.1.12の違いだと思います。あるべき論としては、(B)で5.1.12を用意するということですが。

ビルド

以下実行。LOCALVERSIONとKDEB_PKGVERSIONは自由な設定項目です。出来上がるdebファイルの名前に使われます。

% cd ~/linux-5.1.14
% cp /tmp/x/kernel-x86_64.config .config
% yes "" | make oldconfig
% make -j4 deb-pkg LOCALVERSION=-my KDEB_PKGVERSION=1 > log 2>&1 &

インストール

rootで、ビルドした(make実行した)ディレクトリの一つ上の親ディレクトリに出来る以下のdebファイルをインストールします。
# dpkg -i linux-headers-5.1.14-my_1_amd64.deb linux-image-5.1.14-my_1_amd64.deb

無事リブートすればubuntuでFedoraのカーネルを動かすことができています。

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0