# Linux Kernel 6.0 Patching
IPFS CID - QmQgVfyKKFC8afn1hRKpApZZQZuQSrhPGN2CkwegGVTj1y
## Overview
* What is the Linux Kernel?
* Installing Linux
* Git / Download
* Dependencies
* Building
* Installing
* Next steps
* References
## What is the Linux Kernel?
* user to hardware communication
* the Linux kernel is monolithic, although it is also modular
## Installing Linux
* VirtualBox
* Live USB
* Bare metal (full installation)
## Dependencies
* [minimum requirements](https://docs.kernel.org/process/changes.html)
* most modern laptops should suffice
* dont forget the kernel headers (`kernel-dev, kernel-devel, etc.`)
* if udevd is not on the path: `/lib/systemd/systemd-udevd --version`
* if `grub --version` not working try: `grub2 --version||grub2-install --version`
* sphinx install is `python3-sphinx`
## Git / Download
* [linux-next](https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/)
* [mainline](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/)
* [stable](https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git)
Let's go to the latest stable branch.
```bash
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux_stable
cd linux_stable
git branch -a | grep linux-6
git checkout linux-6.0.y
```
## Building
Copy the current configuration.
```bash
ls /boot
cp /boot/<config-x.x.x-xx-> .config
```
Generate the kernel configuration file.
```bash
make oldconfig
```
Create configuration based on currently loaded modules.
```bash
lsmod > /tmp/my-lsmod
make LSMOD=/tmp/my-lsmod localmodconfig
```
Time to compile!
```bash
make -j$(echo "($(nproc) - 1)" | bc) all
```
Note: since this takes a while depending on cpu, perfect time for coffee!
## Installing
Let's make sure this thing works!
Run the command below as root (`sudo su`)
```bash!
"make modules_install install"
```
Then `exit` back to normal user.
It is a good idea to check system messages for errors.
```bash!
dmesg -t > dmesg_current
dmesg -t -k > dmesg_kernel
dmesg -t -l emerg > dmesg_current_emerg
dmesg -t -l alert > dmesg_current_alert
dmesg -t -l crit > dmesg_current_crit
dmesg -t -l err > dmesg_current_err
dmesg -t -l warn > dmesg_current_warn
dmesg -t -l info > dmesg_current_info
```
Kernel hackers disable secure boot, but just to check...
```bash~
mokutil --sb-state
```
Disable validation:
```bash!
sudo mokutil --disable-validation
root password
mok password: 12345678
mok password: 12345678
```
### Boot it up
* there is no guarantee that this custom kernel will boot
* below are Ubuntu specific grub configurations for the grub
`sudo vim /etc/default/grub`
* Uncomment `GRUB_TIMEOUT` and set it to 10: `GRUB_TIMEOUT=10`
* Comment out `GRUB_TIMEOUT_STYLE=hidden`
* enable printing of early boot messages `GRUB_CMDLINE_LINUX="earlyprintk=vga"`
Fingers crossed, here goes nothing!
`sudo reboot`
## Next Steps
* moar hacking
* create your own tools
* [static analysis with csbuild](https://hackmd.io/BXQrVcy2TJi4-ksisZctIA)
* [smatch](https://repo.or.cz/w/smatch.git)
## References
* [kernel wikipedia](https://en.wikipedia.org/wiki/Kernel_(operating_system))
* [docs](https://docs.kernel.org/index.html)