利用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/
进行配置和编译:
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开发。