Linux 内核树源码编译
Linux 内核tools子模块编译
Linux 内核样例程序编译
# ubuntu 使用 https://www.releases.ubuntu.com/focal/ubuntu-20.04.6-desktop-amd64.iso
# 下载Linux内核源码
#https://kernel.ubuntu.com/mainline/v5.1.5/
mkdir /home/abc/src/kernel/linux
cd /home/abc/src/kernel/linux
git clone git://git.launchpad.net/~ubuntu-kernel-test/ubuntu/+source/linux/+git/mainline-crack v5.1.5
cd v5.15
git checkout v5.15
git branch
Linux内核源码编译:
## 依赖:
sudo apt-get install git fakeroot build-essential lib32ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison binutils-dev libcap-dev libreadline-dev zstd -y
#这是btf依赖 pahole 20.4无法安装成功,安装下面的。
# sudo apt-get install pahole
sudo apt-get install dwarves
```bash
#通过github 获取的.config 不需要这一个步
sudo cp /boot/config-$(uname -r) /home/abc/src/kernel/linux/.config
#如果debian 不存在,按下面的方式处理
sudo cp -R /usr/src/linux-source-5.15.0/debian .
sudo cp -R /usr/src/linux-source-5.15.0/debian.master .
#也可以,
#CONFIG_SYSTEM_TRUSTED_KEYS=""
#CONFIG_SYSTEM_REVOCATION_KEYS=""
#或者
# scripts/config --disable SYSTEM_TRUSTED_KEYS
# scripts/config --disable SYSTEM_REVOCATION_KEYS
#全部编译
sudo make -j 8
#安装内核
sudo make install
#安装内核模块到 /lib/modules/5.15.0
make INSTALL_MOD_STRIP=1 modules_install
#更新grub
sudo update-grub
#下面是手动的方式
#这个命令的作用是把/lib/modules/5.17.3中对应的.ko驱动打包到initrd.img文件中。
# mkinitramfs /lib/modules/5.15.0 -o /boot/initrd.img-5.15.0
#否则会在启动时提示 Missing modules cat /proc/modules ls /dev
#编译内核 -j表示加速,4代表着线程数
# make bzImage -j4
#编译内核
# make modules -j4
# 使用MOK(Machine Owner Key)工具来签名内核
需要一些步骤。以下是一个基本的步骤指南:
1. 首先,你需要生成一对MOK(Machine Owner Key)。在终端中,输入以下命令:
mkdir key
cd key
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=My Machine Owner Key/"
openssl x509 -inform der -in MOK.der -out MOK.pem
这将生成两个文件,MOK.priv(你的私钥)和MOK.pem(你的公钥)。
2. 然后,你需要使用你的私钥来签名内核。假设你的内核文件名为vmlinuz,你可以使用以下命令:
#给内核模块签名
./scripts/sign-file sha256 /home/abc/key/MOK.priv /home/abc/key/MOK.der samples/ftrace/ftrace-direct.ko
hexdump -C samples/ftrace/ftrace-direct.ko | tail
#这是make install 生成的文件。
cp /boot/vmlinuz-5.15.0 vmlinuz
#签名,这将生成一个已签名的内核文件,vmlinuz-signed。
sudo sbsign --key MOK.priv --cert MOK.pem --output vmlinuz-signed vmlinuz
#查看签名
sbverify --list vmlinuz-signed
#复制到boot目录下
cp vmlinuz-signed /boot/vmlinuz-5.15.0
3. 接下来,你需要将你的公钥添加到MOK管理器。使用以下命令:(只在第一次添加)
sudo mokutil --import MOK.der
#这将要求你创建一个密码。你需要记住这个密码,因为在下一次重启时,你需要用它来确认你想要添加新的MOK。
4. 重启你的计算机。在启动过程中,你应该会看到一个MOK管理器的菜单。选择“Enroll MOK”,然后输入你之前创建的密码。然后,你的新MOK将被添加到系统中,你的已签名的内核应该可以在启用Secure Boot的情况下加载了。
注意:这些步骤可能会根据你的具体情况有所不同。在开始之前,确保你已经备份了所有重要的数据,并且知道如何在出现问题时恢复到旧的内核。
# 利用grub指定Ubuntu启动时默认的linux内核:
1、先重启,快速按ESC进入GNU grub界面(虚拟机可以设置下次启动时进入启动项),进入Advanced options for Ubuntu, 找到自己想要启动的Linux内核,本例为第3个Linux 5.4.0.84-generic.
2、进入Ubuntu系统,打开终端,输入sudo vi /etc/default/grub, 把其中的GRUB_DEFAULT=0 改为 GRUB_DEFAULT=“1>2"(注意,其中的数字表示图中红色数字所标的序号,1表示启动时先进入Advanced options for Ubuntu, 2表示选择第3个内核启动。自然地,如果你要选择第4个内核启动,则GRUB_DEFAULT=“1>3")。保存后回到终端。
如果想每次都可以看到启动项,要设置下面的两项
#菜单
GRUB_TIMEOUT_STYLE=menu
#超时时间
GRUB_TIMEOUT=10
3、在终端输入 update-grub。完成!
416
# 重启验证
#reboot
uname -ar
Linux abc 5.15.0 #3 SMP Sat Feb 3 22:46:42 HKT 2024 x86_64 x86_64 x86_64 GNU/Linux
sudo make -j 8 modules
sudo make -C samples/bpf
sudo make modules_install
sudo make -j 8
sudo make install
#bpf 编译
cd /home/abc/kernel/linux/tools/bpf
make -j8
#libpf 用于ebpf开发
# bpftool 命令行工具,管理查看ebpf信息
#perf工具,Linux性能检测,采样,可以用来做系统调用 监控的工具
cd /home/abc/kernel/linux/tools/perf
make -j8