概述
(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
最后
以上就是落寞黑猫为你收集整理的Min2440裸机开发体验篇的全部内容,希望文章能够帮你解决Min2440裸机开发体验篇所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复