系统运输
上一篇文章描述了在linux上通过gcc完成程序源文件编译执行的过程。 然后生成makefile文件,最后在终端平台输出myhello word!
有了这个基础,这次学习的是用linux编译生成的代码在ARM上完成硬件安装。 因为还没有参与系统移植,所以仍然处于裸板程序开发的状态。
1 .源代码编写
ARM裸板程序所需的代码素材主要是汇编文件、c文件、makefile。 每个文件都有各自的功能。
(1)汇编文件
结束看门狗; 设定时钟; sdram初始化; 堆栈设置; 和跳转到c函数执行条目(相当于main函数)。 代码如下所示(这个例程不需要配置时钟和sdram。
@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@ File:crt0.S
@功能:通过它转移到c程序
@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@注:在常规汇编程序中,时钟、SDRAM功能也需要初始化,但点亮LED时不需要。 直接使用12Mhz
. text
. global _start
_start: @在程序代码段的开头,每个段都由链接脚本定义
ldr r0,=0x53000000 @看门狗控制寄存器地址( 32位地址赋值语句,r0地址为0x53000000 ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
@ ldr和mov的区别在于,ldr传输32位的数据,而mov只能传输8位
mov r1,#0x0 @即时数据代入r1寄存器
str r1,[r0] @将寄存器内的数据0x0赋予r0地址
@上述3个语句将0代入看门狗控制寄存器
ldr sp,=4*1024 @大小为4k(NANDflash的前4k )设置堆
bl main @跳转到main函数,同时保存了下一个命令地址
haltloop :
)2) c文件
汇编的代码量比较少,只执行必要的初始化功能,真正的功能部分在c文件中。 C文件主要执行:寄存器地址宏定义; 外围设备初始化; 功能的实现等。
本例中点亮的led引脚为GPF4,因此需要参考2440的参考手册,确认GPF相关的寄存器地址。 主要配置的寄存器为GPFCON (控制寄存器)和GPFDAT (控制寄存器)数据寄存器。 GPFCON的主要控制引脚工作模式(模式为输入、输出、复用),其中每2位控制1个引脚的状态,如下图所示。
引脚的高低电平由GPFDAT控制,各位如图所示控制一个引脚。
所以学会阅读芯片手册还是很重要的,在理解和编程各个寄存器的同时,应该掌握移位操作,常用寄存器编程。 部分代码如下所示。
# definegpfcon ( * ( volatile unsigned long * )0x56000050 ) ) ) ) ) )。
# definegpfdat ( * ( volatile unsigned long * )0x56000054 ) ) )。
# definegpfup ( * ( volatile unsigned long * )0x56000058 ) ) ) ) ) ) )。
# define gpio _ pin _0( ( volatileunsignedchar )0x00 ) ) )。
# define gpio _ pin _1( ( volatileunsignedchar )0x01 ) )。
# define gpio _ pin _2( ( volatileunsignedchar )0x02 ) )。
# define gpio _ pin _3( ( volatileunsignedchar )0x03 ) )。
# define gpio _ pin _4( ( volatileunsignedchar )0x04 ) )。
int main ( ) )
{
gfcon=0x01(gpio_pin_4*2); //GPF_4输出模式
gpfdat=~(0x01 ) gpio_pin_4); //GPF_4输出0
返回0;
}
(3)化妆文件
编译规则与上一篇文章的原理相同。 linux有ARM专用的编译工具,主要使用的是这三个:
arm-linux-gcc :主要用于编译文件时,从. C/.S )文件编程到. o目标文件。
arm-linux-ls :主要为所有. o目标文件链接生成可执行文件
arm-linux-objcopy :主要将可执行文件二进制转换为. bin可写文件
文件代码如下所示。
led_on.bin : crt0.S led_lighton.c
arm-Linux-gcc-g-c-ocrt0. ocrt0. s
arm-Linux-gcc-g-c-OLED _ light on.OLED _ light on.c
arm-Linux-LD-t text0x 0000000-g-OLED _ on _ elf CRT0. OLED _ light on.o
arm-Linux-objcopy-o binary-sled _ on _ El fled _ on.bin
clean :
rm -f led_on.bin led_on_elf *.o
上述三个文件分别是crt0.S、led_lighton.c和Makefile。 这是最简单的例行文件,适合入门。 代码文件下载位置链接:
3358 download.csdn.net/download/ludaoyi 88/10151739
1 .文件编译链接
汇编文件和c文件必须编译链接并生成可执行文件,将可执行文件转换为. bin二进制文件,然后写入开发板以执行。 这些编译链接和转换写在makefile中,在linux终端上输入并执行make命令即可。
通过secureCRE远程登录到linux主机(在此为虚拟机),将FTP文件传输工具连接到linux主机,在Windows上创建这三个代码文件。 整个过程与上一篇报道相同,因此省略说明。
将三个代码文件上载到linux主机上的相关文件路径,然后在终端上输入make命令并运行makefile文件,结果如下图所示。
如上所述,可以看到生成led_on.bin的二进制文件。 将此文件写入开发板。 写入方法可以通过oflash、dnw、tftpd、nfs等方法下载。 在前三种方法之前在文章中说明了使用方法。 在此,在Windows上从dnw下载程序,将二进制文件导入window,然后下载(开发板请拨nand )。 图:
下载成功后,重置开发板,可以看到指示灯亮起。 效果图(成功) ) _) o )哈哈)。 这只是裸板开发的入门,如果有其他外围设备的话就很复杂了。 同志还得努力。
详情请访问云服务器、域名注册、虚拟主机的问题,请访问西部数码代理商官方网站: www.chenqinet.cn