读书人

函数原型在哪解决方法

发布时间: 2012-02-23 22:01:35 作者: rapoo

函数原型在哪
#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中应该还包含有其他的头文件!

或者直接查找内核源文件!

读书人网 >驱动开发

热点推荐