在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这个函数了
时间: 2024-11-05 12:25:33