
Linux驱动开发
文章平均质量分 81
yang-zxy
让自己有实力。。。
展开
-
Linux内核版本不同,导致找不到相关的头文件解决办法
问题背景:在公司做项目的时候要把一个无线驱动模块从旧的CPU平台移植到新的CPU平台上,然后新的CPU平台用的内核版本和旧的不一样,导致很多头文件无法查找,如图所示:类似这种问题,其实不难解决,只要你了解Linux内核的架构,就会发现在内核中相应的头文件都在固定的目录下,这里我列出ARM+Linux驱动相关头文件的信息:#include 在Linux-版本号/inclu转载 2015-08-21 16:23:19 · 5641 阅读 · 0 评论 -
linux驱动开发(一)—GPIO驱动框架
前言 GPIO驱动是Linux驱动开发中最基础、但却是很常用、很重要的驱动。比如你要点亮一个LED灯、键盘扫描、输出高低电平等等。而Linux内核的强大之处在于对最底层的GPIO硬件操作层的基础上封装了一些统一的GPIO操作接口,也就是所谓的GPIO驱动框架。这样开发人员可以调用这些接口去操作设备的IO口,不需要担心硬件平台的不同导致IO口的不同。 今天,我原创 2016-01-26 20:18:15 · 25064 阅读 · 1 评论 -
驱动模块加载错误:insmod: can't insert 'xx.ko': invalid module format
前言这个错误其实我遇到过几次了,当初学生时代玩FL2440开发板的时候编写驱动就遇到过这种错误,那时候是请教了我的嵌入式导师郭工解决的,不过那时事后没有及时去反思为什么。现在工作了遇到了同样的问题,自己尝试去解决了才明白。问题背景和解决方法这个问题源于那时候我用于编译驱动的内核和运行在开发板上的内核镜像配置不同导致的。后来参考了网上的博客,导致这个问题的原因其实挺多的,这里总结如下:原创 2016-01-12 18:24:00 · 28180 阅读 · 5 评论 -
Linux内核—EXPORT_SYMBOL宏的使用
前言EXPORT_SYMBOL宏的使用时出现在Linux-2.6之后,在Linux-2.4内核中,默认的非static 函数和变量都会自动导入到kernel 空间, 都不用EXPORT_SYMBOL() 做标记的。然后Linux-2.6之后默认不导出所有的符号,所以使用EXPORT_SYMBOL() 做标记。1.EXPORT_SYMBOL宏的作用EXPORT_SYMBOL标原创 2016-01-30 17:41:36 · 25000 阅读 · 0 评论 -
驱动开发误用指针错误:Unable to handle kernel NULL pointer dereference at virtual address
前言 今天,来说说驱动开发中误用指针导致的错误:Unable to handle kernel NULL pointer dereference at virtual address xxxxxxxx。这个错误是我当作在做液晶驱动使用DMA的时候遇到的,在分配DMA传输用的内存的时候引用了一个空的指针导致的错误!错误打印信息如下:[ 72.820000] Unable t原创 2016-02-16 19:28:05 · 55368 阅读 · 3 评论 -
Linux驱动开发错误:module license 'unspecified' taints kernel.
前言今天我要来说说在Linux驱动开发中Makefile编写规则的问题。其实这是驱动开发中的基础性的问题,怪自己基础不够扎实啊,犯了这样的低级错误。写这篇文章让自己巩固一下基础吧,唯有厚积,才能薄发!扎实的编程基础,是一个底层软件工程师应该具备的素质,这样才能年薪百万,迎娶白富美,走上人生巅峰!麻痹,老子又在意淫了,女朋友在哪里都还不知道,说多了都是泪,言归正传!别装逼了!讲正事!1 Li原创 2016-02-22 00:05:37 · 10677 阅读 · 2 评论 -
linux驱动开发—基于Device tree机制的驱动编写
前言Device Tree是一种用来描述硬件的数据结构,类似板级描述语言,起源于OpenFirmware(OF)。在目前广泛使用的Linux kernel 2.6.x版本中,对于不同平台、不同硬件,往往存在着大量的不同的、移植性差的板级描述代码,以达到对这些不同平台和不同硬件特殊适配的需求。但是过多的平台、过的的不同硬件导致了这样的代码越来越多,最终引发了Linux创始人Linus的不满,原创 2016-02-24 20:15:07 · 9561 阅读 · 2 评论 -
一次意外的ioctl调用错误—论不同版本内核的ioctl函数实现
前言 人要经常学会反思总结,这样才能不断的进步。同样,一个合格优秀的软件工程师也需要经常的总结反思自己工作中遇到的问题,这样才能使自己的能力不断的提升。我从来不给自己定位为程序猿,多年后,请叫我软件工程师乃至软件架构师,哈哈,又装逼了我!纵使我现在还年轻,能力阅历还未达到大师级别,但是人要有梦想,万一实现了呢?可是相比较梦想,我觉得有目标比较实际。卧槽,每次写博客都是这样,先是原创 2016-03-29 20:30:12 · 11498 阅读 · 3 评论 -
Linux驱动开发(二)—DMA的使用(一)
1 DMA概念DMA顾名思义就是指设备和内存之间、内存和外部存储设备之间进行直接的数据读写操作,而不需要CPU的参与。2 DMA原理 DMA传输需要由DMA控制器DMAC进行,当需要进行DMA传输的时候,DMA控制器会发出占用总线的请求,当CPU响应DMA的请求时,暂时放弃对总线的控制权,当DMA传输结束的时候,DMAC会向I/O接口发出结束命令,并将总线控制权交还给CPU原创 2016-05-07 16:39:49 · 8471 阅读 · 1 评论