qemu 搭建 ARM Linux环境

qemu 搭建 ARM Linux环境

1.背景

​ 在某些情况下,如果我们没有板子,或者板子某些硬件坏掉了(大多数情况下是根本没板子,板子太贵),这时我们还想继续学习linux下驱动开发或者Linux内核的移植该怎么办?这时可以采用 qemu 模拟出来一个ARM开发板,同时启动Linux内核。

2.基本条件

​ Linux 内核要想启动,必须存在三件套,根文件系统、内核镜像、u-boot。由于 qemu 启动Linux内核不需要 u-boot 来引导,因此,u-boot可以不需要。

  • 存在 linux 环境,本文采用 ubuntu
  • 存在一份 linux 内核源码,本文Linux 内核采用 4.1.15版本
  • 存在 busybox 源码,制作根文件系统
  • 存在 u-boot 源码,为进入linux内核做铺垫( PC 机主板中的 BIOS 引导代码),用 qemu 可以直接启动Linux内核,无需 u-boot
  • 交叉编译工具链,将代码编译成ARM处理器能识别的可执行文件,本文章使用 4.9.4版本

3. 开始搭建

3.1 安装 qemu

​ 在终端中输入 sudo apt-get install qemu安装,安装完成后,输入 qemu-system-arm -M help 来查看 qemu 支持的 ARM 内核开发板,如下:在这里插入图片描述
我们选择 vexpress-a9 这个板子。

3.2 下载 Linux 内核
  1. 在终端中输入 sudo wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.1.15.tar.xz,这里下载 4.1.15 这个版本的 Linux 内核,输入 tar -vxf linux-4.1.15.tar.xz解压,如下:在这里插入图片描述

  2. 在源码根目录下使用 vim Makefile修改顶层 Makefile,这里指定处理器架构交叉编译工具,这么做的目的时防止每次使用 make 命令都添加处理器架构与交叉编译器,如下:在这里插入图片描述

  3. 保存退出后,输入make vexpress_defconfig 命令,产生.config 配置文件,.config 配置文件的作用下期在讲,不求甚解的学习方式是有必要的,所有的东西刚开始学习就要掌握其底层原理是很累人的,不妨用起来之后,在细细探究,如下:在这里插入图片描述

  4. 产生配置文件之后,输入 make -j2编译内核,编译完成之后,会在 arch/arm/boot生成 Linux 内核镜像,同时在 arch/arm/boot/dts 下生成设备树文件,如下:在这里插入图片描述

  5. 至此,Linux源码编译产物准备完毕

3.3 下载 busybox
  1. 打开终端,输入命令 wget https://busybox.net/downloads/busybox-1.30.1.tar.bz2,下载后使用 tar xvf busybox-1.30.1.tar.bz2 解压,进入文件根路径,同样修改顶层 Makefile,指定编译工具与 CPU 架构,如下:在这里插入图片描述
    在这里插入图片描述

  2. 输入 make menuconfig 命令,配置 busybox,这里不使用静态库的方式编译busybox,使用动态的方式编译,然后手动将交叉编译器库文件拷贝至根文件系统,切记不要勾选,然后退出让改动生效,如下:在这里插入图片描述

  3. 输入make开始编译,编译完成后输入 make install CONFIG_PREFIX=/home/tzy/qemu/rootfs ,注意此路径需提前创建,然后进入该目录查看,会有如下文件出现(你的文件可能没这么多,多出的这些需要后期加上):在这里插入图片描述

  4. 拷贝交叉编译工具库文件至跟文件系统中的lib文件夹下,库文件在安装的交叉编译工具文件夹下,拷贝完成后如下:在这里插入图片描述

  5. 至此,跟文件系统构建完毕,但是如何跑呢?在实际板子中需要将根文件系统保存到 flash 中去或者通过nfs的方式挂载网络文件系统供linux内核启动时访问,而qemu中没有板子,更没有flash,因此,需要虚拟出一个存储介质。

4. 制作虚拟存储介质

​ 在终端中输入 dd if=/dev/zero of=rootfs.ext3.img bs=1M count=512,就叫这块存储介质为 nor flash 吧,该 flash 大小设置为512M,然后将这块 flash 挂载到 /mnt/rootfs 目录下,然后将构建的跟文件系统拷贝到此挂载点下,输入命令cp -r /home/tzy/qemu/rootfs /mnt/rootfs,最后卸载此flash。这一步骤其实就是将sd卡插入读卡器,然后插到电脑上,然后向这个sd卡中复制些文件,然后拔出读卡器,这样你的sd卡中就存在了构建的根文件系统了,如下:
在这里插入图片描述

5. 启动 Linux 内核

​ 最后使用如下命令启动内核:qemu-system-arm -M vexpress-a9 -m 512M -dtb /home/tzy/qemu_linux/linux-4.1.15/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -kernel /home/tzy/qemu_linux/linux-4.1.15/arch/arm/boot/zImage -nographic -append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd /home/tzy/qemu_linux/sd/rootfs.ext3,成功启动以后,如下图所示:在这里插入图片描述

6. 编写程序验证

  1. 我们在ubuntu下编写代码,使用交叉编译器编译后,发送至根文件系统中,然后让ARM开发板运行这个程序。输入vim hello.c,打开vim编辑器编写代码,如下:在这里插入图片描述
  2. 保存退出后使用安装的交叉编译器来编译这段代码,命令如下 arm-linux-gnueabihf-gcc hello.c -o hello,这样就生成了ARM架构的可执行文件,输入file hello 命令查看文件信息,如下:在这里插入图片描述
  3. 将hello 拷贝到根文件系统下,启动开发板,并执行该文件,可以看到在模拟的开发板中成功运行了编写的代码,如下:在这里插入图片描述
  • 14
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
在Ubuntu下使用QEMU搭建ARM64 Linux系统的步骤如下: 1. 首先,将生成的u-boot.bin文件放到~/Linux-3.16/qemu目录中。可以使用以下命令执行此操作:\[1\] ``` cp u-boot.bin ~/Linux-3.16/qemu ``` 2. 接下来,使用以下命令启动QEMU虚拟机并加载u-boot.bin文件: ``` sudo qemu-system-arm -M vexpress-a9 -kernel u-boot -nographic -m 512M ``` 3. 确认QEMU是否安装成功,可以使用以下命令查看QEMU版本: ``` qemu-img -V ``` 4. 如果尚未安装QEMU,可以使用以下命令进行安装: ``` sudo apt-get install qemu-system-arm ``` 5. 参考\[3\]中的指南,使用以下命令安装所需的软件包: ``` sudo apt-get install debian-archive-keyring bison flex bc build-essential libncurses* libssl-dev sudo apt-get install qemu-user-static binfmt-support debootstrap ``` 6. 最后,使用debootstrap命令创建文件系统。具体命令可以参考\[3\]中的指南。 请注意,这只是一个概述,具体的步骤可能因系统配置和需求而有所不同。建议参考\[3\]中提供的详细指南以获得更准确的步骤和说明。 #### 引用[.reference_title] - *1* [使用Ubuntu+qemu模拟器搭建arm运行环境](https://blog.csdn.net/qq_34471936/article/details/100142325)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [在Ubuntu下使用QEMU搭建arm开发环境(一)搭建基本开发环境](https://blog.csdn.net/wxh0000mm/article/details/108234090)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [ubuntu虚拟机中使用QEMU搭建ARM64环境](https://blog.csdn.net/qq_41660119/article/details/123949923)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值