如何用手机网站做淘宝客,wordpress 免费 旅游,dede仿手机网站模板,顺德品牌网站建设优惠qemu的安装并搭建虚拟arm环境 1、准备工作1.1 安装交叉汇编工具1.2 编译内核kernel1.3 u-boot编译1.4 制作根文件系统-busybox 2、启动qemu#xff08;arm#xff09;3、helloworld测试 1、准备工作
1.1 安装交叉汇编工具
交叉编译器的作用就不需要详细解释了#xff0c;因… qemu的安装并搭建虚拟arm环境 1、准备工作1.1 安装交叉汇编工具1.2 编译内核kernel1.3 u-boot编译1.4 制作根文件系统-busybox 2、启动qemuarm3、helloworld测试 1、准备工作
1.1 安装交叉汇编工具
交叉编译器的作用就不需要详细解释了因为我们是在x86平台上进行编译而运行的平台是ARM系统这2个平台的指令集不一样所以需要交叉编译得到ARM系统上可以执行的程序。
sudo apt-get install gcc-arm-linux-gnueabi gcc-arm-linux-gnueabihf验证安装结果
dpkg -l gcc-arm-linux-gnueabi1.2 编译内核kernel
下载内核kernel压缩包
wget https://mirror.bjtu.edu.cn/kernel/linux/kernel/v5.x/linux-5.10.tar.xz使用 vexpress-a9 这款开发板。vexpress-a9 是 Arm 公司自己设计的一款 4 核 Cortex-A9 开发板U-Boot、Linux Kernel 和 QEMU 对这款开发板都做了完整的支持。
解压
tar -xvf linux-5.10.tar.xz在解压后的linux-5.10目录下生成vexpress开发板子的config文件
cd linux-5.10make CROSS_COMPILEarm-linux-gnueabihf- ARCHarm vexpress_defconfig编译32位kernel
make CROSS_COMPILEarm-linux-gnueabihf- ARCHarm生成的内核镱像位于arch/arm/boot/zImage
设备树 arch/arm/boot/dts/vexpress-v2p-ca9.dtb
1.3 u-boot编译
注意更改当前路径
wget https://ftp.denx.de/pub/u-boot/u-boot-2020.10.tar.bz2解压
tar -xvf u-boot-2020.10.tar.bz解压完后可以看到 configs 目录下有针对这款开发板的配置文件。ca9x4表示cortexA9架构4核心,vexpress_ca9x4_defconfig。
ls configs/ | grep vexpress编译
make vexpress_ca9x4_defconfigmake CROSS_COMPILEarm-linux-gnueabihf- all编译时可能会出现提示Your GCC is older than 6.0 and is not supported解决方式如下
更改uboot的源码/arch/arm/config.mk
# Only test once
ifeq ($(CONFIG_$(SPL_)SYS_THUMB_BUILD),y)
#archprepare: checkthumb checkgcc6
archprepare: checkthumb checkthumb:if test $(call cc-name) gcc -a \$(call cc-version) -lt 0404; then \echo -n *** Your GCC does not produce working ; \echo binaries in THUMB mode.; \echo *** Your board is configured for THUMB mode.; \false; \fi
#else
#archprepare: checkgcc6
endif#checkgcc6:
# if test $(call cc-name) gcc -a \
# $(call cc-version) -lt 0600; then \
# echo *** Your GCC is older than 6.0 and is not supported; \
# false; \
# fi最终编译生成 elf 格式的可执行文件 u-boot 和纯二进制文件u-boot.bin其中 QEMU 可以启动的为 elf 格式的可执行文件 u-boot 1.4 制作根文件系统-busybox
根文件系统放在哪里
其实依赖于每个开发板支持的存储设备可以放到Nor Flash上也可以放到SD卡甚至外部磁盘上。最关键的一点是你要清楚知道开发板有什么存储设备。本次使用SD卡做为存储空间文件格式为ext3格式。
①下载、编译和安装busybox注意更改当前路径 链接busybox - BusyBox: The Swiss Army Knife of Embedded Linux 版本busybox-1_30_0 解压并进入该目录下 tar xjvf busybox-1_30_0.tar.bz2cd busybox-1_30_0因为是配置arm环境交叉编译到arm上运行 需要修改Makefile: vim Makefile修改成这样 编译安装 make menuconfig 执行上述指令会出现如下界面点击Settings-再设置静态编译 编译 make -j6编译完成后检查成功 ls -l busybox安装在busybox-1_30_0/_install目录下安装 make install安装完成后会形成_install目录 ②形成根目录结构 在Ubuntu主机环境下形成目录结构里面存放的文件和目录与单板上运行所需要的目录结构完全一样然后再打包成镜像在开发板看来就是SD卡这个临时的目录结构称为根目录。 首先创建rootfs目录根目录根文件系统内的文件全部放到这里 mkdir -p rootfs/{dev,etc/init.d,lib}把busybox中的文件复制到rootfs根目录下主要是一些基本的命令 sudo cp busybox-1_30_0/_install/* -r rootfs/把交叉编译工具链中的库文件复制到rootfs根目录的lib文件夹下 sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/创建4个tty端终设备 sudo mknod rootfs/dev/tty1 c 4 1
sudo mknod rootfs/dev/tty2 c 4 2
sudo mknod rootfs/dev/tty3 c 4 3
sudo mknod rootfs/dev/tty4 c 4 4③制作根文件系统镜像 根文件系统镜像就相当于一个硬盘就是把上面rootfs根目录中的所有文件复制到这个硬盘中。 生成512M大小的镜像 dd if/dev/zero ofa9rootfs.ext3 bs1M count32格式化成ext3文件系统 mkfs.ext3 a9rootfs.ext3挂载将文件拷贝到镜像中 sudo mkdir tmpfssudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loopsudo cp -r rootfs/* tmpfs/sudo umount tmpfs2、启动qemuarm
目录结构 启动qemuarm环境
qemu-system-arm -M vexpress-a9 -m 512M -kernel linux-5.10/arch/arm/boot/zImage -dtb linux-5.10/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append root/dev/mmcblk0 consolettyAMA0 -sd a9rootfs.ext3启动完成 退出qemuCtrlA 松开后按 X 退出qemu。
关于qemu启动ARM虚拟机运行指令解析
qemu-system-arm #qemu主要配置
-M vexpress-a9 #模拟vexpress-a9单板
-m 512M #内存配置
-kernel linux-5.10/arch/arm/boot/zImage #内核路径
-dtb linux-5.10/arch/arm/boot/dts/vexpress-v2p-ca9.dtb #设备树路径
-nographic #不使用图形化界面只使用串口
-append root/dev/mmcblk0 consolettyAMA0 #内核启动参数(vexpress单板运行)
-sd a9rootfs.ext3 #SD卡印像3、helloworld测试
在Ubuntu任意一个目录编写HelloWorld可执行程序hello.c
vim hello.c#include stdio.h
int main()
{ printf(HelloWorld! \n);return 0;
}交叉编译hello.c得到arm的可执行程序hello
arm-linux-gnueabi-gcc hello.c -g -o hello.exe #带上-g选项编译debug版本通过file指令可查看hello.exe程序
file hello.exe把hello可执行程序复制到磁盘镜像disk.img中
挂载路径/home/kevin/kernel510
sudo mount -o loop ./a9rootfs.ext3 tmpfs/ 复制文件注意路径
sudo cp /home/kevin/hello.exe /home/kevin/kernel510/tmpfs/卸载
sudo umount tmpfs再次启动虚拟机
qemu-system-arm -M vexpress-a9 -m 512M -kernel linux-5.10/arch/arm/boot/zImage -dtb linux-5.10/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append root/dev/mmcblk0 consolettyAMA0 -sd a9rootfs.ext3 -S -gdb tcp::8080执行hello.exe程序即可看到输出结果