建议做到某一步骤可以在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.44buildroot-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 optionsTarget Architecturex86_64,回车进去有具体选项

在这里插入图片描述

2、Filesystem images → 勾选 btrfs root filesystem

在这里插入图片描述

3、System configurationDefault shellbash

若出现以下问题,则没有显示看不到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,按回车进去)
  1. 按空格勾选 [/*] Linux Kernel(不勾上的话,后面的配置选项不会显示)

  2. 找到 Kernel configuration 下面的选项(默认是个下拉菜单),按回车进入

  3. 选择

    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

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