Ubuntu平台采用Qemu搭建ARM虚拟机环境

2023-05-16

1. Busybox编译

下载代码:

查看Busybox Source Control网站,有代码控制说明,我们采用git clone下载代码:BusyBox

git clone git://busybox.net/busybox.git

编译Busybox

在INSTALL文件中有编译说明,根据说明进行编译:

The BusyBox build process is similar to the Linux kernel build:

  make menuconfig     # This creates a file called ".config"
  make                # This creates the "busybox" executable
  make install        # or make CONFIG_PREFIX=/path/from/root install 

The full list of configuration and install options is available by typing: 

  make help

  • make menuconfig编译环境配置,配置对应的交叉编译环境和安装路径等

配置交叉编译工具前缀,如arm64平台,需要在Settings栏配置 Cross compiler prefix(为aarch64-linux-gnu-)

  • make编译
  • make install安装编译结果

2. Rootfs生成

使用mkfs.sh脚本如下:

#!/bin/bash
sudo rm -rf rootfs
sudo rm -rf tmpfs
sudo rm -rf ramdisk*
sudo mkdir rootfs
sudo cp /media/hugo/kston/source/busybox-1.30.1/_install/*  rootfs/ -raf
sudo mkdir -p rootfs/proc/
sudo mkdir -p rootfs/sys/
sudo mkdir -p rootfs/tmp/
sudo mkdir -p rootfs/root/
sudo mkdir -p rootfs/var/
sudo mkdir -p rootfs/mnt/
sudo cp initfs/etc rootfs/ -arf
sudo cp initfs/sbin rootfs/ -arf
sudo cp initfs/bin rootfs/ -arf
sudo mkdir -p rootfs/lib
sudo cp -arf /usr/aarch64-linux-gnu/lib/* rootfs/lib/
sudo rm rootfs/lib/*.a
sudo /usr/bin/aarch64-linux-gnu-strip rootfs/lib/*
sudo cp initfs/lib rootfs/ -arf
sudo mkdir -p rootfs/dev/
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
sudo mknod rootfs/dev/console c 5 1
sudo mknod rootfs/dev/ram0 b 1 0
sudo mknod rootfs/dev/null c 1 3
sudo dd if=/dev/zero of=ramdisk bs=1M count=16
sudo mkfs.ext4 -F ramdisk
sudo mkdir -p tmpfs
sudo mount -t ext4 ramdisk ./tmpfs/  -o loop
sudo cp -raf rootfs/*  tmpfs/
sudo umount tmpfs
sudo gzip --best -c ramdisk > ramdisk.gz
sudo mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img

fstab文件

cgroup /sys/fs/cgroup/ nodev 0 0

rcS文件

#!/bin/sh
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount -t tmpfs tmpfs /sys/fs/cgroup/


mkdir /sys/fs/cgroup/blkio
mkdir /sys/fs/cgroup/blk
mkdir /sys/fs/cgroup/cpu,cpuacct
mkdir /sys/fs/cgroup/cpuset
mkdir /sys/fs/cgroup/devices
mkdir /sys/fs/cgroup/freezer
mkdir /sys/fs/cgroup/hugetlb
mkdir /sys/fs/cgroup/memory
mkdir /sys/fs/cgroup/net_cls,net_prio
mkdir /sys/fs/cgroup/perf_event
mkdir /sys/fs/cgroup/pids
mkdir /sys/fs/cgroup/rama
mkdir /sys/fs/cgroup/rdma
mkdir /sys/fs/cgroup/systemd
mkdir /sys/fs/cgroup/unified

cd /sys/fs/cgroup/
ln -s cpu,cpuacct cpu
ln -s cpu,cpuacct cpuacct
ln -s net_cls,net_prio net_cls
ln -s net_cls,net_prio net_prio

/bin/sh
  • 注意这里rcS是内核调用的用户空间初始化脚本,需要在最后执行/bin/sh进入shell才可以登录到shell界面进行命令行操作 
  • rcS需要有可执行权限才能执行

3. 编译内核

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig menuconfig Image

start_vm.sh

#!/bin/sh

qemu-system-aarch64 \
    -M  virt \
    -cpu cortex-a53 \
    -smp 2 \
    -m 256M \
    -kernel /media/hugo/kston/source/linux-stable/arch/arm64/boot/Image \
    -append "root=/dev/ram0 rw rootfstype=ext4 console=ttyAMA0 init=/linuxrc ignore_loglevel" \
    -initrd /media/hugo/kston/source/tools/fs/ramdisk.img \
    -nographic \
    -device e1000,netdev=dev0,mac='00:10:4c:00:22:ee' \
    -netdev tap,ifname=tap0,id=dev0,script=no,downscript=no

[    3.692809] VFS: Cannot open root device "ram0" or unknown-block(0,0): error -6

[    3.681683] uart-pl011 9000000.pl011: no DMA platform data
[    3.692809] VFS: Cannot open root device "ram0" or unknown-block(0,0): error -6
[    3.698246] Please append a correct "root=" boot option; here are the available partitions:
[    3.700281] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[    3.702569] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.16.8 #5
[    3.703885] Hardware name: linux,dummy-virt (DT)
[    3.707895] Call trace:
[    3.708541]  dump_backtrace+0x0/0x1c0
[    3.709452]  show_stack+0x14/0x20
[    3.710532]  dump_stack+0x9c/0xbc
[    3.711323]  panic+0x130/0x2a0
[    3.712097]  mount_block_root+0x1a0/0x28c
[    3.717135]  mount_root+0x130/0x164
[    3.719369]  prepare_namespace+0x138/0x180
[    3.719975]  kernel_init_freeable+0x208/0x22c
[    3.720353]  kernel_init+0x10/0x108
[    3.720671]  ret_from_fork+0x10/0x18
[    3.721302] SMP: stopping secondary CPUs
[    3.725707] Kernel Offset: disabled
[    3.733074] CPU features: 0x0802004
[    3.733925] Memory Limit: none
[    3.734924] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
 

  • 是因为在内核配置不对,没有配置支持ram blockdevice,打开 CONFIG_BLK_DEV_RAM
  • 并且配置 CONFIG_BLK_DEV_RAM_SIZE 大小到较大,比如 40960

出现下面问题,是因为libssl-dev没有安装,后来安装libssl-dev有问题,可能是package依赖的问题

scripts/extract-cert.c:21:10: fatal error: openssl/bio.h: No such file or directory

安装libssl-dev出现问题:

The following packages have unmet dependencies:
 libssl1.0-dev : Depends: libssl1.0.0 (= 1.0.2n-1ubuntu5) but 1.0.2n-1ubuntu5.1 is to be installed
E: Unable to correct problems, you have held broken packages.

然后卸载软件包重新安装就好了:

sudo apt remove libssl1.0.0

sudo apt install libssl1.0-dev

然后就可以编译通过了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu平台采用Qemu搭建ARM虚拟机环境 的相关文章

  • GitHub 简介

    用详细的图文对GitHub进行简单的介绍 git是一个版本控制工具 xff0c github是一个用git做版本控制的项目托管平台 主页介绍 xff1a overview xff1a 总览 相当于个人主页 repositories xff1
  • Markdown 编辑器推荐和常用语法介绍

    Markdown 是非常好用的文档编写方式 下面是我的 Markdown 学习总结 不求详尽 xff0c 只求简明 编辑器 xff1a 我目前使用的 Markdown 编辑器是 Joplin xff0c 感觉挺好用 我对编辑器的需求是 xf
  • 使用 Hexo 在 Github 上建博客

    先确认 git 与 npm 已经安装 xff0c 在终端输入以下命令 git version npm version 安装 hexo xff0c 在终端输入 npm install hexo cli g 安装过程中如果报错 解决方法 xff
  • ping命令的过程

    ping命令的过程 1 ping是什么 xff1f PING Packet Internet Groper xff0c 因特网包探索器 xff0c 用于测试网络连通性的程序 Ping发送一个ICMP Internet Control Mes
  • Hexo 更换主题

    更换 Hexo 主题非常容易 xff0c 只要在 themes 文件夹内 xff0c 新增一个任意名称的文件夹 xff0c 并修改 config yml 内的 theme 设定 xff0c 即可切换主题 具体步骤 xff1a 1 安装主题
  • Python 爬虫零基础教程(0):简介及准备

    其他的教程往往从语法开始 xff0c 而我们直接开始爬虫 xff0c 语法等知识边做边学 这第0篇我们简单介绍下爬虫和编程工具 爬虫是什么 爬虫是自动浏览 保存网页内容的程序或脚本 爬虫不同于黑客 xff0c 爬虫爬取的是允许访问的内容 工
  • 如何解决Unable to parse template "Interface"Error Message;

    Unable to parse template Interface Error Message This Template did not Produce a Java Class or an interface关于这个错误 xff0c
  • inflate函数使用总结

    inflate 两个参数和三个参数的区别 以前使用没有关注过 xff0c 因为觉得没报bug就行了 xff0c 两个三个参数无所谓 xff0c 经过导师提醒 xff0c 决定好好看看源码和相关知识 xff0c 总觉一下区别 xff0c 以免
  • 除了csdn网站打不开,一直刷新等待没反应,其他网站都能正常访问

    DNS错误 自动获取DNS服务器地址 清除DNS缓存信息 ipconfig span class token operator span flushdns 重置winsock 目录设置 netsh winsock reset
  • org.slf4j用法

    org slf4j用法 Scala 1 创建Logger对象 private val logger Logger 61 LoggerFactory getLogger classOf HttpBmlClient 2 打印错误信息 同时抛出异
  • 安装图形界面、VNCserver

    centos7 安装图形界面 xff1a 第一步 xff1a 安装Gnome包 在命令行下 输入下面的命令来安装Gnome包 yumgroupinstall 34 GNOMEDesktop 34 34 GraphicalAdministra
  • MySQL全量、增量备份与恢复的简单方法

    本文主要给大家介绍MySQL全量 增量备份与恢复的简单方法 xff0c 文章内容都是笔者用心摘选和编辑的 xff0c 具有一定的针对性 xff0c 对大家的参考意义还是比较大的 xff0c 下面跟笔者一起了解下MySQL全量 增量备份与恢复
  • windows安装zabbix代理

    一 关闭windows防火墙或者开通10050和10051端口 直接windows关闭防火墙或者在防火墙中放行10050和10051 二 xff0e 下载 安装并修改windows代理 1 下载zabbix agentd包 官网下载地址 x
  • android8.0 Fingerprint 指纹输错5次后亮屏显示错误信息

    当有指纹解锁时 xff0c 会执行AuthenticationClient java gt onAuthenticated 一直在监听解锁行为 64 Override public boolean onAuthenticated int f
  • secureCRT 抓取串口数据

    language 61 34 VBScript 34 interface 61 34 1 0 34 Dim outputFile fout Dim outputPath Dim user outputPath 61 34 D out txt
  • 2022年编程语言热度排行榜来啦,快来看看你学习的语言排第几

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 前言 一直以来 xff0c 编程语言都是程序员非常关注的话题 年末将至 xff0c 是否会有程序员发出疑问 2022 年行业需求最大的编程
  • LibEvent-Demo

    libevent test cpp 定义控制台应用程序的入口点 include 34 stdafx h 34 pragma comment lib 34 ws2 32 lib 34 pragma comment lib 34 wsock32
  • 【数据挖掘】DBSCAN聚类算法(python实现)

    一 python代码 39 39 39 Author Vici date 2020 5 14 39 39 39 import math 39 39 39 Point类 xff0c 记录坐标x xff0c y和点的名字id 39 39 39
  • ubuntu中安装rpm格式的软件包

    ubuntu的软件包格式是deb xff0c 如果要安装rpm的包 xff0c 则要先用alien把rpm转换成deb zhhLinux联盟 sudo apt get install alien alien默认没有安装 xff0c 所以首先
  • SQLite3在windows下的配置(链接VC++或者VS)

    一 SQLite3 简介 SQLite3 是一个开源免费的嵌入式关系数据库 xff0c 它在 2000 年由 D Richard Hipp 发布 xff0c 它不像大型数据库管理系统 xff0c 占用系统大量资源 SQLite3 是用 C

随机推荐

  • 电脑正常联网,提示无法登录微信

    事故起因 xff1a 因为工作需要安装一款软件 xff0c 安装途中提示有风险直接忽略了该风险 后期卸掉该软件 xff0c 然后无法登录微信 QQ easyconnect等软件 xff0c 但是浏览器可以正常访问 登录微信出现的界面是 xf
  • Ubuntu-GNOME 16.04 LTS更换主题

    1 安装gnome shell扩展插件 进入https extensions gnome org 先将gnome安装插件安装到火狐浏览器上 xff0c 而后查找插件 User Themes by fmuellner 如果无法选择比如题头报错
  • 图片服务器搭建 ftp上传http协议读取图片

    怎样在Win7系统中搭建Web服务器 详见百度搭建教程web服务器搭建 web服务器搭建 搭建好服务器以后配置 controller层 span class hljs javadoc 上传头像 span span class hljs an
  • SVM&TSVM&LSA(I)→PLSA(I)→LDA→HDP

    SVM amp TSVM amp LSA I PLSA I LDA HDP SVM xff08 用于监督学习 xff09 参考文章 xff1a SVM xff08 支持向量机 xff09 详解 通俗来讲 xff0c SVM是一种二类分类模型
  • adb源码分析

    ADB是Android debug bridge的缩写 xff0c 它使用PC机可以通过USB或网络与android设备通讯 adb的源码位于system core adb目录下 xff0c 先来看下编译脚本Android mk xff1a
  • android源码编译笔记--踩坑

    错误 xff1a ninja build stopped subcommand failed 解决 xff1a 打开 prebuilts sdk tools jack admin 找到 JACK SERVER COMMAND 61 34 j
  • 这个交互也太炸裂了趴

    动画是为一个app创造出色用户体验的重要组成部分 它的关键挑战是向用户解释应用程序的逻辑 xff0c 但是常见的错误是鲁莽地使用动画 xff0c 从而否定了改善用户体验的整个观点 为了使应用出色而不仅仅是出色或平庸 xff0c 动画必须正确
  • 在ES6的语法中如何给数组去重

    这是从数组中筛选出重复项并仅返回唯一值的三种方法 我最喜欢使用Set xff0c 因为它最短 xff0c 最简单 xff1b set Set是ES6中引入的新数据对象 因为Set仅允许您存储唯一值 传递数组时 xff0c 它将删除所有重复值
  • 笔记啊啊啊啊

    判断某个字符串中是否其他某些字符串 span class token keyword const span deviceName span class token operator 61 span e span class token pu
  • android 高德地图之poi搜索功能的实现

    二话不多说 先看效果 这个功能我是用Fragmentdialog里面做的 也遇到不少坑 第一 就是设置背景的drawable为纯白色导致键盘弹出的时候 recyclerview的布局被顶上去导致出现白色布局 有点扎眼 最后改成了设置为和背景
  • android之 h5调用系统相机和相册并显示

    先上html界面的代码 放在assets里面就可以了 我也不太会html 所以随便写了点 span class hljs doctype lt doctype html gt span span class hljs tag lt span
  • 深坑之Webview,解决H5调用android相机拍照和录像

    最近在开发过程中遇到一个问题 主要是调用第三方的实名认证 需要拍照和录像 办过支付宝大宝卡和腾讯的大王卡的都知道这玩意 办卡的时候就需要进行实名认证 人脸识别 本来第三方平台 xxx流量公司 说的是直接用WebView加载这个H5界面就完事
  • rxjava2定时器每秒请求一次数据

    项目进行的过程中有个需求是在20秒内每秒请求一次数据 xff0c 请求成功的json中有个字段 xff0c 如果有这个字段代表请求成功 xff0c 如果没有则继续请求 xff0c 直到20秒结束 xff0c 20秒结束则失败 本来最开始采用
  • Flutter导航栏实现

    学了几天的flutter 似乎有点感觉了 今天来上手搞一个导航栏 实现类似android里面的ViewPager 43 Fragment的效果 二话不说直接上代码 import 39 package flutter material dar
  • SpringBoot 日志文件

    1 日志的作用2 日志怎么用3 自定义日志打印3 1 得到日志对象3 2 使用日志对象提供的方法打印日志3 3 日志格式说明 4 日志级别4 1 日志级别分类4 2 日志级别的配置 5 日志持久化6 更简单的实现自定义日志的打印6 1 准备
  • Flutter实现滑动头部折叠切换tab

    主要使用到NestedScrollView和SliverAppBar 先看效果 xff1a 代码如下 xff1a import 39 package flutter material dart 39 class ActPage extend
  • ubuntu apt-get 默认下载路径

    使用apt get install 命令时默认下载到 var cache apt archives路径下 xff0c sudo apt get clean命令可以删除该路径下的下载的deb包 例如仅下载ssh xff0c 不安装 xff1a
  • vscode 离线安装ssh

    首先打开官方插件地址 xff1a https marketplace visualstudio com VSCode 然后输入ssh 下载这两个插件 xff1a 安装这两个插件 xff1a 这样便在windows下安装成功了ssh 接下来需
  • windows BDA driver (abstract)

    AVStream is a Microsoft provided multimedia class driver that supports video only streaming and integrated audio video s
  • Ubuntu平台采用Qemu搭建ARM虚拟机环境

    1 Busybox编译 下载代码 xff1a 查看Busybox Source Control网站 xff0c 有代码控制说明 xff0c 我们采用git clone下载代码 xff1a BusyBox git clone git busy