本文章是我在写驱动代码时候出现的错误积累,在此记录。

错误一:xxx未在这里声明

error: ‘of_match_name’ undeclared here (not in a function)of_match_name = beep_of_mach,  //设备树匹配

解决方法:找到出现错误的那一行代码,检查xxx是否写错。

  
错误二:结构体出错

42:19: error: ‘struct device’ has no member named ‘dev’miscbeep.nd = dev->dev.of_node;

解决方法:结构体出错,都怪这个只能填补
正确的函数名称:
static int miscbeep_probe(struct platform_device *dev)
但是我的函数名称参数是这样的
static int miscbeep_probe(struct device *dev)

害,我还是直接搜索错误中的’struct device’才发现的。建议有这个错误的可以CTRL+F 搜索报错的’xxx’
  
  
错误三:解除对不完整类型的指针的引用

41:6: error: dereferencing pointer to incomplete typefilp->private_data = &miscbeep;^

出现问题的地方:在智能补全的插件下,我是学习了不少的错误
正确的写法:static int miscbeep_open(struct inode *inode, struct file *filp)

解决方法:把后面的struct filp *filp改回struct file *filp

  
  
错误四: 缺少;

69:1: error: expected ‘,’ or ‘;’ before ‘static’static int miscbeep_probe(struct platform_device *dev)^

解决方法:找到箭头所指的前一个命令,可以发现缺少了个’;’

  
  
错误五:错误使用中文

65:1: error: stray ‘\357’ in programerror: stray ‘\274’ in programerror: stray ‘\233’ in program

解决方法:错误使用了中文的; 改用英文的;
  
  
错误六:Makefile文件未修改

make[2]: *** No rule to make target '/home/kong/linux/IMX6ULL/Linux_Driver/21_input/keyintput.c', needed by '/home/kong/linux/IMX6ULL/Linux_Driver/21_input/keyintput.o'。 停止。
Makefile:1384: recipe for target '_module_/home/kong/linux/IMX6ULL/Linux_Driver/21_input' failed

问题原因:Makefile的obj-m := 这里没有修改成要编译的.c文件
解决方法:将要编译的文件名称填上去

  
  
错误七:形参错误

150:2: error: too many arguments to function ‘keyio_init’keyio_init(&imx6uirq);

问题原因:keyio_init()函数的形参错误,填写过多、或者填写错误
解决方法:前往keyio_init()函数查找形参类型、数目,重新填写形参
  
  

错误八:缺少头文件或者写错

159:2: error: implicit declaration of function ‘input_register_device’ [-Werror=implicit-function-declaration]ret = input_register_device(keyinputdev.inputdev);^
166:2: error: implicit declaration of function ‘input_free_device’ [-Werror=implicit-function-declaration]input_free_device(keyinputdev.inputdev);

出现问题:缺少头文件或者写错,我第一次是缺少头文件报这种错误。第二次是写错了也会报这种错误
解决方法:查找该函数所需的头文件,可以man命令,也可以直接去Linux内核源码查找
  
  
错误九:函数形参过少

73:9: error: too few arguments to function ‘alloc_chrdev_region’ret = alloc_chrdev_region(&ap3216cdev.devid, AP3216C_CNT, AP3216C_NAME);^

问题原因:aoolc_chrdev_region()函数的形参填少了,后来去查找定义时发现缺少了0
解决方法:查找该函数的定义,找到形参。正确填写形参
  
  

错误十:缺少*

48:38: error: conversion to non-scalar type requestedstruct i2c_client *client = (struct i2c_client)dev->private_data;^

问题原因:转换到请求的非标量类型,(struct i2c_client)缺少了一个*
解决办法:修改为(struct i2c_client *)

  
  
错误十一:请求成员变量不在一个结构体或者联合体里面

75:5: error: request for member ‘addr’ in something not a structure or unionmsg.addr =client->addr; //从机地址,也就是AP3216C地址^
/home/kong/linux/IMX6ULL/Linux_Driver/22_iic/ap3216c.c:76:5: error: request for member ‘flags’ in something not a structure or unionmsg.flags = 0; //表示发送

问题原因:在前面定义了一个msg[1],但是这里直接使用了msg,而不是msg[0]或者msg[1]
解决办法:可以把前面定义的msg[1]变成msg、或者后面的msg变成msg[0]或者msg[1]
  
  

错误十二:没有这个变量

119:6: error: ‘struct ap3216c_dev’ has no member named ‘os’dev->os = (((unsigned short)buf[5] & 0x3f) << 4) | (buf[4] & 0x0F);

问题原因:dev->os没有这个变量
解决办法:检查正确的变量名称
  
  

错误十三:静态声明函数没有按照静态的声明方式

133:12: error: static declaration of ‘ft5x06_ts_irq’ follows non-static declarationstatic int ft5x06_ts_irq(struct i2c_client *client, struct ft5x06_dev *dev)

