OK6410裸机程序---hello world

发布者:月光男孩最新更新时间:2016-06-23 来源: eefocus关键字:OK6410  裸机程序  hello  world 手机看文章 扫描二维码
随时随地手机看文章
上面已经解决 了几个问题。

现在我们的状态:可以在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.  
  3. int main(void)
  4. {
  5.     show("hello world./n");
  6.     return 0;
  7. }

(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 引用地址:OK6410裸机程序---hello world

上一篇:s3c6410存储器映射
下一篇:ARM体系架构学习 -uboot分析之start.S

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

OK6410启动自动挂载nfs文件系统
①通过命令启动和停止ubuntu服务器的nfs 服务: 在命令行下运行: /etc/init.d/nfs restart 使用这个命令可以停止 nfs 服务: /etc/init.d/nfs stop 检查nfs服务器是否开启: service nfs status 重启对应的2个服务: service portmap restart service nfs restart 检查防火墙看是否屏蔽了nfs端口 service iptables stop service iptables status ②设置ubuntu待挂载目录的权限: sudo vi /etc/exports 添
[单片机]
Exynos4412裸机程序之操作ICache
一、首先普及一下什么是Cache 基于程序访问的局限性,在主存和CPU通用寄存器之前设置了一类高速的、容量较小的存储器,把正在执行的指令地址附件的一部分指令或数据从主存调入这类存储器,供CPU在一段时间内使用,这对提高程序的运行速度有很大的作用。这类介于主存和CPU之间的高速小容量存储器称作高速cache。比较常见的cache包括icache和dcache。 icache的使用比较简单,系统刚上电时,icache中的内容是无效的,并且icache的功能是关闭的,往CP15协处理器中的寄存器1的bit 写1可以启动icache,写0可以停止icache。icache关闭时,CPU每次取指都要读主存,性能非常低。因为icach
[单片机]
Exynos4412<font color='red'>裸机</font><font color='red'>程序</font>之操作ICache
是德科技年度技术盛会Keysight World Tech Day 2023即将重磅登场
汇聚行业嘉宾观点、前沿趋势分享及热门技术话题探讨 技术进步正在重塑人类的体验,改变人们的生活方式和工作方式。快速发展的技术,包括 5G、6G、自动驾驶汽车,以及非地面网络等新兴技术,越来越多地由 AI 和机器学习提供支持,加速了各行业无尽的想象力和创新。为了前瞻未来市场趋势、激活科技创新引擎,是德科技将于9月12日在上海浦东嘉里大酒店举办年度科技盛会Keysight World Tech Day 2023, 围绕“5G/6G-探索下一代无线技术”、“汽车自动驾驶与新能源”、“人工智能与高算力数据中心”三大行业方向展开探索,在为业界同仁和观众呈现技术盛宴的同时,重点聚焦如何帮助客户加速实现下一次创新。 是德科技年度技
[测试测量]
是德科技年度技术盛会Keysight <font color='red'>World</font> Tech Day 2023即将重磅登场
tiny4412裸机程序——代码重定位
在前面介绍exynos4412芯片启动过程时,我们知道:一上电,exynos4412首先执行固化在iROM中的代码,iROM首先设置程序运行环境(比如关看门狗、关中断、关MMU、设置栈、设置栈、启动PLL等),然后根据OM引脚确定启动设备(NAND Flash/SD卡/其他),把BL1从里面读出存入iRAM的0x02021400地址处,然后开始启动BL1;BL1从SD卡适当的位置读入14K字节的数据,存在iRAM地址0x02023400处,所以BL2不能大于(14K–4) 字节,这里引出了为什么写这一节的原因:如果我们的程序很大,大于14K怎么办? 运行地址和链接地址: 运行地址是程序当前所处的地址,即程序在运行时,所处的
[单片机]
mini2440烧写裸机程序(linux+supervivi+dnw)
一、编写源程序(init.S、testledC.lds、testledC.c、Makefile) @****************************************************************************** @ File:init.S @ 功能:通过它转入C程序 @****************************************************************************** .text .global _start _start: ldr r0, =0x53000000 @ WATCHDOG寄存器地址
[单片机]
Intel发布两款RealSense摄像头 可用于Windows Hello
1月19日消息 今天,据外媒报道, 英特尔 宣布推出两款RealSense摄像头新品,型号分别为D415和D435。   英特尔称,RealSense系列是“制造商和教育工作者的理想选择”。在D415上,英特尔采用了滚动快门,在D435上,英特尔采用了全局快门。   结合英特尔的RealSense SDK 2.0,开发人员可以开发各式各样的实感应用,这些实感应用可以和RealSense 400系摄像头搭配使用。   如果你的电脑不具有类似于Surface Pro那样的基于人脸识别的Windows Hello功能,那么要使用此功能,你可以为你的电脑外接一台英特尔RealSense摄像头。   D415的售价为149美元,合人民币约
[手机便携]
ARM—2410中断控制LED裸机程序
读者注意: 后面跟的是文件名,下面是代码,程序分为几个文件!!文件使用2410开发板调试,如换其他开发板需做部分修改! 一/汇编部分head.S @****************************************************************************** @ File:head.S @ 功能:初始化,设置中断模式、管理模式的栈,设置好中断处理函数 @****************************************************************************** .extern main .text .global _s
[单片机]
裸机程序在mini2440上的运行
你还在傻乎乎的用这种方法来运行裸机程序吗? 开发板用norflash启动,通过norflash里的supervivi辅助软件将led.bin裸机程序烧写进nandflash里面,然后运行它?这种办法耗时,而且nandflash里面的东西都会被擦除掉!鸡肋的办法,但是培训机构或网上的视频教程都是这样不辞辛劳的下载裸机程序! 这种方法的详细步骤: 1.从nor flash启动 2.通过supervivi的d命令用v命令是把程序下载到SDRAM就是内存的起始地址0x3000000中 其实v命令的过程是通过虚拟机的DNW先把程序下载到SDRAM中,然后执行了nand写操作,把0x30000000开始的那段代码复制到 了
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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