ARM裸机开发bootloader交叉工具链

发布者:游走人间最新更新时间:2016-06-07 来源: eefocus关键字:ARM  裸机开发  bootloader  交叉工具链 手机看文章 扫描二维码
随时随地手机看文章
今天跟随国嵌,初识linux下ARM的裸机开发全过程。现在总结如下:

首先说明为什么要学习裸机开发,一方面bootloader的编写要用到裸机开发的知识,另一方面就是驱动的开发。一般情况下我们进行系统上的开发,不会用到裸机开发。

学习要点

1、如何修改默认路径

用户 root

#vim /root/.bashrc

添加:export PATH=$PATH:路径

生效路径:source /root/.bashrc

 

2、裸机开发流程:1编写裸机程序。2调试裸机程序。3生产二进制映像(编译、链接、格式转换)。4烧写/运行二进制映像。

led.lds led.SMakefile

编译:arm-linux-gcc -g -c led.S   生产led.o

链接:arm-linux-ld -Tled.lds -o led.elf led.o

格式转换:arm-linux-objcopy -O binary led.elf led.bin

 

3、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

 

4、烧写与运行

运用超级终端与开发板进行通信,用dnw下载映像程序到nandflash。以nandflash重新启动6410,可以看到led亮起来了。

烧写的整个过程都是在windowsXP下进行的,如何在linux下运用minicom代替超级终端?并结合linux下的dnw驱动烧写成功。

再续

有关linux下minicom与开发板通信的问题,本人查找了一个晚上的资料,终于搞定了。

1、首先要设置vmware,vm-setting-hardware-serial port添加串口设备。然后重新启动linux,这个时候一定要保证超级终端是关闭的,以免串口被除linux以外的软件占用。这一步也是很多朋友忘记的,至关重要。

2、minicom的设置,这很简单,root登录下,输入minicom -s 就进入了设置界面。保证115200 bps。串口要设置为/dev/ttyUSB0或ttyS0(我使用的是前者,在我的电脑上后者不能用,所以就用了一根usb转串口线就可以了,也不知道怎么回事)。退出时一定要保持,选择save to df1.

3、设置好以后,直接输入minicom就可以启动了。sd卡模式下启动开发板就可以实现开发板与linux系统的通信了。

 

关于dnw驱动安装不上的原因,我已经查实。原因是驱动编写时用的内核版本与我用的linux内核不是一个版本。

输入命令insmod dnw_usb.ko

然后输入dmesg可以查看到原因

dnw_usb: version magic '2.6.32-279.el6.i686 SMP mod_unload modversions 686 ' should be 

'2.6.18-53.el5xen SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1'

5、初识交叉工具链

1、什么是交叉工具链?

链是集合的意思,交叉工具链也就是交叉工具集合的意思。之所以称为交叉工具,是因为嵌入式的开发有宿主机和目标机两个角色,宿主机主要用来编译、链接嵌入式软件,而嵌入式软件要在目标机上运行,也就是目标硬件。

2、常用的交叉工具链

交叉编译器 arm-linux-gcc (gcc编译器头文件在/usr/include/,而arm-linux-gcc头文件用arm-linux-gcc --help中的命令可以查看头文件地址)

交叉链接器 arm-linux-ld

交叉转换器 arm-linux-objcopy

交叉ELF文件工具 arm-linux-readelf

交叉反汇编器 arm-linux-objdump

3、演示

led.lds   led.S

arm-linux-gcc -g -c led.S 

led.o led.lds led.S

arm-linux-ld -Tled.lds -o led.elf led.o

led.elf led.o led.lds led.S

查看elf文件

arm-linux-readelf -a led.elf

编译产生的文件为elf文件,如果生产文件不能运行,一般会有三方面原因:

arm-linux-gcc -static -o hello  hello.c

1、file查看运行环境(ARM、X86)

2、readelf查看大小端

3、查看库arm-linux-readelf -d hello

可以自己用gcc和arm-linux-gcc两种方式编译生产elf文件,然后查看他们的运行环境。

反汇编:arm-linux-objdump -D -S hello/led.elf >dump

cat dump

elf格式的文件不能在ARM中运行(带系统的ARM中如果含有elf解析器除外)。所以要进行格式的转换,将应用程序转换为二进制的映像程序。

arm-linux-objcopy -O binary led.elf led.bin

产生的led.bin文件可以在ARM中直接运行。

查看帮助文件方法:arm-linux-gcc --help

6、Makefile工具管理

1、为什么要用Makefile

主要是为了提高编译、链接的效率。我们可以将多条编译命令写在一个Makefile文件中,然后只用一条make命令就可以实现多条命令的功能。

2、Makefile怎么构成

规则和变量

规则:      目标:依赖

                  命令

变量:自定义obj=func.o func1.o

             命令中引用:$(obj)

            系统默认:$^:所以依赖文件 $< 第一个依赖文件 $@目标文件

3、Makefile使用技巧

直接输入make默认执行第一条规则,第一条规则默认为最终目标。

make 目标 选择性的执行某一个目标

