Linux下arm裸机开发环境搭建与实例

发布者:一直333最新更新时间:2015-08-19 来源: eefocus关键字:Linux  arm裸机  开发环境 手机看文章 扫描二维码
随时随地手机看文章
折腾了很长时间,总算是弄明白怎么在linux编译运行arm裸机程序了。编译运行arm裸机程序可以考虑用arm工具链搭建编译环境,由minicom和dnw来下载程序,至于调试,还没有去耐心研究,着急来这里先备份一下,免得时间久了,忘记怎么回事。

首先是arm工具链,arm工具链的编译我就不写了,一方面很麻烦,另一方面是这方面的资料网上已经有很多了,我就不在这里多言浪费大家时间了。我这里有自己编译的arm工具链,当然,用网上现成的也不是不可以,但是最好是自己熟悉过程,免得必要的时候不会从源码配置。我将工具链上传到空间,如果需要,尽管拿去,链接地址为,使用说明看资源备注:

http://download.csdn.net/detail/girlkoo/3689485

这样,就可以开发普通的arm裸机程序了,现在开发环境是有了,编写可以编译通过的代码很是容易,但是编写真正运行正常的却不那么简单,因此,烧录工具还是必要的,我推荐是用minicom和dnw,minicom模拟与windows下的超级终端有相同的功能,这样就可以像windows下开发环境一样与vivi对话了,另外,我在网上下来多个dnw和dnw2,但是发现dnw2在某些情况下不是很稳定,当然也有听说的成分,不管怎么说,就是个工具,不管哪个,用着顺手就行,我用的是dnw,也可能是我点背,下载的几个dnw烧录大的镜像可以,但是烧录自己开发的程序,只有二三百K的小文件却老是出错,还好linux下是开放源码的,于是我就修改了一番,当然,限于水平因素,可能曲解了原作者的意图,不过巧合的是烧录小文件正常了,大的文件也可以,或许你用的时候并没有这个问题,那么请您使用原版的dnw,指出小弟缺点,如果不幸弄巧成拙求诸位不要喷我,下面是我修改后的dnw源码及使用说明,下载地址是:

http://download.csdn.net/detail/girlkoo/3689525

配置好上面两个工具后就可以开发arm2440的裸机程序了,当然移植系统可能还会用到其他牛B的工具,等用到再去研究,如果有幸小弟弄明白了,还会来这里记录下来的,下面附上两个linux下的arm裸机程序及makefile,感觉对我这样的新手来说还是有帮助的。

例子1:汇编文件led_on.S,代码如下,这里我想告诉大家的是GNU的汇编跟标准的arm汇编是有出入的,具体的大家可以搜索“linux arm 汇编”来学习了解,网友给我们提供了足够丰富的资源。

  1. .text  
  2. .global _start  
  3. _start:  
  4.     ldr r0,=0x56000010  
  5.     ldr r1,=0x00155555  
  6.     str r1,[r0]  
  7.     ldr r0,=0x56000014  
  8.     mov r1,#0x0  
  9.     str r1,[r0]  
  10. MAIN_LOOP:  
  11.     b MAIN_LOOP  

编译指令如下:

 

编译:arm-linux-gcc -g -c -o led_on.o led_on.S

链接:arm-linux-ld -Ttext 0x30000000 -g -o led_on.elf led_on.o

转换:arm-linux-objcopy -O binary -S led_on.elf led_on.bin

makefile可以这样写:

  1. led_on.bin:led_on.S  
  2.     arm-linux-gcc -g -c -o led_on.o led_on.S  
  3.     arm-linux-ld -Ttext 0x30000000 -g led_on.o -o led_on_elf  
  4.     arm-linux-objcopy -O binary -S led_on_elf led_on.bin  
  5. clean:  
  6.     rm -f led_on.bin led_on_elf *.o  

 

