• 用ARM进行汇编语言编程(6)硬件交互和为 ARM 设置 Qemu


    ARM 编程模拟器

    ARM 编程模拟器网站地址:

    https://cpulator.01xz.net/?sys=arm-de1soc
    
    • 1

    硬件交互

    在这个模拟器的右边有各种不同的硬件设备,这里演示两个硬件设备

    在这里插入图片描述

    switches是输入硬件,LED是输出硬件,我们可以写一个小程序让他执行

    首先我们需要声明一个变量来存储switches的位置以及LED的位置,上面标注了硬件的位置

    在这里插入图片描述

    首先我们先调用switches

    .equ switch, 0xff200040 
    .global _start
    _start:
    	ldr r0,=switch
    
    • 1
    • 2
    • 3
    • 4

    但我们这样直接存储位置的话,只是一个普通的变量,并没有什么用

    如果我们想用这个寄存器,我们可以打开switches上的开关,这里的意思是2的一次方,二次方……

    在这里插入图片描述

    如果我们选择了1这个开关,计算的时候就会有变化

    .equ switch, 0xfff200040 
    .global _start
    _start:
    	ldr r0,=switch
    	ldr r1,[r0]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    可以看到,r1寄存器里的值是2,因为2的一次方是2,我们选择其他选项试试

    在这里插入图片描述

    可以看到r1寄存器里的值为7,因为2的零次方+2的一次方+2的二次方

    这是从硬件获取输入的一个简单的演示
    硬件第一排的LED最右边的代表二进制的第一个数值,然后是第二个数值,……以此类推

    .equ switch,0xff200040 
    .equ led,0xff200000
    .global _start
    _start:
    	ldr r0,=switch
    	ldr r1,[r0]
    	
    	ldr r0,=led   //覆盖r0之前的地址,变成led的地址
    	str r1,[r0]  //str:字数据存储指令,因为LED是输出硬件,我们需要把值存入后才能输出
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    执行程序,可以看到LED的灯亮起,红的是1,不亮的则为0,因为r1寄存器里的值十进制为7,二进制就为0111

    在这里插入图片描述

    为 ARM 设置 Qemu

    现在我们要在linux搭建运行arm的环境
    首先下载这个文件,这可以模拟操作系统环境,还有其他版本的环境,目前这个版本和qemu工具运行是最稳定的:

    https://downloads.raspberrypi.org/raspbian/images/raspbian-2017-04-10/
    
    • 1

    在这里插入图片描述

    然后需要一个内核:

    https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/master/kernel-qemu-4.4.34-jessie
    
    • 1

    下载好后放到同一个文件夹下

    在这里插入图片描述

    然后安装qemu

    apt-get install qemu-system
    
    • 1

    安装完成后执行这一条命令来创建环境

    qemu-system-arm -kernel kernel-qemu-4.4.34-jessie -cpu arm1176 -m 256 -M versatilepb -serial stdio -append "root=/dev/sda2 rootfstype=ext4 rw" -hda 2017-04-10-raspbian-jessie.img -nic user,hostfwd=tcp::5022-:22 -no-reboot
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

    现在树莓派虚拟环境就安装好了,打开树莓派里的终端,输入命令打开ssh

    sudo service ssh start
    
    • 1

    在这里插入图片描述

    然后在本地终端里连接ssh

    ssh pi@127.0.0.1 -p 5022
    
    • 1

    输入yes,密码为raspberry

    在这里插入图片描述

    总结

    这是我学习的笔记,有什么错误和不懂的地方欢迎来私信我,或者加我qq

  • 相关阅读:
    钟汉良日记:出门在外靠什么?
    使用 Spring Boot Admin 监控应用状态
    数据结构-------队列
    数据结构原理与分析知识点
    计算机毕业设计SSM电影购票和评分系统【附源码数据库】
    Android-Q 对 startActivity() 做了限制,怎么适配?
    Day8力扣打卡
    不知道如何录音转文字?分享两个实用方法
    Springboot整合规则引擎
    验证码 | 可视化一键管控各场景下的风险数据
  • 原文地址:https://blog.csdn.net/qq_45894840/article/details/126677755