qemu模拟arm64一直卡住不动

  • 问题描述
    • 运行qemu-system-aarch64后一直卡在那里不动,终端无信息输出
    • 做过的尝试
  • 解决方法
    • 发现编译内核方法有问题
    • 更新qemu到3.0解决问题
  • 其它

问题描述

运行qemu-system-aarch64后一直卡在那里不动,终端无信息输出

PC机:Ubuntu 16.04系统
Kernel镜像:下载Kernel 4.9.4源码,自行编译arm64镜像
qemu-system-aarch64版本:Ubuntu系统自带,应为2.5版本
运行命令:qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine type=virt -nographic -m 2048 -smp 2 -kernel arch/arm64/boot/Image --append “rdinit=/linuxrc console=ttyAMA0”
大部分操作参考《奔跑吧Linux内核》,之前有尝试运行32位arm虚拟机,可以成功运行。

做过的尝试

起初怀疑命令行参数有问题,有尝试过修改ram大小,cpu型号等,都没有效果。
后来把kernel 4.9.4改成4.0,下载源码编译后还是有问题;然后就直接使用奔跑吧的github上的4.0,还是有问题。
在微信群里求教,也没有得到有用的答复。
最后怀疑是笔记本配置太低,带不起来,这个问题就此搁置了一段时间。
这个问题最麻烦的是没有输出,也不知道该如何调试。

解决方法

发现编译内核方法有问题

今天心血来潮,换了个配置较高的台式机,重装个ubuntu 16.04系统,想再跑一跑,看是否真和电脑配置有关系。实验下来,发现也不行。所以,和电脑配置没有关系。
在实验过程中,发现网上有人说一种编译方法,和我之前的操作不太一样,引起了我的关注。使用这个方法在4.0内核上就可以运行了。
我之前的编译内核方法:
1.下载内核源码(https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/)
2.解压tar.gz文件
3.把编译好的64位busybox拷贝到代码中,也就是把_install_arm64目录拷贝到代码根目录下
4.创建文件节点
$ cd _install_arm64/dev
$ sudo mknod console c 5 1
$ sudo mknod null c 1 3
5. 配置环境变量
$ export ARCH=arm64
$ export CROSS_COMPILE=aarch64-linux-gnu-
6. make menuconfig (照书中所述,把_install_arm64配置到Initramfs source file中)
7. make -j4
新的编译方式中,我会在6之前先执行make defconfig,然后再make menuconfig
(请原谅一个新手吧:连linux如何编译也没有搞清楚)
虽然只增加了make defconfig,我发现两点变化:一是编译时间特别短,5分钟基本就已经编译完成,而我之前要编译半小时以上;对于kernel 4.0,qemu可以运行起来了,不过kernel 4.9还是会卡在那里不动。

更新qemu到3.0解决问题

既然发现问题与kernel版本有关,我又试了几个版本,发现kernel 4.4也可以,4.6就不行。这么无头绪地试了试。后来突然想到会不会和qemu有关,所以去官网上下载、编译和安装最新的3.0版本,果然解决问题。
下载网页:https://www.qemu.org/download/
解压后的编译命令:
$ ./configure --target-list=aarch64-softmmu
$ make
$ sudo make install
其中,configure时遇到了这个错误
ERROR: glib-2.40 gthread-2.0 is required to compile QEMU
解决方法:
$ sudo apt-get install libglib2.0-dev
重新运行又遇到这个错误
ERROR: pixman >= 0.21.8 not present.
Please install the pixman devel package.
解决方法:
$ sudo apt-get install libpixman-1-dev

make完成后,会生成bin文件,可以看下新的版本号
$ ./aarch64-softmmu/qemu-system-aarch64 --version
QEMU emulator version 3.0.0
Copyright © 2003-2017 Fabrice Bellard and the QEMU Project developers

sudo make install之后,需要重新打开个终端,就能看到版本已经是3.0。
./qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine type=virt -nographic -m 2048 -smp 2 -kernel arch/arm64/boot/Image --append “rdinit=/linuxrc console=ttyAMA0”

