https://www.faschingbauer.me
Jörg Faschingbauer - Posts in kernel
2024-03-21T09:11:52.012114+00:00
ABlog
https://www.faschingbauer.me/blog/2020/02/fedora-kernel-build.html
Patching and Building the Fedora Kernel
2020-02-27T00:00:00+01:00
Jörg Faschingbauer
<section id="patching-and-building-the-fedora-kernel">
<p>It’s not easy to get up to date information on how to create a custom
kernel on Fedora. There’s plenty of information out there, but most of
it is outdated and only halfway true.</p>
<p>Here’s what I was able to find out by combining non-outdated
information into a working procedure. It goes as follows.</p>
<aside class="sidebar">
<p class="sidebar-title">Contents</p>
<nav class="contents local" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="#why" id="id5">Why?</a></p></li>
<li><p><a class="reference internal" href="#find-kernel-source-git-fix-it-and-create-patch" id="id6">Find Kernel Source (Git), Fix It, and Create Patch</a></p></li>
<li><p><a class="reference internal" href="#prepare-the-rpm-build" id="id7">Prepare the RPM Build</a></p></li>
<li><p><a class="reference internal" href="#download-and-install-source-rpm-for-crashing-kernel" id="id8">Download and Install Source RPM For Crashing Kernel</a></p></li>
<li><p><a class="reference internal" href="#apply-the-patch" id="id9">Apply the Patch</a></p></li>
<li><p><a class="reference internal" href="#build-the-kernel-rpms" id="id10">Build the Kernel RPMs</a></p></li>
<li><p><a class="reference internal" href="#install-kernel" id="id11">Install Kernel</a></p></li>
</ul>
</nav>
</aside>
<section id="why">
<h2><a class="toc-backref" href="#id5" role="doc-backlink">Why?</a></h2>
<p>Tracking down a bug on my new USB-C/Thunderbolt-only laptop where an
external HDMI monitor is plugged via an adapter.</p>
<ul class="simple">
<li><p>Plug external monitor</p></li>
<li><p>Unplug external monitor</p></li>
<li><p>Wait a few seconds</p></li>
<li><p>Watch kernel go up in flames</p></li>
</ul>
<div class="literal-block-wrapper docutils container" id="id3">
<div class="code-block-caption"><span class="caption-text">The Oops</span></div>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">Feb 26 13:58:08 zen kernel: BUG: kernel NULL pointer dereference, address: 0000000000000080</span>
<span class="go">Feb 26 13:58:08 zen kernel: #PF: supervisor read access in kernel mode</span>
<span class="go">Feb 26 13:58:08 zen kernel: #PF: error_code(0x0000) - not-present page</span>
<span class="go">Feb 26 13:58:08 zen kernel: PGD 0 P4D 0</span>
<span class="go">Feb 26 13:58:08 zen kernel: Oops: 0000 [#1] SMP PTI</span>
<span class="go">Feb 26 13:58:08 zen kernel: CPU: 0 PID: 281 Comm: kworker/0:2 Not tainted 5.4.13-201.fc31.x86_64 #1</span>
<span class="go">Feb 26 13:58:08 zen kernel: Hardware name: ASUSTeK COMPUTER INC. ZenBook S UX391UA/UX391UA, BIOS UX391UA.204 05/18/2018</span>
<span class="go">Feb 26 13:58:08 zen kernel: Workqueue: events ucsi_connector_change [typec_ucsi]</span>
<span class="go">Feb 26 13:58:08 zen kernel: RIP: 0010:ucsi_displayport_remove_partner+0xa/0x20 [typec_ucsi]</span>
<span class="go">Feb 26 13:58:08 zen kernel: Code: 38 00 c7 43 28 00 00 00 00 48 83 c7 10 5b e9 6d f3 3d fb 66 66 2e 0f 1f 84 00 00 00 00 00 66 90 0f 1f 44 00 00 48 85 ff 74 0f <48> 8b 47 78 48 c7 00 00 00 00 00 c6 40 3d 00 c3 66 0f 1f 44 00 00</span>
<span class="go">Feb 26 13:58:08 zen kernel: RSP: 0018:ffff9daa002d3df8 EFLAGS: 00010202</span>
<span class="go">Feb 26 13:58:08 zen kernel: RAX: 0000000000000008 RBX: ffff901f4ce35710 RCX: 0000000000003c7d</span>
<span class="go">Feb 26 13:58:08 zen kernel: RDX: 0000000000003c7c RSI: 0000000000000001 RDI: 0000000000000008</span>
<span class="go">Feb 26 13:58:08 zen kernel: RBP: 0000000000000000 R08: ffffffffbc7dbe60 R09: ffff9daa002d3cf0</span>
<span class="go">Feb 26 13:58:08 zen kernel: R10: ffff901f54951a18 R11: ffff901f56a68a78 R12: ffff901f4ce35710</span>
<span class="go">Feb 26 13:58:08 zen kernel: R13: 0000000000000001 R14: ffff901f4ce35860 R15: ffff901f4ce355d8</span>
<span class="go">Feb 26 13:58:08 zen kernel: FS: 0000000000000000(0000) GS:ffff901f56a00000(0000) knlGS:0000000000000000</span>
<span class="go">Feb 26 13:58:08 zen kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033</span>
<span class="go">Feb 26 13:58:08 zen kernel: CR2: 0000000000000080 CR3: 000000028fbbc003 CR4: 00000000003606f0</span>
<span class="go">Feb 26 13:58:08 zen kernel: Call Trace:</span>
<span class="go">Feb 26 13:58:08 zen kernel: ucsi_unregister_altmodes+0x77/0x90 [typec_ucsi]</span>
<span class="go">Feb 26 13:58:08 zen kernel: ucsi_unregister_partner.part.0+0x13/0x30 [typec_ucsi]</span>
<span class="go">Feb 26 13:58:08 zen kernel: ucsi_connector_change+0x247/0x340 [typec_ucsi]</span>
<span class="go">Feb 26 13:58:08 zen kernel: process_one_work+0x1b5/0x360</span>
<span class="go">Feb 26 13:58:08 zen kernel: worker_thread+0x50/0x3c0</span>
<span class="go">Feb 26 13:58:08 zen kernel: kthread+0xf9/0x130</span>
<span class="go">Feb 26 13:58:08 zen kernel: ? process_one_work+0x360/0x360</span>
<span class="go">Feb 26 13:58:08 zen kernel: ? kthread_park+0x90/0x90</span>
<span class="go">Feb 26 13:58:08 zen kernel: ret_from_fork+0x35/0x40</span>
<span class="go">Feb 26 13:58:08 zen kernel: Modules linked in: cdc_ether usbnet r8152 mii rc_cec typec_displayport thunderbolt uinput rfcomm ccm xt_CHECKSUM xt_MASQUERADE nf_nat_tftp nf_conntrack_tftp tun bridge stp llc nf_conntrack_netbios_ns nf_conntrack_broadcast xt_CT ip6t_REJECT nf_reject_ipv6 ip6t_rpfilter ipt_REJECT nf_reject_ipv4 xt_conntrack ebtable_nat ebtable_broute ip6table_nat ip6table_mangle ip6table_raw ip6table_security iptable_nat nf_nat iptable_mangle iptable_raw iptable_security nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 libcrc32c ip_set nfnetlink ebtable_filter ebtables ip6table_filter ip6_tables iptable_filter cmac bnep sunrpc vfat fat snd_hda_codec_hdmi snd_soc_skl snd_soc_sst_ipc snd_soc_sst_dsp snd_hda_ext_core x86_pkg_temp_thermal intel_powerclamp snd_soc_acpi_intel_match coretemp snd_soc_acpi kvm_intel snd_soc_core snd_hda_codec_realtek snd_hda_codec_generic snd_compress ledtrig_audio ac97_bus kvm snd_pcm_dmaengine iwlmvm snd_hda_intel snd_intel_dspcfg irqbypass snd_hda_codec uvcvideo mac80211</span>
<span class="go">Feb 26 13:58:08 zen kernel: btusb iTCO_wdt btrtl crct10dif_pclmul videobuf2_vmalloc iTCO_vendor_support videobuf2_memops mei_hdcp btbcm btintel crc32_pclmul intel_rapl_msr snd_hda_core videobuf2_v4l2 libarc4 ghash_clmulni_intel videobuf2_common snd_hwdep intel_cstate bluetooth snd_seq asus_nb_wmi iwlwifi videodev snd_seq_device intel_uncore asus_wmi snd_pcm intel_rapl_perf mc cdc_acm sparse_keymap wmi_bmof ecdh_generic cfg80211 intel_wmi_thunderbolt ecc pcspkr snd_timer snd i2c_i801 soundcore joydev idma64 intel_xhci_usb_role_switch mei_me ucsi_acpi processor_thermal_device typec_ucsi intel_rapl_common mei roles intel_soc_dts_iosf intel_pch_thermal typec int3403_thermal int340x_thermal_zone int3400_thermal acpi_thermal_rel acpi_pad binfmt_misc ip_tables rfkill i915 i2c_algo_bit drm_kms_helper hid_multitouch drm nvme crc32c_intel nvme_core serio_raw wmi i2c_hid video fuse</span>
<span class="go">Feb 26 13:58:08 zen kernel: CR2: 0000000000000080</span>
<span class="go">Feb 26 13:58:08 zen kernel: ---[ end trace 76d248e576fee192 ]---</span>
<span class="go">Feb 26 13:58:08 zen kernel: RIP: 0010:ucsi_displayport_remove_partner+0xa/0x20 [typec_ucsi]</span>
<span class="go">Feb 26 13:58:08 zen kernel: Code: 38 00 c7 43 28 00 00 00 00 48 83 c7 10 5b e9 6d f3 3d fb 66 66 2e 0f 1f 84 00 00 00 00 00 66 90 0f 1f 44 00 00 48 85 ff 74 0f <48> 8b 47 78 48 c7 00 00 00 00 00 c6 40 3d 00 c3 66 0f 1f 44 00 00</span>
<span class="go">Feb 26 13:58:08 zen kernel: RSP: 0018:ffff9daa002d3df8 EFLAGS: 00010202</span>
<span class="go">Feb 26 13:58:08 zen kernel: RAX: 0000000000000008 RBX: ffff901f4ce35710 RCX: 0000000000003c7d</span>
<span class="go">Feb 26 13:58:08 zen kernel: RDX: 0000000000003c7c RSI: 0000000000000001 RDI: 0000000000000008</span>
<span class="go">Feb 26 13:58:08 zen kernel: RBP: 0000000000000000 R08: ffffffffbc7dbe60 R09: ffff9daa002d3cf0</span>
<span class="go">Feb 26 13:58:08 zen kernel: R10: ffff901f54951a18 R11: ffff901f56a68a78 R12: ffff901f4ce35710</span>
<span class="go">Feb 26 13:58:08 zen kernel: R13: 0000000000000001 R14: ffff901f4ce35860 R15: ffff901f4ce355d8</span>
<span class="go">Feb 26 13:58:08 zen kernel: FS: 0000000000000000(0000) GS:ffff901f56a00000(0000) knlGS:0000000000000000</span>
<span class="go">Feb 26 13:58:08 zen kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033</span>
<span class="go">Feb 26 13:58:08 zen kernel: CR2: 0000000000000080 CR3: 000000028fbbc003 CR4: 00000000003606f0</span>
</pre></div>
</div>
</div>
<p>Looking at the cause, we see that the crash is a NULL pointer that is
deferenced in <code class="docutils literal notranslate"><span class="pre">ucsi_displayport_remove_partner()</span></code>,</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">Feb 26 13:58:08 zen kernel: BUG: kernel NULL pointer dereference, address: 0000000000000080</span>
<span class="go">... (blah) ...</span>
<span class="go">Feb 26 13:58:08 zen kernel: RIP: 0010:ucsi_displayport_remove_partner+0xa/0x20 [typec_ucsi]</span>
</pre></div>
</div>
<p>A look at the offending source code shows that the fix must be
easy. The only pointer that is being accessed is <code class="docutils literal notranslate"><span class="pre">dp</span></code>, and that
pointer is not checked for NULL-ness.</p>
<div class="literal-block-wrapper docutils container" id="id4">
<div class="code-block-caption"><span class="caption-text">drivers/usb/typec/ucsi/displayport.c (taken from Linus
<code class="docutils literal notranslate"><span class="pre">master</span></code>)</span></div>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kt">void</span><span class="w"> </span><span class="nf">ucsi_displayport_remove_partner</span><span class="p">(</span><span class="k">struct</span><span class="w"> </span><span class="nc">typec_altmode</span><span class="w"> </span><span class="o">*</span><span class="n">alt</span><span class="p">)</span>
<span class="linenos"> 2</span><span class="p">{</span>
<span class="linenos"> 3</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">ucsi_dp</span><span class="w"> </span><span class="o">*</span><span class="n">dp</span><span class="p">;</span>
<span class="linenos"> 4</span>
<span class="linenos"> 5</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">alt</span><span class="p">)</span>
<span class="linenos"> 6</span><span class="w"> </span><span class="k">return</span><span class="p">;</span>
<span class="linenos"> 7</span>
<span class="hll"><span class="linenos"> 8</span><span class="w"> </span><span class="n">dp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">typec_altmode_get_drvdata</span><span class="p">(</span><span class="n">alt</span><span class="p">);</span>
</span><span class="hll"><span class="linenos"> 9</span><span class="w"> </span><span class="n">dp</span><span class="o">-></span><span class="n">data</span><span class="p">.</span><span class="n">conf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
</span><span class="linenos">10</span><span class="w"> </span><span class="n">dp</span><span class="o">-></span><span class="n">data</span><span class="p">.</span><span class="n">status</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="linenos">11</span><span class="w"> </span><span class="n">dp</span><span class="o">-></span><span class="n">initialized</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">false</span><span class="p">;</span>
<span class="linenos">12</span><span class="p">}</span>
</pre></div>
</div>
</div>
<p>The fix is really easy,</p>
<div class="highlight-udiff notranslate"><div class="highlight"><pre><span></span><span class="gd">--- /home/jfasch/My-Projects/jfasch-home/blog/2020/02/displayport.c.orig</span>
<span class="gi">+++ /home/jfasch/My-Projects/jfasch-home/blog/2020/02/displayport.c</span>
<span class="gu">@@ -271,6 +271,8 @@</span>
<span class="w"> </span> return;
<span class="w"> </span>
<span class="w"> </span> dp = typec_altmode_get_drvdata(alt);
<span class="gi">+ if (!dp)</span>
<span class="gi">+ return;</span>
<span class="w"> </span> dp->data.conf = 0;
<span class="w"> </span> dp->data.status = 0;
<span class="w"> </span> dp->initialized = false;
</pre></div>
</div>
<p>The bug is tracked as <a class="reference external" href="https://bugzilla.redhat.com/show_bug.cgi?id=1785972">Red Hat Bugzilla – Bug 1785972</a>, and upstream
is already involved. John Stebbins and I provided testing, but
roundtrips are rather long. What makes things worse is that there
appear to be multiple issues, not just one.</p>
<p>I’ll focus on mine: patch, build, report, and help with
testing. First, see how kernels are built in Fedora.</p>
</section>
<section id="find-kernel-source-git-fix-it-and-create-patch">
<h2><a class="toc-backref" href="#id6" role="doc-backlink">Find Kernel Source (Git), Fix It, and Create Patch</a></h2>
<aside class="sidebar">
<p class="sidebar-title">Link</p>
<p><a class="reference external" href="https://fedoraproject.org/wiki/Building_a_custom_kernel#Building_a_kernel_from_the_exploded_git_trees">Fedora Wiki: “Exploded Git Trees”</a></p>
</aside>
<p>Fedora has a Git repository at <code class="docutils literal notranslate"><span class="pre">kernel.org</span></code> where they apply their
own patches on top of the vanilla kernel. Clone that, and create a
development branch. (I am on Fedora 31, so I’m basing the branch on
that.)</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>git<span class="w"> </span>clone<span class="w"> </span>git://git.kernel.org/pub/scm/linux/kernel/git/jwboyer/fedora.git
<span class="gp">$ </span>git<span class="w"> </span>checkout<span class="w"> </span>-b<span class="w"> </span>jfasch-fix<span class="w"> </span>remotes/origin/f31
</pre></div>
</div>
<p>Fix <code class="docutils literal notranslate"><span class="pre">drivers/usb/typec/ucsi/displayport.c</span></code> as sketched above, and
commit.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>git<span class="w"> </span>commit<span class="w"> </span>-am<span class="w"> </span><span class="s1">'fix RIP:ucsi_displayport_remove_partner()'</span>
</pre></div>
</div>
<p>The remainder of the procedure will build the kernel RPM. A kernel RPM
build works by applying a set of patches on top of the base vanilla
kernel <a class="footnote-reference brackets" href="#exploded-tree" id="id1" role="doc-noteref"><span class="fn-bracket">[</span>1<span class="fn-bracket">]</span></a>, so we create a patch for later use.</p>
<p>I made only one commit for which I want to create a patch. Find out
the revision that this patch is based upon; it is one revision before
the <code class="docutils literal notranslate"><span class="pre">HEAD</span></code>.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>git<span class="w"> </span>show<span class="w"> </span>--quiet<span class="w"> </span>HEAD~1
<span class="go">commit 4382f76bc8ef9fce5e7e96d4cdb0c073564ad249 (tag: kernel-5.5.6-201.fc31, origin/f31)</span>
<span class="go">Author: Josh Boyer <jwboyer@fedoraproject.org></span>
<span class="go">Date: Mon Feb 24 23:09:20 2020 +0000</span>
<span class="go"> kernel-5.5.6-201.fc31 configs</span>
</pre></div>
</div>
<p>Create the patch which we will pick up later,</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>git<span class="w"> </span>format-patch<span class="w"> </span>-o<span class="w"> </span>/tmp<span class="w"> </span>4382f76bc8ef9fce5e7e96d4cdb0c073564ad249
<span class="go">/tmp/0001-fix-RIP-ucsi_displayport_remove_partner.patch</span>
</pre></div>
</div>
</section>
<section id="prepare-the-rpm-build">
<h2><a class="toc-backref" href="#id7" role="doc-backlink">Prepare the RPM Build</a></h2>
<aside class="sidebar">
<p class="sidebar-title">Link</p>
<p><a class="reference external" href="https://fedoraproject.org/wiki/Building_a_custom_kernel/Source_RPM#Prepare_Build_Files">Building a custom kernel/Source RPM</a></p>
</aside>
<nav class="contents local" id="id2">
<ul class="simple">
<li><p><a class="reference internal" href="#install-prerequisites" id="id12">Install Prerequisites</a></p></li>
<li><p><a class="reference internal" href="#setup-rpmbuild-directory" id="id13">Setup <code class="docutils literal notranslate"><span class="pre">rpmbuild</span></code> Directory</a></p></li>
</ul>
</nav>
<section id="install-prerequisites">
<h3><a class="toc-backref" href="#id12" role="doc-backlink">Install Prerequisites</a></h3>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>sudo<span class="w"> </span>dnf<span class="w"> </span>install<span class="w"> </span>rpmdevtools<span class="w"> </span>koji
</pre></div>
</div>
</section>
<section id="setup-rpmbuild-directory">
<h3><a class="toc-backref" href="#id13" role="doc-backlink">Setup <code class="docutils literal notranslate"><span class="pre">rpmbuild</span></code> Directory</a></h3>
<p>Setup an empty RPM tree. This will simply create a directory
<code class="docutils literal notranslate"><span class="pre">rpmbuild</span></code> skeleton tree in the home directory.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>rpmdev-setuptree
<span class="gp">$ </span>tree<span class="w"> </span>~/rpmbuild/
<span class="go">/home/jfasch/rpmbuild/</span>
<span class="go">├── BUILD</span>
<span class="go">├── RPMS</span>
<span class="go">├── SOURCES</span>
<span class="go">├── SPECS</span>
<span class="go">└── SRPMS</span>
</pre></div>
</div>
</section>
</section>
<section id="download-and-install-source-rpm-for-crashing-kernel">
<h2><a class="toc-backref" href="#id8" role="doc-backlink">Download and Install Source RPM For Crashing Kernel</a></h2>
<p>Find out the version of the crashing kernel (the one that is currently
running),</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>uname<span class="w"> </span>-r
<span class="go">5.4.13-201.local.fc31.x86_64</span>
</pre></div>
</div>
<p>Download the corresponding source RPM from their build engine,</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>koji<span class="w"> </span>download-build<span class="w"> </span>--arch<span class="o">=</span>src<span class="w"> </span>kernel-5.4.13-201.fc31
<span class="gp">$ </span>ls<span class="w"> </span>-l<span class="w"> </span>*.rpm
<span class="go">kernel-5.4.13-201.fc31.src.rpm</span>
</pre></div>
</div>
<p>Install the RPM. This will fill the <code class="docutils literal notranslate"><span class="pre">~/rpmbuild/</span></code> skeleton with the
kenrel build instructions.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>rpm<span class="w"> </span>-ivh<span class="w"> </span>kernel-5.4.13-201.fc31.src.rpm
<span class="gp">$ </span>tree<span class="w"> </span>~/rpmbuild/
<span class="go">/home/jfasch/rpmbuild/</span>
<span class="go">├── BUILD</span>
<span class="go">├── RPMS</span>
<span class="go">├── SOURCES</span>
<span class="go">│ ├── 0001-crypto-ccp-Release-all-allocated-memory-if-sha-type-.patch</span>
<span class="go">│ ├── 0001-Drop-that-for-now.patch</span>
<span class="go">... (blah) ...</span>
<span class="go">├── SPECS</span>
<span class="go">│ └── kernel.spec</span>
<span class="go">└── SRPMS</span>
</pre></div>
</div>
</section>
<section id="apply-the-patch">
<h2><a class="toc-backref" href="#id9" role="doc-backlink">Apply the Patch</a></h2>
<p>Copy the patch from above into the build tree, where the other patches
are,</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>cp<span class="w"> </span>/tmp/0001-fix-RIP-ucsi_displayport_remove_partner.patch<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>~/rpmbuild/SOURCES/RIP-ucsi_displayport_remove_partner.patch
</pre></div>
</div>
<p>Edit the build specification, <code class="docutils literal notranslate"><span class="pre">~/rpmbuild/SPECS/kernel.spec</span></code>, to</p>
<ul class="simple">
<li><p>contain a descriptive version</p></li>
<li><p>apply the patch</p></li>
</ul>
<div class="highlight-udiff notranslate"><div class="highlight"><pre><span></span><span class="gd">--- /home/jfasch/My-Projects/jfasch-home/blog/2020/02/kernel.spec.orig</span>
<span class="gi">+++ /home/jfasch/My-Projects/jfasch-home/blog/2020/02/kernel.spec</span>
<span class="gu">@@ -53,7 +53,7 @@</span>
<span class="w"> </span>%global zipsed -e 's/\.ko$/\.ko.xz/'
<span class="w"> </span>%endif
<span class="w"> </span>
<span class="gd">-# define buildid .local</span>
<span class="gi">+%define buildid .jfasch</span>
<span class="w"> </span>
<span class="w"> </span>%if 0%{?fedora}
<span class="w"> </span>%define primary_target fedora
<span class="gu">@@ -825,6 +825,7 @@</span>
<span class="w"> </span>
<span class="w"> </span># ALSA code from v5.6 (Intel ASoC Sound Open Firmware driver support)
<span class="w"> </span>Patch601: alsa-5.6.patch
<span class="gi">+Patch999: RIP-ucsi_displayport_remove_partner.patch</span>
<span class="w"> </span>
<span class="w"> </span># END OF PATCH DEFINITIONS
<span class="w"> </span>
</pre></div>
</div>
</section>
<section id="build-the-kernel-rpms">
<h2><a class="toc-backref" href="#id10" role="doc-backlink">Build the Kernel RPMs</a></h2>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span><span class="nb">cd</span><span class="w"> </span>~/rpmbuild/SPECS/
<span class="gp">$ </span>rpmbuild<span class="w"> </span>-bb<span class="w"> </span>--target<span class="o">=</span>x86_64<span class="w"> </span>kernel.spec
<span class="go">... roedel ...</span>
</pre></div>
</div>
<p>Before doing this, make sure the following is available:</p>
<ul class="simple">
<li><p>Enough RAM</p></li>
<li><p>Enough disk</p></li>
<li><p>Patience, coffee, or something else to do</p></li>
</ul>
</section>
<section id="install-kernel">
<h2><a class="toc-backref" href="#id11" role="doc-backlink">Install Kernel</a></h2>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>sudo<span class="w"> </span>rpm<span class="w"> </span>-ivh<span class="w"> </span>--oldpackage<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>~/rpmbuild/RPMS/x86_64/kernel-core-5.4.13-201.jfasch.fc31.x86_64.rpm<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>~/rpmbuild/RPMS/x86_64/kernel-modules-5.4.13-201.jfasch.fc31.x86_64.rpm
</pre></div>
</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The kernel is not signed, obviously, so you might have to disable
Secure Boot in your UEFI.</p>
</div>
<p class="rubric">Footnotes</p>
<aside class="footnote-list brackets">
<aside class="footnote brackets" id="exploded-tree" role="doc-footnote">
<span class="label"><span class="fn-bracket">[</span><a role="doc-backlink" href="#id1">1</a><span class="fn-bracket">]</span></span>
<p>Yes, the patches are created from the Git
repository we are working with.</p>
</aside>
</aside>
</section>
</section>
It’s not easy to get up to date information on how to create a custom
kernel on Fedora. There’s plenty of information out there, but most of
it is outdated and only halfway true.
2020-02-27T00:00:00+01:00