#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中应该还包含有其他的头文件!
或者直接查找内核源文件!