初识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、烧写与运行

运用superboot与开发板进行通信,用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 -O -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

arm-linux-gcc 裸机程序,Linux下ARM裸机开发-交叉工具链相关推荐

  1. 制作ARM的Linux,手工制作最新版arm-linux交叉工具链1.doc

    手工制作最新版arm-linux交叉工具链1 手工制作最新版arm-linux交叉工具链 注意:本文是在ubuntu 10.04 desktop i386操作系统上完成的, 1.准备目录和环境变量 # ...

  2. php 类似微信下拉菜单,微信小程序模拟下拉菜单开发实例

    本文主要和大家分享微信小程序模拟下拉菜单开发实例,希望能帮助到大家. 一.知识点 1.实现动态显示和隐藏某个控件 列表1data:{ open:false }, showitem:function() ...

  3. linux使用交叉工具链产生的程序怎么下载到mini2440里,Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法...

    一.安装ARM-Linux-GCC工具链 只需要一句命令: sudo apt-get install gcc-arm-linux-gnueabi 前提是你的Ubuntu系统版本是官网支持的最新的版本, ...

  4. linux top交叉编译_Linux 系统下ARM Linux交叉编译环境crosstool工具

    Linux系统下ARM Linux交叉编译环境的建立目前流行的有三种途径. 一.使用别人编译好的开发工具链本文引用地址:http://www.eepw.com.cn/article/201611/31 ...

  5. 怎么开发Linux图形界面程序,Linux下的图形界面编程

    Linux下的图形界面编程 一.Qt和GTK+ 虽然Linux下的大多数开发是基于字符界面的,但在Linux环境下也可以开发出美观大方的图形界面.经过多年的发展,目前已经存在多种用于在Linux下开发 ...

  6. linux 中断 应用程序,Linux中断编程

    本文转载自[微信公众号:机械猿,ID:on_ourway]经微信公众号授权转载,如需转载与原文作者联系 基本概念 中断是指CPU在执行程序时,由于内外部事件或由程序预先安排的事件,导致CPU 暂停当前 ...

  7. linux卸载alien,Ubuntu/Debian下的安装包装换工具—alien

    在Ubuntu/Debian系统下所使用的软件包是deb,那么很多只有出CentOS/Linux下的rpm包的软件在Ubuntu/Debian系统下就无法通过直接通过软件包来快速安装,当地首选的办法是 ...

  8. linux 查找某个程序,Linux查找特定程序whereis实例详解

    Linux 查找特定程序 whereis whereis 命令主要用于查找程序文件,并提供这个文件的二进制可执行文件.源代码文件和使用手册存放位置. 1.查找命令程序 例如,查找 touch 命令 [ ...

  9. linux亮度调节程序,linux调节屏幕亮度

    新建三个文本文件并给予执行权限: up.sh if [ ! -w /sys/class/backlight/intel_backlight/brightness ];then echo "p ...

最新文章

  1. thinkphp 创建子应用
  2. SQLite学习手册(开篇)
  3. FZU - 2218 Simple String Problem(状压dp)
  4. build 之前执行task_Android Gradle新增buildtypes以及编译前执行自定义task
  5. openstack 中国联盟公开课參会总结
  6. windows设置mysql使用率_Windows下配置Mysql
  7. 华为第二批“十大军团”正式成立!
  8. [征询意见]更换Logo后的效果[dudu]
  9. 07-求解Ax=0:主变量、特解
  10. 基于stm32f401的双按键可视化多模式选择模块
  11. keil中 使用for循环体中条件判断框定义变量出错
  12. mysql 只有一个ibd文件_只有一个ibd文件如何恢复数据表
  13. 赏金猎人:德州堕胎法案 | 经济学人早报精选20210902
  14. cs231n-2022-assignment1#Q1:kNN图像分类器实验
  15. Elasticsearch启动报错:warning: ignoring JAVA_HOME=C:\Program Files\Java\jdk1.8.0_191; using bundled JDK
  16. 2021年三季度中国家居用品行业A股上市企业营收排行榜:欧派家居、顾家家居排名前2位,且近五年第三季度的净利润均逐年递增(附热榜TOP61详单)
  17. SSH tunnel 隧道技术
  18. 由Jack Dorsey背书支持的CoinList进军DeFi市场
  19. C++常用头文件汇总
  20. 音视频系列--音频基本理论

热门文章

  1. Google 是如何做 Code Review 的?| 原力计划
  2. 如何成为一名优秀的初级开发者?
  3. Python 2 寿命即将终结,​是时候将 3500 万行代码迁移到 Python 3 了!
  4. 华为获首张 5G 终端进网许可证;Linux 之父来华;Eclipse 4.12 发布 | 极客头条
  5. 孤独的周鸿祎,落寞的 360
  6. 程序员该怎么做,才能成为 coding 王者?
  7. 62 岁的比尔·盖茨当选外籍院士,但却与微软无关
  8. 已收藏!民生银行2021春招笔试后多久面试
  9. Sublime Text 文件乱码
  10. 第 1 章 课程概述