其它

在老版本的kernel中,碰到输出的日志前面没有时间信息的问题,是因为默认没有打开一个配置:
Kernel hacking —>
printk and dmesg options —>
Show timing information on printks

额,最后贴你行成功运行后输出的日志吧。
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 4.9.4 (yutao@yutao) (gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) ) #1 SMP PREEMPT Wed Oct 3 23:06:09 CST 2018
[ 0.000000] Boot CPU: AArch64 Processor [411fd070]
[ 0.000000] efi: Getting EFI parameters from FDT:
[ 0.000000] efi: UEFI not found.
[ 0.000000] cma: Reserved 16 MiB at 0x00000000bf000000
[ 0.000000] psci: probing for conduit method from DT.
[ 0.000000] psci: PSCIv0.2 detected in firmware.
[ 0.000000] psci: Using standard PSCI v0.2 function IDs
[ 0.000000] psci: Trusted OS migration not required
[ 0.000000] percpu: Embedded 21 pages/cpu @ffff80007efbf000 s47896 r8192 d29928 u86016
[ 0.000000] Detected PIPT I-cache on CPU0
[ 0.000000] CPU features: enabling workaround for ARM erratum 832075
[ 0.000000] CPU features: enabling workaround for ARM erratum 834220
[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 516096
[ 0.000000] Kernel command line: rdinit=/linuxrc console=ttyAMA0
[ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
[ 0.000000] Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes)
[ 0.000000] Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes)
[ 0.000000] Memory: 2028240K/2097152K available (8380K kernel code, 858K rwdata, 3644K rodata, 2112K init, 280K bss, 52528K reserved, 16384K cma-reserved)
[ 0.000000] Virtual kernel memory layout:
[ 0.000000] modules : 0xffff000000000000 - 0xffff000008000000 ( 128 MB)
[ 0.000000] vmalloc : 0xffff000008000000 - 0xffff7dffbfff0000 (129022 GB)
[ 0.000000] .text : 0xffff000008080000 - 0xffff0000088b0000 ( 8384 KB)
[ 0.000000] .rodata : 0xffff0000088b0000 - 0xffff000008c50000 ( 3712 KB)
[ 0.000000] .init : 0xffff000008c50000 - 0xffff000008e60000 ( 2112 KB)
[ 0.000000] .data : 0xffff000008e60000 - 0xffff000008f36a00 ( 859 KB)
[ 0.000000] .bss : 0xffff000008f36a00 - 0xffff000008f7cc3c ( 281 KB)
[ 0.000000] fixed : 0xffff7dfffe7fd000 - 0xffff7dfffec00000 ( 4108 KB)
[ 0.000000] PCI I/O : 0xffff7dfffee00000 - 0xffff7dffffe00000 ( 16 MB)
[ 0.000000] vmemmap : 0xffff7e0000000000 - 0xffff800000000000 ( 2048 GB maximum)
[ 0.000000] 0xffff7e0000000000 - 0xffff7e0002000000 ( 32 MB actual)
[ 0.000000] memory : 0xffff800000000000 - 0xffff800080000000 ( 2048 MB)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1

qemu模拟arm64一直卡住不动相关推荐

  1. Ubuntu 上使用 qemu 模拟 Arm64 linux

    Ubuntu 上用 qemu 模拟 Arm64 linux 环境配置 1. 安装Arm64交叉编译工具链 2. 安装qemu 下载源码包 编译 编译Linux kernel 编译qemu 编译busy ...

  2. 使用 QEMU/KVM 模拟 ARM64

    使用 QEMU/KVM 模拟 ARM64 下载arm64专用BIOS,用于启动 EFI (可扩展固件接口) 内核 https://releases.linaro.org/components/kern ...

  3. 用QEMU模拟调试裸机ARM64汇编,支持gdb单步调试

    完全是方便自己查询,做个记录. 树莓派4的SOC是ARM64, cortex A72,支持最新的ARMv8指令集,且有众多的开源资料,适合用来学习ARM64汇编,其他芯片大同小异,遇到需要,再进一步研 ...

  4. QEMU搭建arm64 Linux调试环境

    https://zhuanlan.zhihu.com/p/345232459 简述 本文记录了在ubuntu20.04上,使用QEMU搭建arm64 的Linux开发调试环境.可以方便得使用gdb调试 ...

  5. ubuntu虚拟机中使用QEMU搭建ARM64环境

    软件环境: 平台:ubuntu20.04 kernel版本:linux 4.14.221 qemu版本:6.2.92 qemu模拟环境:ARM64 gcc version :9.4.0 交叉编译工具链 ...

  6. QEMU启动ARM64 Linux内核

    目录 前言 前置知识 virt开发板 ARM处理器家族简介 安装qemu-system-aarch64 安装交叉编译工具 交叉编译ARM64 Linux内核 交叉编译ARM64 Busybox 使用b ...

  7. 在qemu模拟的aarch32上使用kgtp

    KGTP 介绍 KGTP 是一个能在产品系统上实时分析 Linux 内核和应用程序(包括 Android)问题的全面动态跟踪器. 使用 KGTP 不需要 在 Linux 内核上打 PATCH 或者重新 ...

  8. 下qemu模拟arm9_QEMU搭建树莓派环境

    0x01 最近树莓派被同学借去做毕设了,没有其他ARM平台供我研究,无奈之下只好尝试使用QEMU模拟raspbian,搭建过程比较繁琐,网上的教程有很多坑都没有指出,所以有了此文,给同样有兴趣做IoT ...

  9. qemu模拟armlinux执行目标文件系统的可执行文件

    --------------------以下是2020年更新的内容 不需要自己编译qemu,直接apt安装一个静态编译版本的qemu apt install qemu-user-static进入解包的 ...

最新文章

  1. laravel的日志服务
  2. apt-get update,apt-get upgrade,apt-get dist-upgrade的作用
  3. 神策数据王灼洲:方法论 + 实践,全面解析数据采集方案,必看!
  4. 互联网1分钟 |1119
  5. Java如何加载类的呢?
  6. SqlServer数据库同步方案详解
  7. 「leetcode」513.找树左下角的值(详解)
  8. docker安装mysql并配置文件_Docker安装mysql,并自定义my.cnf
  9. 如何通过Geth、Node.js和UNIX/PHP访问以太坊节点 1
  10. WPS 2019使用技巧及WPS2019政府版最全合集
  11. 数字信号处理教程第五版答案
  12. python金融反欺诈-项目实战
  13. word方框中(□)打钩(√)、打叉(x)
  14. httpclient使用代理ip
  15. 开源软件之lftp的使用
  16. 谷歌语音合成_如何修改Google语音合成语音
  17. 易飞8无销售报价的BOM成本参考
  18. java设计九宫格拼图软件哪个好用_抖音超火的朋友圈九宫格用什么软件做的? 抖音九宫格图片制作教程...
  19. PDPS软件:机器人点焊伺服焊枪大开、小开、关闭状态切换设置
  20. html的鼠标手怎么去掉,flex htmlText属性和Label设置鼠标手形状

热门文章

  1. 寻找5个数的中位数,只需6次比较的,思路与实现
  2. scutcode123. bx和妹子的游戏
  3. java mysql 工具类_Java SE 之 数据库操作工具类(DBUtil)设计
  4. linux系统能够ping通却无法访问,win7与linux虚拟机可互相ping通,却无法访问linux下的tomcat服务...
  5. swift编程语言中文版
  6. 智能手表UX开发的4条基本经验
  7. 漫画衣服褶皱怎么画?怎样才能画好漫画衣服褶皱?
  8. 我的steam VR 定位器无法定位喽
  9. js中通过split函数分割字符串成数组
  10. yandex浏览器_在浏览器中制作蛇游戏:Yandex的实践