玩转QEMU硬件模拟器 - vexpress-a9开发板模拟开发
Versatile Express-A9开发板介绍
ARM Versatile Express(通常简称 “VExpress”)是 ARM 公司推出的参考开发平台,主要用于 ARM 架构处理器(如 Cortex-A 系列)的软件开发、验证和原型设计,广泛应用于嵌入式系统、移动设备和服务器领域的芯片与软件研发。QEMU可模拟vexpress-a9等平台,用于前期软件验证。
编译内核
在开发基于linux操作系统的应用程序和驱动之前,需要一个能够正常编译的linux内核,这是开发工作顺利进行的前提。通常包括:工具链的安装、linux内核源码获取、内核配置、内核编译和内核验证。
- 工具链安装
gcc-linaro-10.2.1-2021.01-x86_64_arm-linux-gnueabihf.tar.xz - 内核源码获取
linux-5.10.240.tar.xz - 内核配置
asher@ubuntu20:~/phic/qemu-asher/vexpress/linux-5.10.240$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel make vexpress_defconfig
- 内核编译
asher@ubuntu20:~/phic/qemu-asher/vexpress/linux-5.10.240$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel make -j4 zImage modules dtbs
内核编译成功,可以在内核源码路径linux-5.10.240/arch/arm/boot/看到如下内容。
- 内核验证
内核编译成功后,可以编写一个简单的驱动程序,用来测试能不能正常编译,并生成.ko文件。Makefile中要指明linux内核源码的路径和交叉编译工具链,obj-m将 hello_world.c这个文件编译为 hello_world.ko可加载内核模块。
#include <linux/init.h>
#include <linux/module.h>static int helloworld_init(void)
{
// 在内核中无法使用c语言库,所以不用printfprintk("hello world\n"); return 0;
}static void helloworld_exit(void)
{printk("bye\n");
}module_init(helloworld_init);
module_exit