例子2:如果使用厂家提供的Download and run,还可以编写纯C语言代码来操作arm芯片,下面是流水等的代码:

  1. #define GPBCON    (*(volatile unsigned *)0x56000010)  
  2. #define GPBDAT    (*(volatile unsigned *)0x56000014)  
  3. #define GPBUP     (*(volatile unsigned *)0x56000018)   
  4. #define MPLL100MHz      0x0007f022  
  5. #define CLKDIV2         0x02  
  6. #define rMPLLCON    (*(volatile unsigned *)0x4c000004)   
  7. #define rCLKDIVN    (*(volatile unsigned *)0x4c000014)   
  8. int main()  
  9. {  
  10.     int i = 0;  
  11.     int count = 0;  
  12.     int LEDS[4] = {0x1c0, 0x1a0, 0x160, 0xe0};  
  13.   
  14.     rMPLLCON = MPLL100MHz;  
  15.     rCLKDIVN = CLKDIV2;  
  16.     GPBCON = 0x00155555;  
  17.     GPBUP  = GPBUP & 0xFF00;  
  18.   
  19.     while(1)  
  20.     {  
  21.         for(count = 0; count != 4; ++ count)  
  22.         {  
  23.             GPBDAT=LEDS[count];  
  24.             for(i = 0; i<0x30000;i++ );  
  25.         }  
  26.     }  
  27. }  

命令行下的编译流程我就不写了,直接把makefile贴在这里吧
  1. led.bin:led.c  
  2.     arm-linux-gcc -g -c -o led.o led.c  
  3.     arm-linux-ld -Ttext 0x30000000 -g led.o -o led.elf -e main  
  4.     arm-linux-objcopy -O binary -S led.elf led.bin  
  5. .PYTHON:clean  
  6. clean:  
  7.     rm *.o led.elf led.bin  
这里我想提醒一下,纯C的makefile与汇编的makefile是有点区别的,由于C的主函数是main,但是arm执行环境并不知道是main,因此需要显式的指定arm入口函数-e main,其他的就没什么可说的了,多文件编译可以使用推导,我相信到这里大家都能自己编写多文件的makefile了,我就不多说了,如果有朋友对此有疑问大家一块讨论,共同进步还是好的。
关键字:Linux  arm裸机  开发环境 引用地址:Linux下arm裸机开发环境搭建与实例

上一篇:Arm 2440——Nand flash启动模式详解(LED程序为例)
下一篇:S3C6410学习——Nand flash陷阱

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

在MIPS开发板上建立Linux系统及开发环境
作者Email: jie_yi@sohu.com 介绍了利用已有的MIPS版Linux源文件包,编译可运行的Linux内核的方式;讨论了在主机上建立相关服务器,通过NFS服务从主机上下载内核,在无盘开发板上启动Linux的方法。 关键词:MIPS NFS 启动Linux 一、引言 大多数基于MIPS处理器的平台上都没有提供软、硬盘接口,一般情况下,也没有在板载Flash里烧入可使用的操作系统。没有操作系统,用户的使用就会受到很多限制,应用程序的开发、调试过程就会变得相当复杂。因此,建立合适的操作系统及开发环境,可以方便用户,简化开发调试过程。本文以RedHat Linux 为例,说明在RM7000A处理器无盘
[嵌入式]
LinuxARM/DSP双核系统通信接口设计
  引 言   嵌入式系统的核心是嵌入式微处理器和嵌入式操作系统。早期的嵌入式系统硬件核心是各种类型的8位和16位单片机;而近年来32位处理器以其高性能、低价格,得到了广泛的应用。近年来,又出现了另一类数据密集处理型芯片DSP。DSP由于其特殊的结构、专门的硬件乘法器和特殊的指令,使其能快速地实现各种数字信号处理及满足各种高实时性要求。随着现代嵌入式系统的复杂度越来越高,操作系统已成为嵌入式系统不可缺少的部分。免费的嵌入式操作系统,如Linux等,随着自身不断的改善,得到了飞速的发展。Linux是一个免费的、强大的、可信赖的、具有可伸缩性与扩充性的操作系统。Linux实现了许多现代化操作系统的理论,并且支持完整的硬件驱
[单片机]
<font color='red'>Linux</font>下<font color='red'>ARM</font>/DSP双核系统通信接口设计
基于linux2.6.30.4的s3c2440寄存器的虚拟地址和物理地址的关系
1 想一次修改某个目录下所有文件的权限,包括子目录中的文件权限也要修改,要使用参数-R表示启动递归处理。 刚开始学字符设备驱动,感觉最难的是驱动和底层硬件的连接。linux上的驱动程序,是基于操作系统之上的,他并不直接和底层的硬件打交道,但是我们写的驱动必须能使硬件“跑”起来,即与硬件紧密相连。 就拿最简单的LED驱动来说,我们的驱动程序是在虚拟的内存上面跑的,但是最终,LED的点亮还是必须靠GPIO管脚的高低电平来控制。那么,我们的虚拟的内存怎么才能和实际的硬件上面的寄存器对应起来呢? 这篇要写的就是ioremap这个映射函数,他可以将我们硬件上面的寄存器,映射为虚拟的内存,从而使驱动程序在我们的虚拟的内存中运行。 #incl
[单片机]
ARM-Linux驱动--ADC驱动(中断方式)
硬件平台:FL2440 内核版本:2.6.28 主机平台:Ubuntu 11.04 内核版本:2.6.39 原创作品,转载请标明出处:http://blog.csdn.net/yming0221/archive/2011/06/26/6568937.aspx 这个驱动写了好久,因为原来的Linux内核编译的时候将触摸屏驱动编译进内核了,而触摸屏驱动里的ADC中断在注册的时候类型选择的是 IRQF_SAMPLE_RANDOM,不是共享类型,所以,自己写的ADC驱动在每次open的时候,总提示ADC中断注册失败。 解决方案: 重新配置内核,选择触摸屏驱动以模块的形式编译,而不是直接编译进内核,这样Linux在启
[单片机]
<font color='red'>ARM</font>-<font color='red'>Linux</font>驱动--ADC驱动(中断方式)
OK6410A 开发板 (八) 52 linux-5.11 OK6410A linux内存管理相关配置
arm32 要不要配置 CONFIG_HIGHMEM 前提为 vmalloc_min 为 0xf000 0000 , 且 内核空间大小:用户空间大小 = 1:3 如果内存 = 768MB 想全部内存做 线性映射 不配置CONFIG_HIGHMEM //配置了也无所谓,如果是 vmalloc(基于vmap)会做映射,这样就是双重映射(同一个物理页,线性映射一次,vmap映射一次) 想一部分内存 做 线性映射,一部分做高端内存映射 配置 CONFIG_HIGHMEM 并将 vmalloc_min 设置为比0xf000 0000更低的值(具体取决于一部分与另一部分的比例) // 举个例子,内存有7
[单片机]
OK6410A 开发板 (八) 33 linux-5.11 OK6410A 内存管理第一阶段
A arch/arm/kernel/head.S 中的 stext符号 - __turn_mmu_on 符号 ----此时开了MMU,开启了虚拟内存时代 流程 mrc p15, 0, r9, c0, c0 // 将 cpuid 存储到 r9 __lookup_processor_type // 根据 r9 中的值 ,获取 procinfo 并存储到 r5 movs r10, r5 // 获取 procinfo 并存储到 r10 __vet_atags // 验证 atags __create_page_tables // 内存管理相关1 // clear 50004000 - 50007
[单片机]
linux – 如何在buildroot中重建rootfs
The make command build all targets 您不希望这样做(直到配置Buildroot). 首先需要通过指定目标板来配置Buildroot. 根据manual,您可以从头开始,或者为您的AT91SAM9X25板创建一个Buildroot配置文件,该板来自类似的板,例如configs/at91sam9g20dfc_defconfig 除了Buildroot配置文件,您还需要一个Linux内核配置文件(除非您想尝试从头开始配置内核). 带有AT91SAM9x5的Atmel评估板的内核配置文件是at91sam9x5ek_defconfig 您还应阅读第3.4.2节.创建自己的板支持 So the first m
[单片机]
用户关注实时性性,Linux使用率仍然偏低
日前在美国硅谷举办的嵌入式系统研讨会(Embedded Systems Conference)上,一份针对嵌入式操作系统的调查显示,目前(美国)只有17%的嵌入式系统设计工程师采用嵌入式Linux,而66%的人表示他们要么对此没有兴趣,要么就是今后也不会用。 EE Times及其姊妹出版物Embedded Systems Design的“2006年嵌入式系统设计状况调查报告”发现,34%的受调查表示对Linux不感兴趣,2/3的受调查对象说他们对Linux有兴趣,但是,最近不会使用;而17%的人则说他们可能很快就会采用。相比之下,2005年有24%的受调查者表示他们正在使用嵌入式Linux。 在考虑使用嵌入式Linux
[焦点新闻]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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