qemu模拟开发板问题记录

本文记录了在ARM环境下加载qemu内核模块时遇到的问题及现象,包括首次加载模块提示out-of-tree并标记内核,多次加载时提示文件已存在,以及insmod和rmmod操作的日志信息出现反常等问题。
问题现象:

guang@arm-vexpress:/ # ls
bin lib mnt sys usr
dev linuxrc proc test var
etc lost+found sbin tmp
guang@arm-vexpress:/ # cd test/
guang@arm-vexpress:/test # insmod qemu.ko
qemu: loading out-of-tree module taints kernel.
guang@arm-vexpress:/test # lsmod
qemu 16384 0 - Live 0x7f000000 (O)
guang@arm-vexpress:/test # insmod qemu.ko
insmod: can’t insert ‘qemu.ko’: File exists

问题1:如上,首次加载ko,提示out-of-tree,lsmod确显示ko已加载,insmod会报ko已经存在,wiki参考说是“内核在编译的时候选择支持内核签名机制,据说在3.7版本后面就支持”,不太确定,wiki地址:https://blog.youkuaiyun.com/Guet_Kite/article/details/73175991?locationNum=3&fps=1

guang@arm-vexpress:/test # rmmod qemu.ko
[Info]Hello! Enter QEMU.
guang@arm-vexpress:/test # insmod qemu.ko
[Info]Hello! Exit QEMU.
guang@arm-vexpress:/test # lsmod
qemu 16384 0 - Live 0x7f010000 (O)
guang@arm-vexpress:/test # rmmod qemu.ko
[Info]Hello! Enter QEMU.
guang@arm-vexpress:/test # lsmod
guang@arm-vexpress:/test #

问题2,如下,insmod和rmmod的log正好相反,很奇怪

guang@arm-vexpress:/test # lsmod
guang@arm-vexpress:/test # insmod qemu.ko
[Info]Hello! Exit QEMU.
guang@arm-vexpress:/test # rmmod qemu.ko
[Info]Hello! Enter QEMU.
guang@arm-vexpress:/test #
这里写图片描述

源码如下:
// qemu.c
#include <linux/init.h>
#include <linux/module.h>

static int __init qemu_init (void)
{
        printk (KERN_INFO"[Info]Hello! Enter QEMU.");
        return 0;
}
module_init (qemu_init);

static void __exit qemu_exit (void)
{
        printk (KERN_INFO"[Info]Hello! Exit QEMU.");
}
module_exit (qemu_exit);

MODULE_AUTHOR ("Guang-kylin");
MODULE_LICENSE ("GPL v2");
MODULE_DESCRIPTION ("A simple qume test module");
MODULE_ALIAS ("QEMU module");
// makefile
KDIR=/home/guang/Develop/linux-stable
PWD=$(shell pwd)

# Kernel modules
obj-m += qemu.o
module-objs = qemu.o

ARCH=arm
CROSS_COMPILE=arm-linux-gnueabi-

CC := $(CROSS_COMPILE)gcc
LD := $(CROSS_COMPILE)ld

#EXTRA_CFLAGS=-g -O0

default:
        make -C $(KDIR) M=$(PWD) modules
clean:
        rm -f *.ko *.o *.mod.c *.symvers *.order
