QEMU环境搭建

前言

为了方便编译和运行linux,搭建一个用于学习linux的QEMU环境。

环境:
处理器架构:arm64
内核源码:linux-rt-5.15
ubuntu版本:ubuntu18
代码阅读工具:vim+cscope

交叉编译工具链的安装

$ sudo apt-get install gcc-aarch64-linux-gnu
$ aarch64-linux-gnu-gcc -v

QEMU的安装

apt-get install build-essential zlib1g-dev pkg-config libglib2.0-dev binutils-dev libboost-all-dev autoconf libtool libssl-dev libpixman-1-dev libpython-dev python-pip python-capstone virtualenv
wget https://download.qemu.org/qemu-4.2.1.tar.xz
tar xvJf qemu-4.2.1.tar.xz
cd qemu-4.2.1
./configure --target-list=x86_64-softmmu,x86_64-linux-user,arm-softmmu,arm-linux-user,aarch64-softmmu,aarch64-linux-user --enable-kvm --enable-virtfs
make 
sudo make install

如果出现:
error: VirtFS rlibattr develequires libcap devel and
可运用apt-get build-dep qemu去装置一切的依靠库

如提示sources.list相关问题,则更换源:
ubuntu18.04更换国内源:
a. 备份/etc/apt/sources.list文件

sudo mv /etc/apt/sources.list/etc/apt/sourses.list.backup

b. 新建/etc/apt/sources.list文件

sudo vi /etc/apt/sources.list

c. 输入以下内容(阿里源)

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

d.

sudo apt-get update

编译完成之后,qemu在 /usr/local/bin目录下

/usr/local/bin/qemu-system-aarch64 -version
QEMU emulator version 4.2.1
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers

根文件系统制作

可参考引用的文章,记住改了根文件系统的内容,要重新编译Image。
比如chmod a+x rcS 、sudo mknod console c 5 1等操作。
制作好的根文件系统

内核源码的编译

下载linux-rt源码

https://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-stable-rt.git/

放置根文件系统到源码目录

cd linux-rt-5.15
sudo cp  ../../busybox-1.31.1/_install  _install_arm64 -a

配置defconfig

添加hotplug支持:
+CONFIG_UEVENT_HELPER=y
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
添加initramfs的支持:
+CONFIG_INITRAMFS_SOURCE="_install_arm64"

编译

export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
make defconfig
make Image -j8 

运行qemu模拟器

创建共享目录,用于主机和qemu运行的系统进行共享文件

mkdir kmodules

运行

qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine type=virt \
 -m 1024 -smp 4 -kernel arch/arm64/boot/Image --append "rdinit=/linuxrc root=/dev/vda rw console=ttyAMA0 loglevel=8"  -nographic \
 --fsdev local,id=kmod_dev,path=$PWD/kmodules,security_model=none \
 -device virtio-9p-device,fsdev=kmod_dev,mount_tag=kmod_mount

其中:-cpu指定了模拟的cpu为 cortex-a57,-m 1024 指定内存大小为1G, -smp 4指定模拟的系统为4核处理器 ,-kernel指定启动的内核镜像, --append指定传递的命令行参数,后面的选项指定共享目录已经使用的9P协议

内核模块测试

前面已经支持了主机和qemu上的系统共享目录,这个目录就是kmodules目录:通过mount可以查看被挂载到了qemu上的系统的/mnt目录下

Makefile文件:

export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-

KERNEL_DIR ?= /home/hou/linux_rt/linux-rt-5.15
obj-m := module_test.o

modules:
 $(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules

clean:
 $(MAKE) -C $(KERNEL_DIR) M=$(PWD) clean

install:
 cp *.ko $(KERNEL_DIR)/kmodules
#include <linux/init.h>
#include <linux/module.h>
 #include <linux/kernel.h>
  
  static int __init module_test_init(void)
  {
          printk("module_test_init\n");
          return 0;
  }    
  
  static void __exit module_test_exit(void)
  {
          printk("module_test_exit\n");
  }
  
  
  module_init(module_test_init);
  module_exit(module_test_exit);
  MODULE_LICENSE("GPL");

编译拷贝:

$ make modules
$ make install 

到QEMU的内核系统中,进入/mnt目录下:执行模块的插入/移除命令:

 insmod module_test.ko 
 lsmod 
 rmmod module_test

应用测试

  #include <stdio.h>
  
  int main(int argc, char **argv)
  {
  
          printf("Hello World, QEMU!!!\n");
              
          return 0;
  }

编译拷贝执行:

aarch64-linux-gnu-gcc test.c -o test
cp test ../../kmodules/
./test

后续就可以使用这套QEMU环境来学习内核原理和常见的稳定性问题。

参考: 使用QEMU搭建ARM64实验环境

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值