您的位置 首页 基础

ARM裸机开发bootloader穿插东西链

今天跟随国嵌,初识linux下ARM的裸机开发全过程。现在总结如下:首先说明为什么要学习裸机开发,一方面bootloader的编写要用到裸机开发的知…

今日跟随国嵌,初识linux下ARM裸机开发全进程。现在总结如下:

首要阐明为什么要学习裸机开发,一方面bootloader的编写要用到裸机开发的常识,另一方面便是驱动的开发。一般情况下咱们进行体系上的开发,不会用到裸机开发。

学习关键

1、怎样修正默许途径

用户 root

#vim /root/.bashrc

增加:export PATH=$PATH:途径

收效途径:source /root/.bashrc

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

led.ldsled.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 -f2、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。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/265163.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部