Min2440裸机开发体验篇

(1)裸机开发流程:

(1)编写裸机程序
(2)调试裸机程序
(3)生成二进制镜像(编译、链接、格式转换)
(4)烧写/运行二进制镜像

(2)安装交叉编译工具链:
实验所需材料:

(1)ARM-Tools.tar.gz(ARM-Tools.tar.gz下载地址:链接:https://pan.baidu.com/s/1dIg5m2 密码:zgho)

步骤:

(1) ARM-Tools.tar.gz复制到Linux 的“/home/software”目录下
(2)在终端进入到“/home/software”目录,使用“tar xvzf ARM-Tools.tar.gz”命令解压到当前文件夹
(3)然后进入到解压后得到的ARM-tools文件夹下,使用“tar xvzf arm-linux-gcc-4.3.2.tgz -C \”将arm-linux-gcc-4.3.2.tgz文件解压至根目录
(4)通过”vim /root/.bashrc”配置环境变量
(5)在打开的文件中最后一行添加“export PATH=$PATH:/usr/local/arm/4.3.2/bin”
(6)通过Esc –> : –> wq保存退出
(7)通过“source /root/.bashrc”使环境变量生效

(1)什么是交叉工具链

一系列交叉工具集合

(2)常用交叉工具

1)交叉编译器 arm-linux-gcc
2)交叉链接器 arm-linux-ld
3)交叉转换器 arm-linux-objcopy
4)交叉ELF文件工具 arm-linux-readelf
5)交叉汇编器arm-linux-objdump

(3)交叉编译典型示例

1)arm-linux-gcc -g -c led.S只编译不链接
2)arm-linux-ld -Tled.lds -o led.elf led.o 链接生成可执行文件
3)arm-linux-readelf -a led.elf查看led.elf文件信息
4)arm-linux-readelf -d hello 查看hello所需的链接库
5)arm-linux-objdump -D -S hello >dump 将hello反汇编,并将信息存储到dump中
6)arm-linux-objcopy -O binary led.elf led.bin 将led.elf转换成ARM上可以直接运行的led.bin文件

(3)编译裸机程序

(1)将led裸机程序拷贝到Linux中的“/home/hardware/00–led”文件夹中
(2)从终端进入到文件夹下,使用“make”命令将led裸机程序进行编译链接,生成led.bin文件
(3)在SecureCRT的串口窗口中,输入“f”擦除NandFlash中的内容
(4)在Secure CRT的串口窗口中,输入“v”进行下载镜像
(5)从终端进入到dnw工具所在文件夹,使用“./dnw /home/hardware/00-led/led.bin 30000000”将led.bin文件下载到开发板

(4)运行裸机程序

(1)断开开发板电源
(2)将Nor/Nand选择开关拨到Nand启动端
(3)上电开发板

(5)实验现象

led1被点亮

(6)实验代码

led.S

@*************************************************
@FileName:led.S
@功能:用汇编点亮一个LED
@*************************************************

.equ WTCON, 0x53000000
.equ GPBCON, 0x56000010
.equ GPBDAT, 0x56000014
.equ INTMSK, 0x4a000008
.equ INTSUBMSK, 0x4a00001c

.text
.global _start
_start:
@建立中断向量表
    b reset
    ldr pc, _undefined_instruction
    ldr pc, _software_interrupt
    ldr pc, _prefetch_abort
    ldr pc, _data_abort
    ldr pc, _not_used
    ldr pc, _irq
    ldr pc, _fiq
_undefined_instruction:
    b .
_software_interrupt:
    b .
_prefetch_abort:
    b .
_data_abort:
    b .
_not_used:
    b .
_irq:
    b .
_fiq:
    b .
reset:
@复位
    bl set_svc
    bl disable_watchdog
    bl disable_irq
    bl init_led
    bl light_led
halt:
    bl halt
set_svc:
@设置为管理模式
    mrs r0, cpsr
    bic r0, r0, #0x1f
    orr r0, r0, #0xd3
    msr cpsr, r0
    mov pc, lr
disable_watchdog:
@关闭看门狗
    ldr r0, =WTCON
    mov r1, #0x0
    str r1, [r0]
    mov pc, lr
disable_irq:
@屏蔽中断
    ldr r1, =0xffffffff
    ldr r0, =INTMSK
    str r1, [r0]
    ldr r1, =0x7fff
    ldr r0, =INTSUBMSK
    str r1, [r0]
    mov pc, lr
init_led:
@清除GPB5的初始电平
    ldr r0, =GPBDAT
    mov r1, #0x20
    str r1, [r0]
@设置GPB5为输出状态
    ldr r0, =GPBCON
    mov r1, #0x400
    str r1, [r0]
    mov pc, lr
light_led:
@点亮LED1
    ldr r0, =GPBDAT
    mov r1, #0x0
    str r1, [r0]
    mov pc, lr 

led.lds

SECTIONS {
    . = 0x30008000;

    . = ALIGN(4);
    .text:
    {
        led.o (.text)
        *(.text)
    }
    . = ALIGN(4);
    .rodata : {*(.rodata)}

    . = ALIGN(4);
    bss_start = .;
    .bss : {*(.bss) *(COMMON)}
    bss_end = .;
}

Makefile

all:led.o
    arm-linux-ld -Tled.lds -o led.elf led.o
    arm-linux-objcopy -O binary led.elf led.bin
led.o:led.S
    arm-linux-gcc -g -o led.o -c led.S
.PHONY:clean
clean:
    rm *.o led.elf led.bin
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值