<think>好的,我需要帮助用户了解如何创建适用于QEMU的MIPS64el架构的虚拟机镜像。根据用户提供的引用信息,特别是引用[1]和引用[3],里面有提到使用qemu-system-mips64el和相关命令。首先,我应该确认用户的需求是制作一个可以在QEMU上运行的MIPS64el镜像。 接下来,我需要考虑步骤的合理性。通常创建虚拟机镜像需要安装QEMU工具,然后使用qemu-img创建镜像文件,接着下载合适的系统镜像,最后启动虚拟机进行安装。引用[2]提到qemu-img可以创建镜像,但需要注意不要在使用时修改,所以需要确保镜像未被占用。 用户可能还需要交叉编译或使用现成的系统镜像。引用[3]列出了各种QEMU可用的架构,包括mips64el,说明QEMU支持该架构的模拟。可能还需要安装对应的内核和initrd文件,比如Debian或Ubuntu提供的资源。 需要检查是否有现成的教程或官方文档指导如何创建MIPS64el镜像。例如,Debian可能提供预编译的镜像,用户只需下载并用qemu启动。如果用户需要从头构建,可能需要使用debootstrap之类的工具,但考虑到架构不同,可能需要使用chroot和qemu-user-static进行跨架构环境构建,如引用[1]中提到的挂载qemu-aarch64-static的方法,类似地,可能需要qemu-mips64el-static。 总结步骤可能包括: 1. 安装QEMU和相关组件。 2. 创建空的磁盘镜像。 3. 下载或构建MIPS64el系统文件。 4. 使用qemu-system启动安装过程。 5. 完成系统配置。 需要确保每一步的命令正确,例如qemu-img create的正确参数,以及qemu-system-mips64el的正确启动参数,包括内核、initrd、磁盘镜像和网络设置等。同时,可能需要处理如何获取适用于MIPS64el的内核文件,比如vmlinux和initrd.gz,可能从Debian的ports仓库获取。 另外,用户可能需要配置网络,使得虚拟机可以访问外部网络进行软件安装。可能需要使用-netdev和-device参数配置网络设备。 最后,生成相关问题,可能涉及如何优化镜像大小,如何配置网络,或者如何处理常见的启动错误等。</think>### 如何创建适用于QEMU的MIPS64el架构虚拟机镜像 #### 步骤说明 1. **安装QEMU及相关组件** 确保已安装支持MIPS64el架构的QEMU系统模拟器和工具: ```bash sudo apt-get install qemu-system-mips qemu-utils ``` 引用[3]中列出的`qemu-system-mips64el`组件需通过此步骤安装。 2. **创建磁盘镜像** 使用`qemu-img`创建一个空的磁盘镜像文件(建议格式为qcow2,支持动态分配空间): ```bash qemu-img create -f qcow2 mips64el.qcow2 10G ``` 引用[2]强调需在镜像未被使用时操作,否则可能导致损坏。 3. **下载系统安装文件** 获取MIPS64el架构的操作系统安装镜像。以Debian为例,可从官方仓库下载: - 内核文件:`vmlinux-4.19.0-18-loongson-3` - 初始内存盘:`initrd.gz` - 安装ISO:`debian-10.6.0-mips64el-netinst.iso` 4. **启动QEMU虚拟机并安装系统** 执行以下命令启动安装流程: ```bash qemu-system-mips64el \ -M malta -cpu MIPS64R2-generic -m 2048 \ -kernel vmlinux-4.19.0-18-loongson-3 \ -initrd initrd.gz \ -hda mips64el.qcow2 \ -cdrom debian-10.6.0-mips64el-netinst.iso \ -append "root=/dev/ram console=ttyS0" \ -nographic -serial mon:stdio ``` 参数说明: - `-M malta`: 指定MIPS Malta开发板模拟环境 - `-cpu MIPS64R2-generic`: 定义CPU类型 - `-hda`和`-cdrom`: 关联磁盘镜像和安装ISO - `-nographic`: 以命令行模式运行(无图形界面) 5. **完成系统安装** 按照提示完成分区、软件包选择等配置。安装完成后,移除`-cdrom`参数并启动虚拟机: ```bash qemu-system-mips64el \ -M malta -cpu MIPS64R2-generic -m 2048 \ -hda mips64el.qcow2 \ -nographic -serial mon:stdio ``` #### 注意事项 - 若需跨架构构建(例如在x86主机上构建MIPS64el镜像),可参考引用[1]的方法,挂载`qemu-mips64el-static`仿真器: ```bash sudo cp /usr/bin/qemu-mips64el-static /path/to/chroot/usr/bin/ ``` - 网络配置需添加`-netdev user,id=net0 -device pcnet,netdev=net0`参数以启用虚拟网络。 --- ### 相关问题 1. **如何优化QEMU虚拟机磁盘镜像的存储效率?** 使用`qemu-img convert -O qcow2`可压缩镜像,或启用`-o compression_type=zstd`选项(需QEMU版本支持)[^2]。 2. **如何在QEMU中为MIPS64el虚拟机配置桥接网络?** 需通过`-netdev tap`和宿主机的TAP设备实现桥接,需提前配置`bridge-utils`工具。 3. **如何调试QEMU虚拟机启动失败的问题?** 添加`-d int,cpu_reset -D qemu.log`参数记录日志,或通过`-serial telnet:localhost:4321,server,nowait`启用远程控制台。 4. **是否有现成的MIPS64el预构建镜像可用?** Debian官方提供MIPS64el端口镜像,可直接下载并使用[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值