Linux驱动设计编译错误信息集锦
1、warning: passing argument 2 of 'request_irq' from incompatible pointer type
http://blog.sina.com.cn/s/blog_7321be1101012gek.html
今天在些key的driver的时候。。。写完了编译出现一个warmming如下:
warning: passing argument 2 of 'request_irq' from incompatible pointer type
我的request_irq函数调用如下:
if(request_irq(key_info->irq_no, key_eint_handler, IRQF_DISABLED,"Mini2440_Key", &i))
{
return -1;
}
key_eint_handler函数的原型如下:
static void key_eint_handler(int irq, void *dev_id,struct pt_regs *regs)
问题出在key_eint_handler函数的原型,
应该由:
static void key_eint_handler(int irq, void *dev_id,struct pt_regs *regs)//错误的写法
改为:
static irqreturn_t key_eint_handler(int irq, void *dev_id)//正确写法
原因从内核源码入手。。。
在linux/include/linux/interrupt.h, line 60 左右有这么一个定义
typedef irqreturn_t (*irq_handler_t)(int, void *);
这个定义是什么意思呢?
它是指:定义一种函数指针类型irq_handler_t, 这种函数的返回类型为irqreturn_t,参数列表为int, void*
再来看request_irq的函数声明部分
kernel/irq/manage.c:
int request_irq(
unsigned int irq,
irq_handler_t handler,
unsigned long irqflags,
const char *devname,
void *dev_id)
request_irq的第二个参数是handler函数,类型是irq_handler_t,
也就是说:我定义的handler函数返回类型为irq_handler_t,
结合最上面说的
typedef irqreturn_t (*irq_handler_t)(int, void *);
那么。。。
handler函数应该是写成:
static irqreturn_t key_eint_handler(int irq, void *dev_id)//正确写法
2个参数。。。返回类型为irqreturn_t才是正确的!
2、WARNING: "__bad_udelay" undefined!
原因:udelay()的参数过大。
内核中对udelay()的定义:
......
#define MAX_UDELAY_MS 2
#define udelay(n)
(__builtin_constant_p(n)? \
( (n)>(MAX_UDELAY_MS *1000)?__bad_udelay() : __const_udelay((n)*((2199023U*HZ)>>11)) ): \
__udelay(n) )
......
3、
Linux驱动设计编译错误信息集锦的更多相关文章
- linux驱动调试--段错误之oops信息分析
linux驱动调试--段错误之oops信息分析 http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29401328&id= ...
- Linux驱动设计—— 中断与时钟
中断和时钟技术可以提升驱动程序的效率 中断 中断在Linux中的实现 通常情况下,一个驱动程序只需要申请中断,并添加中断处理函数就可以了,中断的到达和中断函数的调用都是内核实现框架完成的.所以程序员只 ...
- linux下将编译错误输出到一个文本文件
linux下将编译错误输出到一个文本文件 command > filename 把把标准输出重定向到一个新文件中 command > > filename 把把标准输出重定向到一个文 ...
- 利用huson的日志获取编译错误信息的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 使用hudson编译一百多个VC工程,输出的日志有6M之大,摆在我面前的一个问题是如何利用这个日志信息来获取编译错误信 ...
- Linux驱动设计—— 内核模块(一)
Linux内核理论基础 组成Linux内核的5个子系统:进程调度(SCHED)/内存管理(MM)/虚拟文件系统(VFS)/网络接口(NET)/进程间通信(IPC). 进程调度(SCHED) 在设备驱动 ...
- VS2012编译错误信息,错误列表却没显示
今天在写代码的时候,发现VS有编译错误,在错误列表里面却没有显示错误信息,百思不得其解. 后来终于发现,错误列表弄了个筛选,所以就看不到错误信息了,晕死.有遇到该问题的,可以参考下.
- Linux驱动设计——并发与竞态控制
并发的概念:多个执行单元同时.并行被执行. 共享资源:硬件资源(IO/外设等),软件上的全局变量.静态变量等. 四种并发控制机制(对共享资源互斥的访问):原子操作.自旋锁(spinlock).信号量( ...
- Linux驱动设计——字符设备驱动(一)
Linux字符设别驱动结构 cdev结构体 struct cdev { struct kobject kobj; struct module *owner; const struct file_ope ...
- Linux驱动设计——内存与IO访问
名词解释 内存空间与IO空间 内存空间是计算机系统里面非系统内存区域的地址空间,现在的通用X86体系提供32位地址,寻址4G字节的内存空间,但一般的计算机只安装256M字节或者更少的内存,剩下的高位内 ...
随机推荐
- 在iis6.0公布asp.net mvc3网站
在iis6.0发布asp.net mvc3网站 这个问题一直困扰了我很长一段时间,终于在今天综合网上查的资料把它解决了. 在iis6.0发布asp.net mvc3网站 1 需要在服务器下安装.n ...
- Linux下GCC的使用
1简介 GCC 的意思也只是 GNU C Compiler 而已.经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言:它现在还支持 Ada 语言.C++ 语言.Java 语言.Objective ...
- HTML--11marquee标签
页面的自动滚动效果,可由javascript来实现, 但是有一个html标签 - <marquee></marquee>可以实现多种滚动效果,无需js控制. 使用marquee ...
- Android IPC(inter-process Communitcation)
Android IPC(inter-process Communitcation) http://www.cnblogs.com/imlucky/archive/2013/08/08/3246013. ...
- GeekPwn2015胸卡ESP8266 12E串口调试
相信今年参加GeekPwn活动的很多同学都获得了一枚GeekPwn的胸牌,为方便大家对胸牌进行一些调试和破解,这里分享一些关于这枚胸牌的一些信息 :)如发现文章之中有错误之处,欢迎大家斧正! 0×00 ...
- How many instances created in the WebContainer
When the Servlet container starts, it: reads web.xml; finds the declared Servlets in the classpath; ...
- SingleThreadModel is deprecated in Servlet API version 2.4
Ensures that servlets handle only one request at a time. This interface has no methods. If a servlet ...
- CGI标准简介 ~ Django
CGI CGI(Common Gateway Interface)是WWW技术中最重要的技术之一 , 有着不可替代的重要地位 , CGI是外部应用程序(CGI程序)于Web服务器之间的接口标准 , 实 ...
- iOS System Services
System Services is a singleton class to gather all available information about a device. Over 75 met ...
- 怎么书写高质量jQuery代码
众所周知,jQuery现在已经非常流行,百度新首页中也已经开始使用jQuery,今天总结下怎么书写更好的jQuery代码使jQuery代码更好.更快的执行,希望本篇jQuery教程一改大家以前不合理的 ...