Administrator
发布于 2024-07-11 / 87 阅读
0

EBPF 03

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