hello world不会写,先玩玩malta虚拟器上的跑马灯,就是qemu起来后ctrl+atl+5切换出来那个,安装debian mips版本后会有个"LINUX ON MALTA"在那一直循环。
参考之前的文章,windows和linux下都有qemu,gnu的交叉编译工具也都有,所以两个平台应该都能跑。
本文参考了:
http://comments.gmane.org/gmane.comp.emulators.qemu/107966
http://comments.gmane.org/gmane.comp.emulators.qemu/11911
还有qemu对malta机器模拟的源码:
http://svn.peeklinux.com/trunk/qemu/hw/mips_malta.c 这个东西很重要,能看到很多内部实现。
注意:
1. qemu-system-mipsel的-bios参数没实现,指定什么参数启动的时候都不会加载。
2. qemu-system-mipsel的-kernel参数必须指定elf文件,经过objdump -O binary的文件时不会被加载的,看过那篇文章玩qemu-system-arm的人可能会想不通(http://balau82.wordpress.com/2010/02/14/simplest-bare-metal-program-for-arm/)。
3. qemu-system-mipsel的kernel加载位置就是ld时指定链接模板定义的,建议为0x80100000, 这是debian linux kernel文件抄来的,应该不会错多少。malta的bios会根据你的elf入口决定跳转位置,但是,你的elf在256M内存之外,它还是会老老实实跳过去。。。
4. 从malta源码看,这个灯的地址应该是0x1fxxxxxx的,但是用调试工具访问这个地址失败。在qemu的monitor console里面x,xp可以看出来,这个地址是物理地址。那么它的映射地址是多少呢?See MIPS RUN这书2.8图2-1有mips系统内存映射。原来是0xbfxxxxx。
5. 不要以为后面就好办了,gdb里面直接设置0xbf000418(显示字符串的起始位置)这个内存值,但是不会生效,在debian里面试过,不行。搜索"LINUX ON MALTA", 原来内核里面定时刷新的。
6. 好吧,qemu-system-mipsel -s -S -kernel xxxx, 然后用gdb target remote :1234进去,这个地址写进去值,没响应。读就不要想了,从源码看这个地址不支持读。这个不知道算不算qemu的bug, 写应该支持啊。
7. 好吧,写个汇编,让程序去说话,终于成功了~~
test.S
.global __start
.text
__start:
add $t0,$0, 0xbf000408 #LED address
add $t3,$0, 0xbf000418 #display char address
add $s2, $s2, 0x3ffffff #delay time
add $s0, $0,0x55 #LED: "# # # # "
update:
sw $s0,0($t0) #send to LED
sw $s0,0($t3) #send to display
sw $s0,8($t3) #send to display
sw $s0,16($t3) #send to display
sw $s0,24($t3) #send to display
sw $s0,32($t3) #send to display
sw $s0,40($t3) #send to display
sw $s0,48($t3) #send to display
sw $s0,56($t3) #send to display
add $t1, $0, 0
delay:
add $t1, $t1, 1
bne $t1, $s2, delay
add $s0, $s0, 1
b update
test.ld
引用
ENTRY(__start)
SECTIONS
{
. = 0x80100000;
.text : { *(.text) }
.data : { *(.data) }
.bss : { *(.bss) }
. = . + 0x1000; /* 4kB of stack memory */
stack_top = .;
}
Makefile:
引用
all: test
test: testclean
mipsel-linux-gnu-gcc -mips32 -EL -c test.S -o test.o
mipsel-linux-gnu-ld -mips32 -EL -T test.ld test.o -o test
mipsel-linux-gnu-objcopy -O binary test test.bin
testclean:
rm -f test
rm -f test.bin
testrun:
qemu-system-mipsel -kernel test
qemu通过ctrl+alt+5切换到led界面,Malta LEDBAR:显示很多跳动的# ###, Malta ASCII跳动显示的是当前字符,实际上LED是字符的二进制格式。
单步汇编调试:
qemu-system-mipsel -kernel test -s -S
mipsel-linux-gnu-gdb test
(gdb) target remote :1234
(gdb) load
(gdb) break __start ////$pc最开始bios,即0xbfc0.0000
(gdb) i reg
(gdb) c
(gdb) x/16i $pc
(gdb) si
刚学mips, 用C写一样的。玩虚拟机一定要用SSD,现在很便宜了,进出都是按秒算的。。。
分享到:
相关推荐
### Linux 2.6 Kernel 移植到 QEMU MIPS 的源代码文档 #### 知识点一:Linux 2.6 内核移植至 QEMU MIPS 的准备工作与环境配置 在进行 Linux 2.6 内核移植到 QEMU MIPS 的过程中,首先需要准备合适的开发环境。根据...
lede模拟器-openwrt模拟器-malta-mips-be-uClibc.part1.rar,由于文件太大,分成了两个文件上传part1和part2 linux或windows都可以运行,需要安装qemu qemu-system-mips -M malta -hda lede-malta-be-root.ext4 -...
通过本文档的学习,读者可以了解到在 QEMU MIPS 上构建、配置和运行 Linux 2.6 内核的方法,并能够掌握一些关键的技术点,如 GDB 跟踪、挂载磁盘映像、网络支持以及 Malta 板子的使用等。 #### 构建内核 **目标...
QEMU 1.2.0 编译好的可执行程序,可以直接运行于windows平台,可以模拟各种硬件平台,例如ARM,X86,Sparc,PPC,MIPS等等。下面是文件列表 2012-09-20 00:18 3,211 bamboo.dtb 2012-09-20 00:18 131,072 bios.bin ...
win10系统下利用QEMU安装ARM架构的银河麒麟桌面操作系统V10 双击qemu-w64-setup-20210505.exe,指定安装目录,例:D:\qemu 安装好后,利用如下步骤qemu创建一个虚拟硬盘文件: 在D:\qemu文件夹下,打开cmd命令行 在...
qemu-system-mips -M malta -hda lede-malta-be-root.ext4 -append "root=/dev/sda console=tt yS0" -kernel lede-malta-be-vmlinux.elf -net user,hostfwd=tcp::2222-:22,hostfwd=tcp::8080-:80 -...
3. **硬件支持**:QEMU支持多种硬件平台,包括x86、ARM、MIPS、PowerPC等,同时模拟众多外围设备,如网络卡、硬盘控制器、声卡等。 4. **用户模式模拟**:除了全系统模拟外,QEMU还可以作为用户空间的应用程序...
"易语言源码控制qemu虚拟机.rar" 这个标题表明了我们正在处理一个关于使用易语言编程控制QEMU虚拟机的项目。易语言是中国开发的一款简单易学的编程语言,旨在降低编程技术门槛,而QEMU则是一款开源的全系统虚拟化...
下载QEMU for Windows时,您可能会找到名为"setupqemuk40.exe"的安装程序,这很可能是QEMU的一个定制版本或者特定构建,其中“k40”可能代表特定的版本号或者配置。运行这个安装程序,按照向导的指示进行,确保选择...
总的来说,MIPS编程环境是学习和实践MIPS汇编语言的基础,它包含了编写、编译、运行和调试MIPS程序所需的所有工具。通过熟练掌握这个环境,你将能够深入理解计算机底层工作原理,为后续的系统级编程和嵌入式开发打下...
QEMU 是一个通用的开源机器模拟器和虚拟化器,它可以模拟多种架构的计算机系统,包括 x86、ARM、MIPS、PowerPC 等。QEMU 的一个重要组件是后端块设备驱动,它负责将虚拟磁盘映射到主机上物理存储设备上。 在 QEMU ...
在Linux系统中,QEMU通过加载内核模块与宿主机的硬件交互,实现对虚拟机的控制。QEMU支持动态二进制翻译(Dynamic Binary Translation),这意味着它可以将 guest OS 的指令转换为宿主机可执行的形式,以实现模拟...
Linux QEMU(Quick Emulator)是一款强大的开源模拟器和虚拟机监控程序,它允许你在同一台计算机上运行多个操作系统,而无需物理硬件。QEMU支持多种架构,包括x86、ARM、MIPS等,因此它在软件开发、测试、教学和虚拟...
stm32f407裸机程序在windows的qemu上跑,而且控制台可以输出打印信息。里面还包含了qemu-system-arm.exe,直接开箱即用,这个是我的对应博客教程 ...
1. **易语言基础**:易语言的语法结构、变量声明、流程控制(如条件语句、循环语句)、函数调用等,是编写控制QEMU虚拟机程序的基础。你需要理解易语言的编程逻辑和数据类型,以便正确地编写代码来实现对虚拟机的...
This compiler has also been tested on a QEMU emulated MIPS 4KC running in little-endian mode. A guide for installing Debian on an emulated MIPS(EL) machine can be found here: ...
qemu文件,做模拟测试的朋友,赶紧下载,这个版本是不错的 的
libvirt是一个API库,用于管理和控制虚拟化平台,包括QEMU/KVM。virsh是基于libvirt的命令行工具,可以方便地创建、管理虚拟机。通过virsh,你可以执行如`virsh start domain_name`来启动虚拟机,`virsh list`查看...
1. **硬件模拟**:QEMU可以模拟多种CPU架构,如x86、ARM、MIPS等,以及各种外围设备,如网络卡、硬盘控制器等,使得不同的操作系统能在同一硬件平台上运行。 2. **KVM集成**:KVM是Linux内核的一个模块,它利用...