利用qemu学习嵌入式linux(一)—— 环境搭建

1、环境准备2、创建磁盘镜像3、编译内核4、编译根文件系统5、编译uboot6、启动qemu7、实验在学习嵌入式linux开发时。

在学习嵌入式linux开发时,我们往往需要一个硬件平台来进行实验和调试。但是,如果没有硬件平台怎么办?这时候可以利用虚拟化技术来模拟出一个嵌入式系统的运行环境,其中qemu是一款比较常用的虚拟机软件。

本文将介绍如何利用qemu搭建一个基于arm架构的嵌入式linux系统,并通过简单的实验来加深对操作系统原理和软硬件交互的理解。

环境准备

在开始之前,需要先安装好以下工具:

1. qemu

2. arm-linux-gcc

3. uboot

可以通过以下命令来安装:

“`

sudo apt-get install qemu-system-arm

sudo apt-get install gcc-arm-linux-gnueabi

sudo apt-get install uboot-mkimage

创建磁盘镜像

首先需要创建一个磁盘镜像文件作为我们模拟出来的硬盘。执行以下命令:

qemu-img create -f raw rootfs.img 2G

这里创建了一个大小为2GB、格式为raw的磁盘镜像文件rootfs.img。

编译内核

接下来需要编译一个适用于arm架构的linux内核。可以从官网下载最新版的内核源码并解压:

wget -5.15.2.tar.xz

tar -xvf linux-5.15.2.tar.xz

然后进入解压后的目录,配置编译选项:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- versatile_defconfig

这里以versatile板子为例。然后执行以下命令开始编译:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

等待一段时间,即可得到编译好的内核镜像文件arch/arm/boot/zImage。

编译根文件系统

除了内核镜像外,还需要一个根文件系统作为操作系统运行时的环境。可以使用busybox来构建一个简单的根文件系统。

下载busybox源码并解压:

wget -1.34.1.tar.bz2

tar -xvf busybox-1.34.1.tar.bz2

cd busybox-1.34.1/

利用qemu学习嵌入式linux(一)—— 环境搭建

进行配置和编译:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- defconfig

make menuconfig(进入菜单界面进行相关设置)

make install (安装到之前创建好的磁盘镜像中)

这里需要注意的是,在menuconfig菜单界面中,需要设置一些基本的选项,比如交叉编译工具链路径、安装目录等。同时还需要选择一些常用的工具和库,比如vi、wget、ash等。

编译uboot

最后还需要编译uboot引导程序。可以从官网下载最新版源码并解压:

wget -boot/u-boot-2021.10.tar.bz2

tar -xvf u-boot-2021.10.tar.bz2

cd u-boot-2021.10/

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- versatilepb_config

这里以versatilepb板子为例。执行完毕后,即可得到一个u-boot.bin文件。

启动qemu

现在所有的组件都已经准备好了。接下来可以通过以下命令启动qemu虚拟机:

qemu-system-arm -M versatilepb -m 256M -kernel arch/arm/boot/zImage -initrd rootfs.img -append “root=/dev/ram rdinit=/sbin/init” -dtb arch/arm/boot/dts/versatile-pb.dtb -serial stdio

其中-M参数指定了使用versatilepb板子作为硬件平台;-m参数指定了内存大小;-kernel参数指定了内核镜像文件;-initrd参数指定了根文件系统镜像文件;-append参数指定了启动时的内核命令行参数,这里指定使用ramdisk作为根文件系统,并执行/sbin/init程序来启动操作系统;-dtb参数指定了设备树文件;-serial stdio表示将串口输出重定向到标准输出中。

实验

启动成功后,会看到qemu的控制台。可以通过输入命令来进行一些简单的实验:

1. 查看内存信息

cat /proc/meminfo

2. 查看cpu信息

cat /proc/cpuinfo

3. 查看硬盘分区情况

fdisk -l

4. 运行一个hello world程序

在busybox中有一个自带的ash shell,在其中运行以下命令即可:

echo “Hello, World!”

通过以上步骤,我们成功搭建了一个基于qemu虚拟机的嵌入式linux开发环境,并进行了简单的实验。这对于初学者来说是很有帮助的,可以加深对操作系统原理和软硬件交互等方面的理解。

在后续文章中,我们将进一步介绍如何利用这个环境来进行更深入、更复杂的嵌入式linux开发。