![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux驱动开发
文章平均质量分 70
关耳君2022
这个作者很懒,什么都没留下…
展开
-
作为嵌入式程序员需要了解的基本知识
预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #defi转载 2011-08-08 10:22:07 · 609 阅读 · 0 评论 -
sysfs接口函数的建立_DEVICE_ATTR
说道sysfs接口,就不得不提到函数宏 DEVICE_ATTR,原型是 #define DEVICE_ATTR(_name, _mode, _show, _store) \ struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store) 函数宏DEVICE_ATTR内封装的是__ATTR(_na转载 2012-10-10 16:22:47 · 594 阅读 · 0 评论 -
container_of()宏
在学习Linux驱动的过程中,遇到一个宏叫做container_of。 该宏定义在include/linux/kernel.h中,首先来贴出它的代码: /** * container_of - cast a member of a structure out to the containing structure * @ptr: the pointer to the转载 2012-10-18 15:23:23 · 492 阅读 · 0 评论 -
copy_from_user
copy_from_user函数的目的是从用户空间拷贝数据到内核空间,失败返回没有被拷贝的字节数,成功返回0. 这么简单的一个函数却含盖了许多关于内核方面的知识,比如内核关于异常出错的处理.从用户空间拷贝 数据到内核中时必须很小心,假如用户空间的数据地址是个非法的地址,或是超出用户空间的范围,或是 那些地址还没有被映射到,都可能对内核产生很大的影响,如oops,或被造成系统安全的影响.所以转载 2012-11-07 09:18:30 · 547 阅读 · 0 评论 -
简析Android init.rc
在 Android中使用启动脚本init.rc,可以在系统的初始化过程中进行一些简单的初始化操作。这个脚本被直接安装到目标系统的根文件系统中,被 init可执行程序解析。 init.rc是在init启动后被执行的启动脚本,其语法主要包含了以下内容: Commands:命令 Actions: 动作 Triggers:触发条件 Services:服务 Options: 选项 Propert转载 2012-12-03 16:50:02 · 444 阅读 · 0 评论 -
中断处理函数中不用disable_irq而用disable_irq_nosync原因
今天在写触摸屏驱动时在中断处理函数中使用disable_irq关中断发现在进入中断处理后内核就挂掉了,于是研究了一下才发现disable_irq关闭中断并等待中断处理完后返回, 而disable_irq_nosync立即返回. 在中断处理程序中应该使用disable_irq_nosync来关闭中断 先看一下disable_irq_nosync,内核代码中是这样解释的:转载 2012-12-10 15:20:46 · 470 阅读 · 0 评论 -
Make选项及makefile常用变量
Make命令可以带几种参数: 标志, 宏定义, 描述文件名和目标文件名, 标准形式为: Make [flags] [macro definitions] [targets] 在unix下, flags包含: -f file 指定file文件为描述文件. 如果file参数为"-", 描述文件指向标准输入, 如果没有"-f", 则系统默认当前目录下makefile或Makefile为描转载 2013-08-19 15:06:58 · 861 阅读 · 0 评论 -
Makefile中override 指示符
通常在执行make时,如果通过命令行定义了一个变量,那么它将替代在Makefile中出现的同名变量的定义。就是说,对于一个在Makefile中使用常规方式(使用“=”、“:=”或者“define”)定义的变量,我们可以在执行make时通过命令行方式重新指定这个变量的值,命令行指定的值将替代出现在Makefile中此变量的值。如果不希望命令行指定的变量值替代在Makefile中的变量定义,那么我们需转载 2013-08-09 15:47:34 · 894 阅读 · 0 评论 -
Makefile内置变量,递归式变量,直接展开式变量,条件赋值,追加赋值
将shell命令的输出赋值给变量: VALUE = $(shell 命令) Makefile中给变量赋值: = 是递归展开式变量 value1 = 5 value2 = $(value1) value1 = 6 最终$(value2)就变成了6 := 是直接转载 2013-08-07 16:43:53 · 1079 阅读 · 1 评论 -
i2c_msg一些标志的解释
I2C_M_IGNORE_NAK: 设置这个标志意味当前i2c_msg忽略I2C器件的ack和nack信号。 I2C_M_NOSTART: 设置这个标志意味当前i2c_msg不发送start信号。注意,其实调用bit_xfer的一开始就已经发了start信号了(程序第10行),这个标记无非就是标志是否发送地址第18行。其次,如果一个i2c_msg没有定义I转载 2012-09-28 11:44:40 · 3039 阅读 · 0 评论 -
fcntl函数说明
(1)fcntl函数说明 前面的这5个基本函数实现了文件的打开、读写等基本操作,这一节将讨论的是,在文 件已经共享的情况下如何操作,也就是当多个用户共同使用、操作一个文件的情况,这时,Linux 通常采用的方法是给文件上锁,来避免共享的资源产生竞争的状态。 文件锁包括建议性锁和强制性锁。 建议性锁要求每个上锁文件的进程都要检查是否有锁存,并且尊重已有的锁。在一般情况下,内核和系统转载 2012-08-16 11:38:18 · 464 阅读 · 0 评论 -
VIM 中复制和粘帖
在vi编辑器有一个寄存器的概念(concept of register),正是这个概念使我们可以进行多次的剪切和粘贴操作。在一般的编辑器中我们被限制只有一个剪切板可用,而在vi中最多时可以有26个剪切板供使用,这样就会大大的提高工作的效率。 在vi中,我们可以使用d或x来删除文本,但是经过这样操作所删除掉的文本并没有被vi所丢弃,而是被保存起来。我们可以使用p命令来粘贴刚刚所删掉的内容。下面来看转载 2012-08-09 10:47:18 · 8689 阅读 · 1 评论 -
Linux┊理解devfs、sysfs、udev
linux下有专门的文件系统用来对设备进行管理,devfs和sysfs就是其中两种。 一、devfs devfs是在2.4内核就出现了,它是用来解决linux中设备管理混乱的问题,你查看一下/dev下的设备文件就知道其中有许多是空的(也就是没有对应的硬件的),但是它们却必须存在,所以这给linux设备管理带来了很多麻烦,为了解决这个问题,linux内核开发人员开发了devfs,转载 2012-08-09 10:27:59 · 750 阅读 · 0 评论 -
globalmem.c:193:2: 错误:隐式声明函数‘kmalloc’ [-Werror=implicit-function-declaration]
隐式声明函数错误的意思是函数在未声明之前就被调用了,需要先声明这两个函数,版本变化导致这个错误的出现。 解决方法: 找到kmalloc与kfree的声明头文件并include进来就可以了 #include转载 2012-08-10 11:44:10 · 2299 阅读 · 0 评论 -
错误: 初始值设定项里有未知的字段‘ioctl’
这个错误网上搜索发现3.0.0.15版本内核 file_operation结构体已经删除了ioctl函数,取代的是: long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); long (*compat_ioctl) (struct file *, unsigned int, unsigned long);转载 2012-08-10 11:46:26 · 1079 阅读 · 0 评论 -
ubuntu 2.6.22 内核树建立
本文是参考了网上多篇帖子而写的算不上什么原创。唯一值得欣慰的只不过在本机上实现罢了。因为毕竟失败了几次。也因为本人是初学驱动编程 很多简单的问题在我来说是相当的困难的。望有识之士不要笑话。最后,希望本文能给刚学驱动而还没开头的人提供一些帮助。 刚看 O'REILLY 写的《LINUX 设备驱动程序》时。作者一再强调在编写驱动程序时必须 建立内核树。所谓内核树,我的理解和网上资料说的一致就转载 2012-07-27 12:16:59 · 454 阅读 · 0 评论 -
globalmem.c:160:2: 警告:从不兼容的指针类型初始化 [默认启用]
/globalmem.c:160:2: 警告:从不兼容的指针类型初始化 [默认启用] /globalmem.c:160:2: 警告:(在‘globalmem_fops.unlocked_ioctl’的初始化附近) [默认启用] 这个错误网上搜索发现2.6.38版本内核 file_operation结构体已经删除了ioctl函数,取代的是: long (*unlocked_io转载 2012-08-13 16:34:45 · 4535 阅读 · 0 评论 -
attribute 用法 section 部分
1. gcc的__attribute__编译属性 要了解Linux Kernel代码的分段信息,需要了解一下gcc的__attribute__的编绎属性,__attribute__主要用于改变所声明或定义的函数或 数据的特性,它有很多子项,用于改变作用对象的特性。比如对函数,noline将禁止进行内联扩展、noreturn表示没有返回值、pure表明函数除 返回值外,不会通过其它(如全局变量、指转载 2012-08-14 11:58:51 · 1194 阅读 · 0 评论 -
Linux中等待队列机制分析
在软件开发中任务经常由于某种条件没有得到满足而不得不进入睡眠状态,然后等待条件得到满足的时候再继续运行,进入运行状态。这种需求需要等待队列机制的支持。Linux中提供了等待队列的机制,该机制在内核中应用很广泛。在内核里面,等待队列是有很多用处的,尤其是在中断处理、进程同步、定时等场合。可以使用等待队列在实现阻塞进程的唤醒。它以队列为基础数据结构,与进程调度机制紧密结合,能够用于实现内核中的异步事件转载 2012-08-15 12:36:52 · 798 阅读 · 0 评论 -
Vimdiff---VIM的比较和合并工具
源程序文件(通常是纯文本文件)比较和合并工具一直是软件开发过程中比较重要的组成部分。现在市场上很多功能很强大的专用比较和合并工具,比如 BeyondCompare;很多IDE 或者软件配置管理系统,比如Eclipse, Rational ClearCase都提供了内建的功能来支持文件的比较和合并。 当远程工作在Unix/Linux平台上的时候,恐怕最简单而且到处存在的就是命令行工具,比如diff转载 2015-03-06 10:00:40 · 546 阅读 · 0 评论