Openkylin操作系统linux内核裁剪实验
建议做到某一步骤可以在VM中存一个快照,便于下次启动,目前发现如果配置好了,下次开机会出现bug无法使用!!!所以推荐使用快照,这样下次可以从快照启动
1、解决下载问题:
1、更改可写权限
sudo ostree admin unlock
2、创建空白钩子
sudo tee /usr/bin/ostree-pkgs-guard <<'EOF'
#!/bin/sh
exit 0
EOF
3、添加权限
sudo chmod +x /usr/bin/ostree-pkgs-guard
4、更新apt
sudo apt update
5、下载依赖
sudo apt install -y build-essential libncurses-dev bison flex libssl-dev libelf-dev qemu-system-x86 git wget
2、下载所需工具
1、创建实验专属工作目录
mkdir -p ~/workspace/exp3
cd ~/workspace/exp3
2、下载实验所需源码
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.44.tar.xz
3、下载 Buildroot 根文件系统定制工具
wget https://buildroot.org/downloads/buildroot-2024.02.6.tar.xz
4、解压两个源码包
# 解压内核
tar -xf linux-6.6.44.tar.xz
# 解压Buildroot
tar -xf buildroot-2024.02.6.tar.xz
执行完后,目录下会有两个文件夹:linux-6.6.44、buildroot-2024.02.6
3、Linux 内核裁剪
1、进入内核源码目录
cd ~/workspace/exp3/linux-6.6.44
2、加载 x86_64 架构默认配置make x86_64_defconfig
make x86_64_defconfig
✅ 成功标志:终端显示 configuration written to .config

3、打开内核图形化配置界面
make menuconfig
File systems → 回车

找到 The Extended 4 (ext4) filesystem → 按 N 取消(空框[])

找到 Btrfs filesystem support → 按 Y 勾选(实心<*>)

按 Tab 选 <Save> → 回车保存 → 回车确认,这里不保存也可以,因为下一步退出(连按ESC)会提示是否保存已修改的内容,选择yes回车即可
连续按 ESC 退出配置界面
5、编译裁剪后的内核
make bzImage -j 4
(-j4用 4 线程编译,适配虚拟机配置,等待 5-10 分钟完成,这里你有几个核就用几,例如你是8个核,用make bzImage -j 8)
这里耐心等待即可
✅ 成功标志:最后提示 Kernel: arch/x86_64/boot/bzImage is ready

4、定制 Btrfs 根文件系统
1、进入 Buildroot 目录
cd ~/workspace/exp3/buildroot-2024.02.6
2、打开配置界面
make menuconfig
3、关键配置
1、Target options → Target Architecture 选 x86_64,回车进去有具体选项

2、Filesystem images → 勾选 btrfs root filesystem

3、System configuration → Default shell 选 bash
若出现以下问题,则没有显示看不到bash

按ESC回到 Buildroot 的主菜单。
用方向键选中 Target packages,按回车进入。
找到 Shells 选项,按回车进入。
找到 bash 选项,按Y键勾选(前面会出现<*>标记)。若没有无需管进行下一步
在 Target packages 的最顶部,找到Show packages that are also provided by busybox,按Y勾选,这样能显示更多相关选项,避免后续配置看不到。


此时我们可以看到了

4、进入Text editors and viewers

更改vim
5、进入Networking

选择openssh
6、更改下载源
选择download

选择第一个Primary download site

回车进入更换源
https://mirrors.tuna.tsinghua.edu.cn/buildroot/

图中是科大源,清华源是更建议更换的(直接复制给的命令即可)
7进入 Kernel 菜单(主菜单里的 Kernel,按回车进去)
-
按空格勾选
[/*] Linux Kernel(不勾上的话,后面的配置选项不会显示) -
找到
Kernel configuration下面的选项(默认是个下拉菜单),按回车进入 -
选择
Use the architecture default configuration这一步的意思是:让 Buildroot 自动使用 x86_64 架构的默认内核配置,不用你手动指定文件,彻底解决报错。
8、保存配置 → ESC 退出
一直按ESC,最后提示是否保存,yes即可
9、设置不更新最新linux版本
打开配置文件
vim .config
找到
BR2_LINUX_KERNEL_LATEST_VERSION=y
BR2_KERNEL_HEADERS_LATEST=y
分别改为
# BR2_LINUX_KERNEL_LATEST_VERSION is not set
# BR2_KERNEL_HEADERS_LATEST is not set
保存退出**:wq**
4、编译根文件系统
make -j4
这一步可能时间有点长,耐心等待
✅ 成功标志:生成文件 output/images/rootfs.btrfs
5、QEMU 启动裁剪后的系统
1、拷贝内核和文件系统到统一目录
cd ~/workspace/exp3
cp linux-6.6.44/arch/x86_64/boot/bzImage ./
cp buildroot-2024.02.6/output/images/rootfs.btrfs ./
2、启动虚拟机(直接复制整条命令)
qemu-system-x86_64 /
-m 2048 /
-smp 2 /
-kernel ./bzImage /
-drive file=./rootfs.btrfs,if=virtio,format=raw /
-append "console=ttyS0 root=/dev/vda rw init=/sbin/init" /
-virtfs local,path=/,mount_tag=host0,security_model=passthrough /
-device edu /
-nographic
✅ 成功标志:进入命令行,系统正常启动!
✅ 关键参数说明:
-device edu:挂载实验要求的 edu 虚拟设备-virtfs:配置 9p 文件共享,用于宿主机和虚拟机传输文件-nographic:无图形模式,终端直接作为虚拟机控制台
6、挂载 9p 共享目录(宿主机和虚拟机文件互通)/实验3
0、先在宿主机编译好文件
把写好的驱动代码的Makefile修改为qemu虚拟机的linux内核版本编译,这里让大模型写一个就好,正常make编译即可
1、在 QEMU 虚拟机终端内执行
mkdir -p /mnt/hostshare
mount -t 9p -o trans=virtio host0 /mnt/hostshare
✅ 挂载成功后,/mnt/host 可以访问宿主机的所有文件,用于拷贝 Edu 驱动源码
2、复制驱动和测试程序到虚拟机当前目录
1、把宿主机上的 Edu 驱动文件夹,这里需要把.ko和要执行的文件(共edu_dev.ko和user_demo两个,可能名称不一样)
cp /mnt/hostshare/workspace/exp3/edu_drv/edu_dev.ko .
cp /mnt/hostshare/workspace/exp3/edu_drv/user_demo .
3、加载内核
insmod edu_dev.ko
4、创建设备节点(主设备号 200,次设备号 0)
mknod /dev/edu c 200 0
chmod 777 /dev/edu
5、给用户态程序添加执行权限并运行:
chmod +x user_demo
./user_demo
6、查看并修改 kernel.shmmax 内核参数
1、查看当前参数值:
sysctl kernel.shmmax
2、临时修改参数(示例设为 1G):
sysctl -w kernel.shmmax=1073741824
3、验证修改是否生效:
sysctl kernel.shmmax
✅ 成功标志:输出修改后的数值,说明内核参数修改成功
退出Ctrl+A,松开,按x,即可退出
友情贡献:Frost
–JSK
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)