当前位置: 首页 > news >正文

一键编译并启动一个 ARM Linux qemu 虚拟机

需要事先自己编译 qemu-system-arm 可执行文件;

1,编译创建ARM 虚拟机

#!/usr/bin/bash sudo lssudo apt-get install gcc-arm-linux-gnueabi#wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.10.tar.gztar zxf linux-kernel-v5.10.tar.gz cd linux-5.10/make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfigmake CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm -jcd ../wget https://ftp.denx.de/pub/u-boot/u-boot-2020.10.tar.bz2tar xf u-boot-2020.10.tar.bz2 cd u-boot-2020.10/make vexpress_ca9x4_defconfigmake CROSS_COMPILE=arm-linux-gnueabi- allcd ../wget https://busybox.net/downloads/busybox-1.36.0.tar.bz2tar xf busybox-1.36.0.tar.bz2 cd busybox-1.36.0/make defconfigmake CROSS_COMPILE=arm-linux-gnueabi-make install CROSS_COMPILE=arm-linux-gnueabi-cd ../mkdir -p rootfs/{dev,etc/init.d,lib,proc,sys,root,home}sudo cp busybox-1.36.0/_install/* -r rootfs/sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/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 4dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=1024mkfs.ext3 a9rootfs.ext3sudo mkdir tmpfs && sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop && sudo cp -r rootfs/*  tmpfs/ && sudo umount tmpfs/home/hipper/ex_systemc_qemu/qemu-bin-v9-arm/bin/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  console=ttyAMA0" -sd a9rootfs.ext3

启动后的虚拟机:

2, 编译新的可执行文件

vim ../ex/hello.c

#include <stdio.h>int main()
{printf("Hello Test Kernel ll\n");return 0;}

3,在虚拟机中添加新的可执行文件

cp ../ex/hello    busybox-1.36.0/_install/bin/

然后执行 update_exe_arm.sh:

rm -rf a9rootfs.ext3sudo rm rootfs/* -rfmkdir -p rootfs/{dev,etc/init.d,lib,proc,sys,root,home}sudo cp busybox-1.36.0/_install/* -r rootfs/sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/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 4dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=1024mkfs.ext3 a9rootfs.ext3rm -rf tmpfs/sudo mkdir tmpfs && sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop && sudo cp -r rootfs/*  tmpfs/ && sudo umount tmpfs/home/hipper/ex_systemc_qemu/qemu-bin-v9-arm/bin/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  console=ttyAMA0" -sd a9rootfs.ext3

虚拟机中执行hello;

http://www.lryc.cn/news/413060.html

相关文章:

  • KubeVirt虚拟机存储及网络卸载加速解决方案
  • JVM—对象已死?
  • 【前端面试3+1】20 css三栏布局6种实现方式、多行文本溢出怎么实现、token过期了怎么处理、【二叉树的中序遍历】
  • 【C++】vector介绍以及模拟实现(超级详细<=>源码并存)
  • 【Redis 进阶】主从复制(重点理解流程和原理)
  • Git常用命
  • 强化学习时序差分算法之Q-learning算法——以悬崖漫步环境为例
  • 111推流111
  • 刷题——数组中只出现一次的两个数字
  • 《剖析程序员面试“八股文”:助力、阻力还是噱头?》
  • Redis过期key的删除策略
  • 软件管理
  • 【2024】Datawhale AI夏令营 Task3笔记——Baseline2部分代码解读及初步上分思路
  • 软件测试——测试分类(超超超齐全版)
  • 深入解析 Go 语言 GMP 模型:并发编程的核心机制
  • PHP中如何处理字符串
  • windows内存泄漏检查汇总
  • yolo格式数据集之空中及地面拍摄道路病害检测7种数据集已划分好|可以直接使用|yolov5|v6|v7|v8|v9|v10通用
  • [Meachines] [Easy] Mirai Raspberry树莓派默认用户登录+USB挂载文件读取
  • 从零开始安装Jupyter Notebook和Jupyter Lab图文教程
  • 数据库魔法:SQL Server中自定义分区函数的奥秘
  • 网页禁止移除水印
  • Node Red 与axios简易测试环境的搭建
  • 测试面试宝典(四十三)—— 接口测试流程
  • arkhamintelligence 请求头加密 X-Payload 完整逆向分析+自动化解决方案
  • Vue Router哈希模式和历史模式
  • Springboot实战:AI大模型+亮数据代理助力短视频时代
  • Postman请求问题 connect ECONNREFUSED 127.0.0.1:80解决方法
  • 维护SQL Server数据库索引:保持性能的黄金法则
  • nvm管理node版本问题处理集合