内核还有uboot中经常使用一种通用规则 %.o %.s

1、取消回显:@命令

2、使用文件名:系统默认make命令作用于makefile或Makefile文件。如果想作用于自己定义的文件则要这样进行:

make -f file clean

7、链接器脚本

1、链接器脚本有什么作用?

在源程序不变的情况下,不同的链接器脚本对程序会产生不同的效果。特别在设置代码段首文件的时候,这会对程序的后期运行产生很大的作用。

2、链接器脚本的构成

主要分为:段

    起始链接地址

        对齐设置

     使用变量

     设置代码段首文件

下面是一个例子,可以参考:

 

ENTRY(_start)
SECTIONS
{
. = 0x50008000;  //起始地址,.代表当前地址
. = ALIGN(4); //对齐方式为4字节对齐,就是说存取地址要为4的倍数
.text :  //代码段
{
led.o (.text) //代码段首文件设置
*(.text)
}
. = ALIGN(4);
.rodata :
{
*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
}
. = ALIGN(4);
.data : //数据段
{
*(.data)
}
. = ALIGN(4);
bss_start = .; //使用变量,此变量可以在源程序中应用
.bss //未初始化全局变量
{
*(.bss)
. = ALIGN(4);
}
bss_end = .;
}

 

下面有几个问题说明一下:对齐设置是为了提高数据的存取效率。代码段首文件是cpu上电时开始运行的文件。

7、eclipse的集成开发

1、为什么要使用eclipse

目的是集成编译和在线调试

2、整个的集成开发环境构成

eclipse     arm-linux-gdb jlinkgdbserver

1、eclipse的安装十分简单,解压缩后,直接运行就可以了。

2、arm-linux-gdb解压缩后还要设置默认路径,因为之前已经安装了arm-tools里面含有arm-linux-gdb。设置默认路径时要将刚安装的gdb路径放在前面,因为这里的默认路径执行靠前优先的原则。

3、jlinkgdbserver的安装要相对复杂一点,解压缩后还要三个文件到新的文件夹下:1、cp -d libjlinkarm.so.* /usr/lib -f 2、cp 45-jlink.rules /etc/udev/rules.d/。完成之后,运行jlinkgdbserver就可以了。

3、eclipse使用之前的配置

1、首先安装jlink插件,这要在网上下载然后安装。方法:选择help-installnewsofteware然后填入网址http://opensource.zylin.com/zylincdt直接点击ok,等待找到zylin embedded cdt 选中后点击next 再next 选accept 后点击finish。最后restart。

2、配置eclipse

1、file-new-makefile project with existing code

2、去掉自动组件:project-bulid automatical

3、如何编译

选中工程led后,点project中的build all在console中可以查看make。

4、调试,Debug-debug configurations然后双击zylin embedded debug 

5、main:选中c/c++ application的browse选择led.elf。Debugger:arm-linux-gdb,去掉stop on startup at maincommands:运行geditinit6410进行初始化设置。之后就可以使用eclipse。

 
关键字:ARM  裸机开发  bootloader  交叉工具链 引用地址:ARM裸机开发bootloader交叉工具链

上一篇:ARM裸机开发bootloader时钟初始化ARM跑快了
下一篇:ARM裸机开发bootloader汇编语言

推荐阅读最新更新时间:2024-03-16 14:56

