`

用qemu虚拟ARM Linux记录

阅读更多

一、过程和感想

* 花了很长时间在qemu虚拟的ubuntu上交叉编译编译ARM版的Linux

* 参考这篇文章

http://balau82.wordpress.com/2010/03/22/compiling-linux-kernel-for-qemu-arm-emulator/

在Windows上用CodeSourcery的免费的ARM GNU/Linux工具链(不是ARM EABI)编译静态链接的test程序

* 在Cygwin上用mkcramfs创建initrd(初始化RAM盘),发现怎么都运行不了。

花了很长时间才发现原因。

原来Cygwin的mkcramfs不能更改文件模式,因为Cygwin本身就无法执行chmod +x来增加执行权限。

用Linux则不会有这种问题(不知道可不可以改内核代码让操作系统无视可执行文件的模式?)

 

20110406:补注

如果要在Windows生成initrd文件,可以使用Linux源码树usr目录下的gen_init_cpio工具,附有源代码,可以在Cygwin下用gcc编译。gen_init_cpio根据一个列表文件生成cpio文件系统镜像(在Windows下用7zip可以打开),允许插入文件、目录,也允许指定文件和目录模式(不同于Cygwin下的mkcramfs)。但cpio不同于cramfs,它没有压缩数据。

 

* 发现很多东西在我的意料之外:

1) 编译Linux内核很慢。

2) 很多奇特的设置。

3) 原来文件系统可以用工具生成的。

4) 模拟器很诡异(可以用-append传参数给操作系统内核?)

5) Linux下静态链接libc原来是可以的!

6) CodeSourcery发布的几个工具链是不同的(我一直以为是一样)

7) 内核和控制台外壳原来是分开的?

 

二、串口输出(qemu把串口内容重定向到文件,所以没有截取到hello world字样)

命令行:

"D:\java\qemu-0.9.0-arm\qemu-system-arm" -L "D:\java\qemu-0.9.0-arm" -M versatilepb -m 128M -kernel zImage -initrd root5.img -append "root=/dev/ram rdinit=/test init=/test console=ttyAMA0" -serial file:test.txt

输出:

 

 

Uncompressing Linux... done, booting the kernel.
Linux version 2.6.35 (wmt@wmt-desktop) (gcc version 4.5.1 (Sourcery G++ Lite 2010.09-51) ) #1 Wed Mar 30 21:26:15 CST 2011
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00003137
CPU: VIVT data cache, VIVT instruction cache
Machine: ARM-Versatile PB
Memory policy: ECC disabled, Data cache writeback
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 32512
Kernel command line: root=/dev/ram rdinit=/test init=/test console=ttyAMA0
PID hash table entries: 512 (order: -1, 2048 bytes)
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 128MB = 128MB total
Memory: 126404k/126404k available, 4668k reserved, 0K highmem
Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
DMA : 0xffc00000 - 0xffe00000 ( 2 MB)
vmalloc : 0xc8800000 - 0xd8000000 ( 248 MB)
lowmem : 0xc0000000 - 0xc8000000 ( 128 MB)
modules : 0xbf000000 - 0xc0000000 ( 16 MB)
.init : 0xc0008000 - 0xc0022000 ( 104 kB)
.text : 0xc0022000 - 0xc02cd000 (2732 kB)
.data : 0xc02e6000 - 0xc03017c0 ( 110 kB)
Hierarchical RCU implementation.
Verbose stalled-CPUs detection is disabled.
NR_IRQS:192
VIC @f1140000: id 0x00041190, vendor 0x41
Console: colour dummy device 80x30
Calibrating delay loop... 838.86 BogoMIPS (lpj=4194304)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
Serial: AMBA PL011 UART driver
dev:f1: ttyAMA0 at MMIO 0x101f1000 (irq = 12) is a AMBA/PL011
console [ttyAMA0] enabled
dev:f2: ttyAMA1 at MMIO 0x101f2000 (irq = 13) is a AMBA/PL011
dev:f3: ttyAMA2 at MMIO 0x101f3000 (irq = 14) is a AMBA/PL011
fpga:09: ttyAMA3 at MMIO 0x10009000 (irq = 38) is a AMBA/PL011
bio: create slab <bio-0> at 0
Advanced Linux Sound Architecture Driver Version 1.0.23.
Switching to clocksource timer3
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 4096 (order: 3, 32768 bytes)
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP reno registered
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
Trying to unpack rootfs image as initramfs...
rootfs image is not initramfs (junk in compressed archive); looks like an initrd
Freeing initrd memory: 340K
NetWinder Floating Point Emulator V0.97 (double precision)
Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
JFFS2 version 2.2. (NAND) ? 2001-2006 Red Hat, Inc.
ROMFS MTD (C) 2007 Red Hat, Inc.
msgmni has been set to 247
Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
CLCD: unknown LCD panel ID 0x00001000, using VGA
CLCD: Versatile hardware, VGA display
Console: switching to colour frame buffer device 80x60
Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
brd: module loaded
smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre <nico@fluxnic.net>
eth0: SMC91C11xFD (rev 1) at c8800000 IRQ 25 [nowait]
eth0: Ethernet addr: 52:54:00:12:34:56
mice: PS/2 mouse device common for all mice
atkbd serio0: keyboard reset failed on fpga:06
atkbd serio1: keyboard reset failed on fpga:07
atkbd serio0: keyboard reset failed on fpga:06
atkbd serio1: keyboard reset failed on fpga:07
i2c /dev entries driver
ALSA device list:
No soundcards found.
TCP cubic registered
NET: Registered protocol family 17
VFP support v0.3: implementor 41 architecture 1 part 10 variant 9 rev 0

 

 

三、图形界面输出的效果图(qemu无法截取文字)

命令行:

"D:\java\qemu-0.9.0-arm\qemu-system-arm" -L "D:\java\qemu-0.9.0-arm" -M versatilepb -m 128M -kernel zImage -initrd root5.img -append "root=/dev/ram rdinit=/test init=/test"

输出:

 

 

 

 

分享到:
评论

相关推荐

    Qemu-windows.rar_qemu_qemu arm windows_qemu arm 仿真_qemu windows

    在Windows环境下使用Qemu,我们可以实现对不同操作系统,如ARM架构的Linux或者传统的x86 Windows系统的仿真运行。 "Qemu-windows.rar_qemu_qemu arm windows_qemu arm 仿真_qemu windows"这个标题表明我们讨论的是...

    使用QEMU搭建U-boot+linux+NFS开发环境.zip

    5. **配置QEMU**:使用QEMU的命令行工具,指定NFS服务器的IP地址、导出的目录以及U-boot和Linux内核的位置。例如: ``` qemu-system-arm -m 512M -nographic -kernel u-boot.bin -append "root=/dev/nfs ip=dhcp ...

    win10系统下利用QEMU安装ARM架构的银河麒麟桌面操作系统V10

    win10系统下利用QEMU安装ARM架构的银河麒麟桌面操作系统V10 双击qemu-w64-setup-20210505.exe,指定安装目录,例:D:\qemu 安装好后,利用如下步骤qemu创建一个虚拟硬盘文件: 在D:\qemu文件夹下,打开cmd命令行 在...

    linux qemu离线安装包

    QEMU支持多种架构,包括x86、ARM、MIPS等,因此它在软件开发、测试、教学和虚拟化环境中有着广泛的应用。在Ubuntu这样的Linux发行版中,QEMU可以方便地用于创建和管理虚拟机。 离线安装QEMU通常适用于没有网络连接...

    qemu arm仿真

    qemu仿真arm A9 linux内核,支持uboot启动内核,支持网络DHCP协议,支持telnet连接,支持FTP协议。 双击sim_uboot.bat即可启动仿真,需要安装TAP虚拟网卡支持。如果qemu安装位置不同,需要简单修改下qemu路径即可。

    qemu-macos-x86-arm64:使用QEMU在macOS x86_64上运行虚拟化的arm64 Linux Alpine

    运行带有QEMU的macOS x86_64上虚拟化的arm64 / aarch64 Linux Alpine。 需要安装qemu-system-aarch64 ,可以从Homebrew获得: brew install qemu跑步: ./qemu-arm64.sh首次运行时,它将复制user-data-init.qcow2到...

    qemu-system-arm

    qemu-system-arm 模拟工具,可以在linux下模拟一个虚拟的linux开发板, 进行驱动开发练习. (是静态编译的,可以放在任何一个目录下使用哦 tar xvjf qemu-tar.bz2 chmod +x qemu-system-arm )

    调试linux内核的平台qemu

    在全虚拟化模式下,QEMU提供了一种称为KVM(Kernel-based Virtual Machine)的机制,它利用了Linux内核的硬件辅助虚拟化特性,实现高性能的虚拟化。而在半虚拟化模式下,QEMU通过特定的指令集来模拟硬件,使客户机...

    linux0.01 qemu文件

    QEMU支持多种架构,包括x86、ARM、MIPS等,因此,无论你的主机操作系统是什么,只要QEMU支持,你都能运行Linux 0.01。 在提供的文件中,有两个映像文件:`linux0.01-3.5.img`和`hd_oldlinux.img`。`linux0.01-3.5....

    Qemu-kvm虚拟化技术介绍.pdf

    "Qemu-kvm虚拟化技术介绍" Qemu-kvm虚拟化技术是当前虚拟化技术的热点之一,该技术结合了Qemu和KVM两者的优势,提供了高性能和灵活的虚拟化解决方案。下面我们将对Qemu-kvm虚拟化技术的原理、架构和特点进行详细的...

    qemu下u-boot+kernel+rootfs完整启动移植手册

    在嵌入式开发中,QEMU 是一个非常流行的虚拟开发平台,它允许开发者在本地机器上模拟各种硬件环境,如 ARM 架构。本篇文章主要讲述了如何在 QEMU 下完成 u-boot、Linux 内核以及 rootfs 的完整启动移植过程。 首先...

    ARM image for qemu

    QEMU是一款开源的全系统虚拟化软件,它允许你在一台硬件上模拟运行其他操作系统。ARM架构是一种广泛应用于移动设备和嵌入式系统的处理器架构。这个镜像文件可能是为在QEMU中模拟一个基于ARM的系统而设计的,使得...

    linux下的qemu模块

    【QEMU模块详解】 ...总之,QEMU是一个强大的虚拟化工具,它的灵活性和性能使其成为Linux环境中虚拟化解决方案的首选。通过理解QEMU的工作原理和集成方法,你将能更好地利用这一技术来满足各种需求。

    qemu-arm64

    QEMU-arm64是QEMU针对64位ARM处理器的版本,允许用户在非ARM64硬件上运行ARM64操作系统和应用程序,如在x86_64机器上体验Android或Linux的ARM64环境。 **QEMU的基本工作原理:** QEMU通过动态二进制翻译技术实现...

    Docker-eyeOS:在Docker容器中运行iPhone(xnu-arm64)! 支持KVM + iOS内核调试(GDB)! 在Docker中运行xnu-qemu-arm64! 可在任何设备上使用

    X11转发(未来显示) 在localhost:2222或container.ip:2222上的SSH 本地主机上的GDB:1234或container.ip:1234 QEMU完整的xnu-qemu虚拟化集装箱主机拱作者: Sick.Codes团队 在Docker容器中运行iPhone(xnu-arm64...

    在windows 上虚拟ARM嵌入式开发平台2

    在Windows上搭建虚拟ARM嵌入式开发平台是一个复杂但必要的过程,尤其对于那些希望在桌面系统上模拟或测试ARM架构设备的开发者来说。本篇将详细介绍如何在Windows环境下利用Cygwin工具集来配置和使用ARM开发工具。 ...

    预装linux系统的QEMU虚拟机

    "LinuxBox"很可能是这个预装Linux系统QEMU虚拟机的镜像文件,它可能是一个.qcow2、.vmdk或者其他的虚拟磁盘格式,用于在QEMU中启动和运行Linux系统。用户可以通过QEMU提供的命令行工具,加载这个镜像文件,启动并...

    qemu-kvm0.12.1.tar.gz kvm虚拟化软件包

    QEMU-kvm是QEMU与KVM的结合,利用了Linux内核的虚拟化扩展,从而提供高性能的全虚拟化能力。 QEMU是一个通用的、基于CPU模拟的系统模拟器,它能够模拟多种处理器架构,如x86、ARM、MIPS等。通过QEMU,用户可以在一...

    Linux系统下搭建ARM环境所需软件.zip

    3. **QEMU虚拟化工具**:QEMU是一个开源的全虚拟化解决方案,可以模拟各种硬件,包括ARM处理器。通过QEMU,你可以在主机上运行ARM指令集,这对于调试和测试编译的程序非常有用。如果你的压缩包中包含QEMU相关文件,...

    qemu-arm-rpi

    在QEMU中使用Arch Linux Raspberry Pi映像,开发者可以享受到Arch Linux的最新特性和灵活性,而不必实际拥有硬件。 【Shell脚本和自动化】 “Shell”标签表明这个资源可能包含了用于自动化QEMU和Raspberry Pi设置...

Global site tag (gtag.js) - Google Analytics