在ARM裸板驱动编程中,是不允许程序直接调用C库程序的。为什么呢?因为此时kernel还没有被加载,所以在封装在kernel层的C库的API是用不了的,那怎么办?

在开发过程中,printf的功能我不用再详细多说,就是用来debug调试程序的,有了printf,写代码出错的时候能够快速定位错误。

那么如何在裸板中调用呢?

1、首先,我们在u-boot源代码中找到System.map这个文件,打开后我们能看到以下信息:(太多了,我只列举一部分)

40c29e94 T memscan
40c29ebc T strstr
40c29f1c T memchr
40c29f50 T strmhz
40c29fbc T udelay
40c29fec T mdelay
40c2a010 t put_dec
40c2a238 t number.clone.1
40c2a450 t vsnprintf_internal.clone.3
40c2a8ec T simple_strtoul
40c2a998 T strict_strtoul
40c2aa10 T simple_strtol
40c2aa38 T ustrtoul
40c2aaac T simple_strtoull
40c2ab88 T vsprintf
40c2ab8c T sprintf

前面40开头的就是在uboot中的映射地址,右边的就是可以调用的api了。

接下来我们在.c中就可以这样定义声明:

//在uboot中找到printf的映射地址

40c135c0 T printf

#define vsprintf ((int (*)(const char *, ...))0x40c135c0)

在main函数中就可以自由调用printf这个函数了

最新文章

  1. Win7虚拟机无法打开内核设备:\\Global\\vmx86
  2. python之优雅处理套接字错误
  3. Selenium关键字驱动测试框架Demo(Java版)
  4. org.springframework.beans包
  5. informix数据库下导出表结构
  6. 轻松学习Linux之理解进程的管理与控制
  7. gcc的基础知识
  8. django group_by
  9. python 以面向对象的方式创建线程 实现售票系统
  10. [javascript]一种兼容性比较好的简单拖拽
  11. RH133读书笔记(10)-Lab 10 Exploring Virtualization
  12. JMeter中Ultimate Thread Group插件使用
  13. IntelliJ IDEA2017 + tomcat 即改即生效 实现热部署
  14. 电子技术经典资料汇总:PCB设计篇
  15. BZOJ1067 [SCOI2007]降雨量 线段树
  16. vue 给 图片添加一个默认图片
  17. unity, 在材质上指定render queue
  18. @WebService @WebMethod 详解
  19. 定义的函数在main中调用时提示找不到标识符
  20. 配置支持Basler的API函数的开发环境

热门文章

  1. java集合详解
  2. 列表(list)之二 -运用篇 -快速生成规律性列表
  3. es6第一章 continue
  4. CodeForces 916E Jamie and Tree(树链剖分+LCA)
  5. 【PYTHON】三级菜单
  6. 关于Java中的Null
  7. Discuz!另一处SSRF无须登陆无须条件
  8. [USACO14DEC]后卫马克Guard Mark
  9. ●BZOJ 4408 [Fjoi 2016]神秘数
  10. CTSC2017 铁牌记