驱动编程错误分析

  1. Makefile:1: *** missing separator.  Stop
问题原因是格式不正确,可能是没有table,可能是if和括号之间没有空格
2.  No such device
可能是/dev/下的设备有问题。
也可能是内核模块有问题,return -ENODEV会产生这个错误
3.  dereferencing pointer to incomplete type
多半是定义了结构体,但是没有用结构体定义变量而是直接用了结构体的定义的名字,另外的问题是结构体名字打错了
4.  implicit declaration of function 'blk_queue_hardsect_size'
这个错误一般是未定义或者缺少头文件,
但是对于这个函数是一个高版本删除的函数,已经被 blk_queue_logical_block_size替换,直接用这个就可以。
5.'struct device' has no member named 'bus_id'
其中bus_id已经被 init_name代替,
static inline const char *dev_name(const struct device *dev)
{
/* Use the init name until the kobject becomes available */
if (dev->init_name)
return dev->init_name;
return kobject_name(&dev->kobj);
}
extern int dev_set_name(struct device *dev, const char *name, ...)
6. waning : useless storage class specifier in empty declaration
这是在定义结构体的时候加了static的原因
7. error: unknown field 'ioctl' specified in initializer问题是由于2.6.36内核之后 去掉了原来的ioctl,添加两个新的成员,所以会出错

long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);

 long (*compat_ioctl) (struct file *, unsigned int, unsigned long);

 所以修改源文件中file_operations内.ioctl 改为 .compat_ioctl 即可

8.error: negative width in bit-field ‘

权限问题,尝试降低权限

9.error: 'TASK_INTERRUPTIBLE' undeclared

原因缺少头文件 #include  添加后即可通过编译

10.hexdump: /dev/event0: No such file or directory

看看是不是在/dev/input/event0,而不是/dev/下

11.switch 中提示Expected expression before..."

除了检查switch和case之外,注意case后面的宏在定义的时候是不是加了;

12.file_operation中的方法实现不加static会提示重复定义。

13.

grep "key" xxx.log时输出

Binary file xxx.log matches

百度了一下:grep认为这是二进制文件,解决方案:grep -a。

grep -a "key" xxx.log


14.useless storage class specifier in empty declaration

 struct item {
    char *text;
    int count;
    struct item *next;
};
修改为:
typedef struct item {
  char *text;
  int count;
  struct item *next;
}item;



你可能感兴趣的:(驱动)