I am currently on the Gentoo-dist bin kernel and would like start compiling and customizing my own kernel, but I have never done anything like that before.
So here are my questions:
- What is the best way to start?
- Are there any good tools/scripts/etc that I should use?
- Is there anything I could/should do to protect myself for goofing up?
Thank you for your time!

@rain
I haven't done it as I haven't needed to, but I've seen some stuff while hanging around gentoo places
1. Keep the dist-kernel around as a backup in case your manual kernel doesn't work
2. Follow the wiki
3. You can start with `make localmodconfig` to get a rough starting point of your current kernel's options and used modules
- replies
- 0
- announces
- 0
- likes
- 0
When it's looking pretty good, I run; `make -j$(nproc) && make modules_install && make install && dracut --kver <new version> (for LUKS encrypted storage - I'd prefer it if I could go without an initramfs of course) && grub-mkconfig -o /boot/grub/grub.cfg` and I see if it boots, otherwise I continue shotgun surgery.
Starting point is wiki. You can look at running gentoo-kernel-bin
. lsmod
will give some hints to what you must enable. The actual config depends on installed packages and your hardware.
I have a script to check what is missing in my kernel config.
pc ~ # cat `which emerge-check-kernel-config`
#!/bin/sh
if [[ -z "$1" ]]; then
echo "usage: $0 pkg"
exit 1
fi
pkg="$1"
path=$(equery w ${pkg})
result=$(awk '/CONFIG_/{print}' <(ebuild ${path} setup);)
ebuild ${path} clean
if [[ -n "${result}" ]]; then
echo ">>> ${pkg}"
echo "${result}"
fi
To check all installed packages.
pc ~ # cat `which emerge-check-kernel-config-all`
#!/bin/sh
if which rg &>/dev/null; then
rg -ls CONFIG_CHECK -g '*.ebuild' /var/db/pkg
else
grep -lr CONFIG_CHECK /var/db/pkg/
fi | cut -d'/' -f5-6 | parallel emerge-check-kernel-config {}
The result will be something like this.
pc ~ # emerge-check-kernel-config perf
>>> perf
* CONFIG_DEBUG_INFO: is not set when it should be.
* CONFIG_FTRACE: is not set when it should be.
* CONFIG_FTRACE_SYSCALLS: is not set when it should be.
* CONFIG_FUNCTION_TRACER: is not set when it should be.
* CONFIG_KALLSYMS_ALL: is not set when it should be.
* CONFIG_KPROBES: is not set when it should be.
* CONFIG_KPROBE_EVENTS: is not set when it should be.
* CONFIG_UPROBES: is not set when it should be.
* CONFIG_UPROBE_EVENTS: is not set when it should be.
Running emerge-check-kernel-config-all
will take some time…
pc ~ # emerge-check-kernel-config-all
>>> dev-util/perf-6.7
* CONFIG_DEBUG_INFO: is not set when it should be.
* CONFIG_FTRACE: is not set when it should be.
* CONFIG_FTRACE_SYSCALLS: is not set when it should be.
* CONFIG_FUNCTION_TRACER: is not set when it should be.
* CONFIG_KALLSYMS_ALL: is not set when it should be.
* CONFIG_KPROBES: is not set when it should be.
* CONFIG_KPROBE_EVENTS: is not set when it should be.
* CONFIG_UPROBES: is not set when it should be.
* CONFIG_UPROBE_EVENTS: is not set when it should be.
# skiped
Don’t delete gentoo-kernel-bin
. It’s a good fallback if something is broken in your custom kernel.
@rain While grabbing your current kernel's config and running "make localmodconfig" is a decent way, and I'd recommend using config snippets like @hund mentioned, I'd avoid those if you're looking into "learning to do it yourself".
Modern-day "make defconfig" doesn't need a *lot* of tweaking to get going, and you'll learn more about what you're actually enabling, what you're building into the kernel vs as a module, and etc. Read the gentoo handbook and the wiki pages for your graphics etc.