建议做到某一步骤可以在VM中存一个快照便于下次启动目前发现如果配置好了下次开机会出现bug无法使用所以推荐使用快照这样下次可以从快照启动1、解决下载问题1、更改可写权限sudoostree admin unlock2、创建空白钩子sudotee/usr/bin/ostree-pkgs-guardEOF #!/bin/sh exit 0 EOF3、添加权限sudochmodx /usr/bin/ostree-pkgs-guard4、更新aptsudoaptupdate5、下载依赖sudoaptinstall-ybuild-essential libncurses-dev bison flex libssl-dev libelf-dev qemu-system-x86gitwget2、下载所需工具1、创建实验专属工作目录mkdir-p~/workspace/exp3cd~/workspace/exp32、下载实验所需源码wgethttps://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.44.tar.xz3、下载 Buildroot 根文件系统定制工具wget https://buildroot.org/downloads/buildroot-2024.02.6.tar.xz4、解压两个源码包# 解压内核tar-xflinux-6.6.44.tar.xz# 解压Buildroottar-xfbuildroot-2024.02.6.tar.xz执行完后目录下会有两个文件夹linux-6.6.44、buildroot-2024.02.63、Linux 内核裁剪1、进入内核源码目录cd~/workspace/exp3/linux-6.6.442、加载 x86_64 架构默认配置make x86_64_defconfigmakex86_64_defconfig✅ 成功标志终端显示configuration written to .config3、打开内核图形化配置界面makemenuconfigFile systems→ 回车找到The Extended 4 (ext4) filesystem→ 按N取消空框[]找到Btrfs filesystem support→ 按Y勾选实心*按Tab选Save→ 回车保存 → 回车确认这里不保存也可以因为下一步退出连按ESC会提示是否保存已修改的内容选择yes回车即可连续按ESC退出配置界面5、编译裁剪后的内核makebzImage-j4-j4用 4 线程编译适配虚拟机配置等待 5-10 分钟完成这里你有几个核就用几例如你是8个核用make bzImage -j 8这里耐心等待即可✅ 成功标志最后提示Kernel: arch/x86_64/boot/bzImage is ready4、定制 Btrfs 根文件系统1、进入 Buildroot 目录cd~/workspace/exp3/buildroot-2024.02.62、打开配置界面makemenuconfig3、关键配置1、Target options→Target Architecture选x86_64回车进去有具体选项2、Filesystem images→ 勾选btrfs root filesystem3、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更改vim5、进入Networking选择openssh6、更改下载源选择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_VERSIONy BR2_KERNEL_HEADERS_LATESTy分别改为# BR2_LINUX_KERNEL_LATEST_VERSION is not set # BR2_KERNEL_HEADERS_LATEST is not set保存退出**wq**4、编译根文件系统make-j4这一步可能时间有点长耐心等待✅ 成功标志生成文件output/images/rootfs.btrfs5、QEMU 启动裁剪后的系统1、拷贝内核和文件系统到统一目录cd~/workspace/exp3cplinux-6.6.44/arch/x86_64/boot/bzImage ./cpbuildroot-2024.02.6/output/images/rootfs.btrfs ./2、启动虚拟机直接复制整条命令qemu-system-x86_64 /-m2048/-smp2/-kernel./bzImage /-drivefile./rootfs.btrfs,ifvirtio,formatraw /-appendconsolettyS0 root/dev/vda rw init/sbin/init/-virtfslocal,path/,mount_taghost0,security_modelpassthrough /-deviceedu /-nographic✅ 成功标志进入命令行系统正常启动✅ 关键参数说明-device edu挂载实验要求的 edu 虚拟设备-virtfs配置 9p 文件共享用于宿主机和虚拟机传输文件-nographic无图形模式终端直接作为虚拟机控制台6、挂载 9p 共享目录宿主机和虚拟机文件互通/实验30、先在宿主机编译好文件把写好的驱动代码的Makefile修改为qemu虚拟机的linux内核版本编译这里让大模型写一个就好正常make编译即可1、在 QEMU 虚拟机终端内执行mkdir-p/mnt/hostsharemount-t9p-otransvirtio 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.ko4、创建设备节点主设备号 200次设备号 0mknod/dev/edu c2000chmod777/dev/edu5、给用户态程序添加执行权限并运行chmodx user_demo ./user_demo6、查看并修改 kernel.shmmax 内核参数1、查看当前参数值sysctlkernel.shmmax2、临时修改参数示例设为 1Gsysctl-wkernel.shmmax10737418243、验证修改是否生效sysctlkernel.shmmax✅ 成功标志输出修改后的数值说明内核参数修改成功退出CtrlA,松开按x即可退出–JSK
阅读完成 · 觉得有帮助?