ARM和美国国防高级研究计划局签订三年合作协议
英国芯片设计公司ARM官方网站8月20宣布,ARM已与美国国防高级研究计划局(DARPA)签订了为期三年的合作协议。 图源:eenewseurope 这份协议也是美国电子复兴计划(ERI)的一部分。该计划启动于2017年,目的是将产业界和学术界的合作伙伴聚集在一起,促进微电子产业的四个关键领域:开发用于芯片制造的新材料、通过通硅孔垂直整合多个器件、创建芯片的定制应用以及确保芯片安全和设计的最新知识。 Arm知识产权产品部总裁Rene Haas说接受采访时说:“扩大与DARPA合作伙伴关系,将使他们能够使用最广泛的Arm技术,目标是开发由全球最大的软件生态系统支持的计算解决方案。” 业内人士普遍认为,以ERI计划为突破口,该协议
[手机便携]
<font color='red'>ARM</font>和美国国防高级研究计划局签订三年合作协议
数字化车内通信系统方案设计
近年来,随着通信技术、微电子技术和计算机网络技术的不断发展,车内通信系统正朝着集成化、数字化、网络化和多功能化方向发展。新一代车内通信系统,要能够实现车内、车下、车际的话音统一交换与处理,满足车内乘载员间话音指挥、数据共享的要求,满足车际之间的话音直接指挥、话音拨号及数据指挥的要求。 1 车内通信系统总体框架设计 车内通信系统的设计思路是以先进的工程设计思想为指导,采用目前最流行的嵌入式开发技术,计算机网络技术和数字通信等先进技术设计的一种新型的数字化车内通信系统。 车通系统内所有车通设备的通信模块采用全双工交换式千兆以太网交换模块,对外提供多个10/100自适应以太网接口。各车通设备之间采用交换端口级联方式连接,通信速率
[单片机]
数字化车内通信系统方案设计
OK6410开发裸机DS18B20驱动
相信玩过51的童鞋应该都玩过DS18B20吧,虽然用在ARM11上面,但是操作还是一样,多了一点就是读写IO前需要切换IO方向,其实51在读取之前需要切换到高电平的,这个一般由编译器完成的, /************************************************************************************************************* * 文件名: ds18b20.c * 功能: S3C6410 DS18B20驱动 * 作者: cp1300@139.com * 创建时间: 2012年9月17日22:45 * 最后修改时间:
[单片机]
利用proteus学习ARM(LPC2103)之一:熟悉开发环境及点亮LED
最近在自学ARM(LPC2103),想将自己学习的经历全部记录在这个博客里面,与各位新手共同进步。 开发ARM的开发环境主要有ADS1.2,IAR FOR ARM,KEIL FOR ARM,我这次选用的为IAR的开发环境,这样新手上手会比较快一点,下载地址可以谷歌mcu123,大家都懂的,若要用于商业目的还是请用正版。我下载的是最新的版本V6.1,有一个问题就是不能修改字体大小,一旦修改字体大小软件就出错关闭了,但是这个影响不大,我一般都是在UltraEdit里面编辑,只是利用下IAR的编译和调试环境。有问题可以留言,我会尽最大可能帮助你。 相信大家新建工程,添加文件,设置芯片等都不会有问题,但是最后你把HEX文件添加到prote
[单片机]
ARM Linux (S3C6410架构/2.6.35内核)的内存映射(四)
set_pte_ext()的作用是根据Linux给出的Linux版本页表项来填充Arm硬件版本的页表项。 对于s3c6410,set_pte_ext()函数由汇编宏armv6_set_pte_ext来实现,定义在proc-macros.S文件中。 进入函数时,参数分别为: r0: pte的地址,这里的pte是二级页表Linux版本中对应的页表项。 r1: Linux版二级页表项的内容。 r2: 0。 .macro armv6_set_pte_ext pfx str r1, , #-2048 @ linux version bic r3, r1, #0x000003fc bic r3, r3, #PTE_TYPE_
[单片机]
基于 ARM 嵌入式的远程监控系统设计
基于 ARM 内核的嵌入式系统在远程监控报警系统中的设计实现与应用。核心部分主要包 括 ARM 嵌入式平台设计及 µC-OS 嵌入式实时操作系统移植;人机交互界面 µCGUI 的设计与实现;远程通 讯及自动报警等;系统的设计还考虑到了扩展性和通用性以及与其他监控设备无缝连接等问题。 关键词: ARM;µC/OS-II; µCGUI ;远程监控 1 引言 监控系统现已成为现代化生产、生活中不可缺少的重要组成部分。目前,监控系列产品 种类繁多,大部分广泛应用于交通、医院、银行、家居、学校等安防领域。 随着嵌入式系统的出现,尤其是基于 ARM 内核芯片的嵌入式系统的出现,使得监控系统的应用领域更为广泛。本文设计的远程监控报警系统除了作
[工业控制]
基于 <font color='red'>ARM</font> 嵌入式的远程监控系统设计
典型的工业级ARM处理器及应用实例
嵌入式主板领域常见的ARM处理器有飞思卡尔(Freescale)公司的I.MX系列,例如:MX515、MX357、MX287、MX535和MX6X。这些处理器是嵌入式主板的最佳选择,飞思卡尔的I.MX系列处理器的特点在朗锐恒的SOM-3260嵌入式主板上面得到了充分的体现。 SOM-3260采用Cortex-A9架构,主频1GHz,采用工业级 Freescale i.MX6X芯片,支持硬件视频解码,支持安卓,linux系统,24小时稳定运行,超低功耗。可扩展支持WIFI、3G、GPRS、GPS功能。这是一款嵌入式紧凑型工业模块,能够24小时安全运行,而且低功耗、散热效果好;接口也是非常的丰富,可扩展性能极强;能够抵抗恶劣复杂的环境,
[单片机]
基于ARM的嵌入式多参数监护仪设计与实现
1 引 言 多参数监护仪广泛应用于ICU、CCU、病房、手术室等。目前我国也有自主知识产权的产品,如迈瑞、金科威、金脑人等,但与GE、飞利浦世界先进产品比较,在监测和计算、可靠性、实时性、稳定性、信号变异的处理分析、远程传输等方面都较落后 。嵌入式系统把计算机直接嵌入到应用系统之中,它融合了通信技术和半导体微电子技术,是信息技术IT的最终产品 。因此将嵌入式系统,网络等技术应用于医用监护仪领域,能使多参数监护仪顺应现代医用监护仪市场缩小体积,提高数据处理能力,远程医疗等方面的要求。 本文介绍一种基于ARM的实时监护系统,它将32位RISC结构的ARM内核处理器与实时多任务嵌入式系统相结合,并通过嵌入式TCP/IP协议栈为平台添
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved