上面已经解决 了几个问题。
现在我们的状态:可以在PC - OK6410 之间进行tftp传输,确定了一下可用的地址 空间,下面我们来说一下printf调试 、
因为没有jlink,只能用printf调试,你也许会问,我们自己实现printf么?答曰:不是,我们只是弄个hello world,何必那么认真呢?
printf函数是uboot 实现的,我们只需要调用就行了。当然了,这个首先得到你uboot 的printf函数地址。这需要你自己编译 uboot,因为每个人
的printf函数地址不一定一样。查看System.map文件 ,找到printf地址。就行了。
调用时我们可以这样用:

  1. void (*show)(char*,...) = 0xc7e11650;
  2. ........
  3. show("hello world/n");
  4. .......

现在我们来个hello world 的例子:
贴一下代码:

  1. void (*show)(char *,...) = 0xc7e11650;
  2. int main(void)
  3. {
  4. show("hello world./n");
  5. return 0;
  6. }

(hello.c)
就这么简单。(一个hello world 能多复杂啊?嘎嘎~)
下面我们来说一下编译和连接:
你也会用:arm-linux-gcc hello.c
但是这是不对的,为什么呢? 我们来仔细想一个问题,我们是裸机(好吧,我承认稍微穿了一点),没有操作系统 。想想arm 执行时,它希望
执行的第一条指令是什么?肯定是一条有效的指令了。但是我们生成的这个a.out的前面是有效的可执行的语句么?也许你已经想到了,它的头不是什么
有效指令,是ELF头信息,还有你的用户 名呢,用户名不能执行吧?呵呵,开玩笑。

还有一个问题。
gcc默认的连接地址是你想要的么?八成不是吧。
鉴于以上原因我们要分步进行:
1:编译
arm-linux-gcc -c hello.c -o hello.o
生成hello.o文件。
2:链接 指定我们要的链接地址0x50000000
arm-linux-ld -Ttext=0x50000000 hello.o -o hello
这时你用arm-linux-objdump -d hello 反汇编一下,看看指令的起始地址是50000000吧?
3:去除头ELF头信息
arm-linux-objcopy -L elf32-littlearm -O binary hello hello.bin
这里elf32-littlearm 是指定大小端,咱小端的。
就这样,我们可以在裸板上运行 的二进制程序 就这样成了。为了以后方便可以把上面的指令写在Makefile里,一个make就all了。

下面就可以下到板子 上运行了,把hello.bin放在你PC上的tftp目录下面。板子上电 ,停留在uboot界面上。
tftp 50000000 hello.bin
go 50000000 (跳到这个地址执行,uboot的命令)
hello world 出来没?
没出来就找找哪里错了,找不出来的往后面跟啊童鞋们!!

OK6410裸机程序---hello world相关推荐

  1. ok6410linux开发环境搭建,飞凌嵌入式知识汇021期:OK6410裸机程序之开始模板(Linux环境)...

    手中有OK6410开发板,一直想试试通过Linux来做做裸机开发,在网络论坛上也搜过一些资料作参考,整理了一下并做了解释或改动,希望这些东西可以大家分享下. 裸机程序的构成 基本的裸机程序由启动代码和 ...

  2. OK6410裸机开发之LED灯

    平台:WinXP+eclipse+OpenJTAG 开发板:OK6410A 128M DDR 1G NandFlash ---------------------------------------- ...

  3. s3c6410裸机程序(1)

    嘿嘿,今天在博客园注册了新用户,来记录我的嵌入式学习流程,把自己的心得体会,教训经验,全部写出来,一来可以加深自己的印象,二来写出来让博客园中的高手看到,也可以给我批评指正哦 .@_@ 以前实际上算的 ...

  4. OK6410裸机调试

    OK6410裸机调试(使用串口,不需要使用JLINK) 通过串口裸机调试的有两种方法,一种是使用Windows系统自带的超级终端,另一种是使用三星公司提供的串口调试软件dnw,两种方法略有不同,但其本 ...

  5. 使用 NOR Flash 中的supervivi 下载裸机程序到NandFlash

    不容易啊,终于把 将MDK程序下载到我的mini2440开发板上的nand flash的方法找到了,我是利用韦东山老师的那套方法即利用DNW和supervivi下载到nand flash的.当然,只是 ...

  6. iar 连接linux开发板,LED裸机程序(IAR)

    LED裸机程序(IAR) 一.实验环境 开发环境:IAR5.30 开发板:UT-S3C6410 开发工具:JLINK V8 二.实验目的 在无操作系统的开发板上,运行程序,掌握裸机程序的开发过程,熟悉 ...

  7. arm-linux-gcc 裸机程序,Linux下ARM裸机开发-交叉工具链

    初识linux下ARM的裸机开发全过程.现在总结如下: 首先说明为什么要学习裸机开发,一方面bootloader的编写要用到裸机开发的知识,另一方面就是驱动的开发.一般情况下我们进行的系统上的开发. ...

  8. arm裸机程序启动流程

    Linux系统的引导: 一个SOC拿过来,它是有内部BROM和SRAM的,这个BROM中会固化芯片厂商的最初引导代码,我们叫它RBL(ROM boot loader),它是SOC上电后开始运行的地方, ...

  9. arm裸机与嵌入式linux驱动开发,如何编写基于ARM的裸机程序和基于Linux的驱动程序?...

    在嵌入式开发中,ADC应用比较频繁,本文主要讲解ADC的基本原理以及如何编写基于ARM的裸机程序和基于Linux的驱动程序. ARM架构:Cortex-A9Linux内核:3.14 在讲述ADC之前, ...

最新文章

  1. 97. Leetcode 剑指 Offer 60. n个骰子的点数 (动态规划-背包问题)
  2. WEB接口测试之Jmeter接口测试自动化 (四)(持续构建)
  3. Vue.js(17)之 插槽
  4. .NET Core中异常过滤器ExceptionFilter的使用介绍
  5. 怎样才能去掉图片锁定纵横比_1分钟批量统一Word中300张图片的大小!无需插件、代码,超级简单...
  6. java登录界面命令_Java命令行界面(第7部分):JCommander
  7. vue-cli3.0(创建项目)如何引入element-ui(指令篇)
  8. linux监控脚本是否运行状态,Linux Shell脚本之通过json判断应用程序内部运行状态...
  9. 图像处理、分析与机器视觉(基于labview)_基于3D技术的机器视觉解决方案
  10. linux raid5卷,Linux逻辑卷及RAID5的创建
  11. [游戏制作]-C语言实现井字棋(三子棋)游戏简单版
  12. Http之客户端请求服务器,服务器响应客户端。通过Handler在主线程中读取数据
  13. rtmp服务器开源项目,rtmp直播相关的开源项目
  14. cuteFTP使用教程
  15. 项目系统设计和数据库设计(追光的人)
  16. Mybatis学习小结
  17. Python File(文件) 方法
  18. 三角函数π/2转化_【数学知识点】完整版三角函数诱导公式
  19. 学数控编程,知道这三段代码就够了,很实用
  20. 第十章 Java数据结构

热门文章

  1. 中移4G模块-ML302-OpenCpu开发-(固件编译和烧录)
  2. scrapy使用selenium抓取深圳证券交易所考评表数据
  3. 使用selenium启动(无界面)浏览器的隐私模式
  4. 网络爬虫之css选择器
  5. pandas 根据两列数据筛选dataframe
  6. 好玩的python代码聊天客户端_python socket实现客户端与服务器端对话
  7. php读写分离是什么意思,php mysql读写分离
  8. linux eth_p_ip,linux数据链路访问之ETH_P_ALL等等
  9. AOP之proceedingjoinpoint和joinpoint区别(获取各对象备忘)、动态代理机制及获取原理代理对象、获取Mybatis Mapper接口原始对象...
  10. Linux 下安装nodejs