当前位置: 代码迷 >> 驱动开发 >> 函数原型在哪解决方法
  详细解决方案

函数原型在哪解决方法

热度:39   发布时间:2016-04-28 11:07:40.0
函数原型在哪
#include "beepdrv.h"


#define DEV_NAME "beep"

#define GPIO_IOBASE io_p2v(GPIO_BASE)



static struct semaphore beep_sem;


static int tp_beep_open(struct inode *inode, struct file *filp)

{
  __raw_writel(_BIT(7), GPIO_P3_OUTP_SET(GPIO_IOBASE));//SET GPIO_07

  try_module_get(THIS_MODULE);

printk( KERN_INFO DEV_NAME " opened!\n");

  return 0;

}


static int tp_beep_release(struct inode *inode, struct file *filp)

{
  __raw_writel(_BIT(7), GPIO_P3_OUTP_SET(GPIO_IOBASE));//SET GPIO_07

  module_put(THIS_MODULE);

  printk(KERN_INFO DEV_NAME " released!\n");

  return 0;

}

这是开发板驱动编程的部分代码,其中,__raw_writel,io_p2v,try_module_get,module_put等这些函数的原型在哪可以找到,还是像XP系统那样只要会用这些函数,不需要理解?

但又有一个问题,Linux不是开源的吗,但我在Linux系统中/usr/include中都好像找不到上面这些函数定义,刚玩Linux, 请教了..

------解决方案--------------------
用SourceInsight看源代码,很有可能只是宏定义。。。。。。
------解决方案--------------------
你需要到 http://www.kernel.org/ 下载一份内核源码。

然后用grep搜对应的函数名,你就知道他们在哪了。

比如,__raw_writel,是在下面的头文件中:
./include/asm-generic/io.h:60:static inline void __raw_writel(u32 b, volatile void __iomem *addr)

C/C++ code
...static inline void __raw_writel(u32 b, volatile void __iomem *addr){    *(volatile u32 __force *) addr = b;}...
------解决方案--------------------
看看头文件beepdrv.h中应该还包含有其他的头文件!

或者直接查找内核源文件!
  相关解决方案