1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
+++
title = "Gentoo kernel upgrade"
+++
## Preliminary steps
Fetch the sources of the kernel that you want to install.
```sh {class="cmd-root"}
emerge -uDUa --with-bdeps=y =sys-kernel/gentoo-sources-X.Y.Z
```
You may also need to update @world set before updating the kernel.
```sh {class="cmd-root"}
emerge -uDUa --with-bdeps=y @world
```
Using eselect, select the kernel version that you want to upgrade to.
```sh {class="cmd-root"}
eselect kernel list
eselect kernel set X
```
Go to the directory containing kernel sources.
```sh {class="cmd-root"}
cd /usr/src/linux
```
## Configuration
Start by copying your `.config` from the old kernel sources.
```sh {class="cmd-root"}
cp /usr/src/linux-A.B.C-gentoo/.config /usr/src/linux
```
Then, you will have to update the configuration file. The oldconfig command will interactively prompt you to insert values for the new options.
```sh {class="cmd-root"}
make oldconfig
```
Alternatively, the olddefconfig command will automatically insert default values for the new options.
```sh {class="cmd-root"}
make olddefconfig
```
To easily change more configuration options you can use the menuconfig command, which will start an interactive ncurses interface.
```sh {class="cmd-root"}
make menuconfig
```
{{< note Warning >}}
Manually editing the `.config` file is highly discouraged.
{{< /note >}}
## Building
Once you finished setting your configuration, you can build your kernel with make.
You can speed up the build process by using multiple make jobs (determine the number with nproc).
```sh {class="cmd-root"}
make -jN
```
## Intel microcode addendum
Firstly, install the microcode firmware and the tool to manage it.
```sh {class="cmd-root"}
emerge sys-firmware/intel-microcode
```
Use the newly installed iucode_tool to get the processor signature and search a microcode bundle with a matching signature.
```sh {class="cmd-root"}
iucode_tool -S
iucode_tool -S -l /lib/firmware/intel-ucode/*
```
Enable in the kernel configuration the microcode loading features. Then, add in the Firmware loading facility the microcode
bundle found before as a named firmware blob.
After building the kernel, you can easily verify after the boot that the microcode is loaded with dmesg.
```sh {class="cmd-root"}
dmesg | grep microcode
```
## Installation
First of all, mount the boot partition, if it is not already mounted.
```sh {class="cmd-root"}
mount /dev/XXX /boot
```
Then, you can install the new kernel and modules.
```sh {class="cmd-root"}
make install
make modules_install
```
Update your bootloader configuration. If you are using GRUB, you can use grub-mkconfig.
```sh {class="cmd-root"}
grub-mkconfig -o /boot/grub/grub.cfg
```
Some kernel modules may be installed by packages and live outside of the kernel source tree (e.g. Nvidia drivers), and need to be rebuilt.
```sh {class="cmd-root"}
emerge @module-rebuild
```
Additionally, updating the firmware may be required by some drivers.
```sh {class="cmd-root"}
emerge sys-kernel/linux-firmware
```
## References
- https://wiki.gentoo.org/wiki/Kernel
- https://wiki.gentoo.org/wiki/Kernel/Upgrade
- https://wiki.gentoo.org/wiki/Kernel/Removal
- https://wiki.gentoo.org/wiki/Intel_microcode
|