问题原因:其实说人话就是该函数定义的在了使用函数的下面,内核编译的时候,从第一行代码开始,逐渐向下编译,但是ft5x06_ts_irq函数的使用是在定义该函数的前面,才会出现这个报错
解决办法:找到使用该函数的函数,把出现错误的函数剪切到使用该函数的函数的前面
  
  

错误十四:未定义变量

177:28: error: ‘FT5X06_DEVICE_MODE_REG’ undeclared (first use in this function)ft5x06_write_reg(&ft5x06, FT5X06_DEVICE_MODE_REG, 0); //进入正常模式

错误原因:FT5X06_DEVICE_MODE_REG这个未定义,第一次在这里使用
解决办法:多半是FT5X06_DEVICE_MODE_REG这个写错了,没有在文件中找到该定义。

Linux驱动开发之常见error汇总相关推荐

  1. Linux驱动开发必看详解神秘内核(完全转载)

    Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html IT168 技术文档]在开始步入Lin ...

  2. 【正点原子MP157连载】第二十三章 Linux设备树-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  3. 【正点原子MP157连载】第二十章 字符设备驱动开发-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  4. Linux 驱动开发 三:字符设备驱动框架

    一.参考 (3条消息) Linux 字符设备驱动结构(一)-- cdev 结构体.设备号相关知识解析_知秋一叶-CSDN博客 (3条消息) linux设备驱动框架_不忘初心-CSDN博客_linux设 ...

  5. 最全Linux驱动开发全流程详细解析(持续更新)

    Linux驱动开发详细解析 一.驱动概念 驱动与底层硬件直接打交道,充当了硬件与应用软件中间的桥梁. 具体任务 读写设备寄存器(实现控制的方式) 完成设备的轮询.中断处理.DMA通信(CPU与外设通信 ...

  6. linux驱动开发的经典书籍

    Linux驱动学习的最大困惑在于书籍的缺乏,市面上最常见的书为<linux_device_driver 3rd Edition>,这是一本很经典的书,无奈Linux的东东还是过于庞大,这本 ...

  7. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之总线设备驱动模型

    文章目录 前言 1.驱动编写的三种方法 1.1.传统写法 1.2.总线驱动模型 1.3.设备树驱动模型 2.Linux实现分离:Bus/Dev/Drv模型 2.1.Bus/Dev/Drv模型 2.2. ...

  8. 嵌入式linux应用层中断函数,嵌入式LINUX驱动开发(中断处理函数)

    嵌入式LINUX驱动开发(中断处理函数) 2020年08月11日 | 萬仟网网络运营 | 我要评论 嵌入式LINUX驱动学习之7中断相关(一)中断处理函数一.函数.头文件及说明二.编译举例:一.函数. ...

  9. Linux nor flash分区,Linux驱动开发笔记:NOR FLASH编写实例

    1. 背景介绍 板子上的zynq通过emc外接一块nor flash,地址分配如下: Nor flash的起始地址为0x80000000.当zynq上运行Linux后可以通过对该地址起始的区域进行擦除 ...

最新文章

  1. (转)个例子让你了解Java反射机制
  2. IOS开发基础之截图、图片文字水印
  3. 6675温度波动大_现场温度仪表安装调试常见的故障分析与处理方法
  4. 解决CAJ阅读器读取学位论文卡到爆炸的问题
  5. 李国庆与当当,一个中国网络书店的传奇
  6. [摘录]谁说大象不能跳舞目录
  7. 目标决定人生——没有目标就失去一切 (转载)
  8. python自动玩2048
  9. Ubuntu20.4 ping baudu.com contect: 网络不可达
  10. C#通过TCP实现 HL7医疗系统传输的协议,并使用MLLP协议接收HL7消息并解析
  11. Word文件如何查看字数
  12. css中的*代表什么
  13. flask-socketio实现的网页聊天室(一)
  14. AVI视频封装格式(阅读笔记)
  15. Excel 使用小妙招之解决“##”显示问题
  16. scp或者ssh报错“no matching host key type found. Their offer: ssh-rsa,ssh-dss“
  17. Adobe Flash Builder 4.5的安装
  18. Docker 容器 ----介绍安装基本命令
  19. Outlook 2021 for Mac v16.52预览版
  20. access设计视图打不开_5、使用数据视图创建表(ACCESS图解操作系列)

热门文章

  1. 科技巨头竞速无人车落地:Waymo One 向左,百度Robotaxi向右
  2. DP4344音频转换芯片ACD/DAC完全兼容CS4344音频解码
  3. BZOJ3837: [Pa2013]Filary
  4. 计算机视觉算法实习生:大厂面试经历(百度、京东、滴滴、字节、美团,旷视,快手,小米)
  5. FC200 长广防盗维修专家
  6. 为什么我推荐用户故事地图?
  7. opencv中的人脸检测案例
  8. Edge浏览器的书签(收藏夹)文件夹地址在哪?
  9. [面试] 各大IT公司校园招聘程序猿笔试、面试题集锦
  10. 【LRD,DLR】BST的后续遍历序列,二叉树中和为某一值的路径