
linux 设备驱动
文章平均质量分 76
咕唧咕唧shuboLK
这个作者很懒,什么都没留下…
展开
-
KERNELRELEASE 的定义
Linux内核是一种单体内核(宏内核),但是通过动态加载模块的方式,使它的开发非常灵活 方便。那么,它是如何编译内核的呢?我们可以通过分析它的Makefile入手。以下是 一个简单的hello内核模块的Makefile.编译内核模块最简单的Makefileifneq ($原创 2011-10-14 19:50:59 · 3517 阅读 · 0 评论 -
关于热插拔usb hotplug /proc/sys/kernel mdev udev busybox
这篇文章说的很好http://blog.chinaunix.net/u1/38994/showart_2022040.html:如何使用busybox精简版本udev程序--mdev动态创建插入的u盘和鼠标等设备busybox的mdev是一个精简了的udev管理程序,它可以间接的以hotplug方式被内核调用,进而在arm平台上/dev目录下动态创建设备节点,因为hotplug会被转载 2011-11-09 19:23:06 · 2081 阅读 · 0 评论 -
DRIVER_ATTR and DEVICE_ATTR
Driver Attributes~~~~~~~~~~~~~~~~~struct driver_attribute { struct attribute attr; ssize_t (*show)(struct device_driver *driver, char *buf); ssize_t (*store)(stru转载 2011-12-06 14:40:35 · 5317 阅读 · 0 评论 -
Frame buffer分析 - fbmem.c
45 struct fb_info *registered_fb[FB_MAX] __read_mostly;这个是全局的变量,通过这个全局变量,在系统内可以随时获取需要的fb_info,具体的获取方法是通过比对 registered_fb[i]->fix.id来确定需要的fb_info, 示例代码如下 for (i = 0; i char *idstr转载 2011-12-08 18:55:50 · 2809 阅读 · 0 评论 -
VMA,VM概念
VMA,VM概念mmap: memory map在讲述文件映射的概念时, 不可避免的要牵涉到虚存(SVR 4的VM). 实际上, 文件映射是虚存的中心概念, 文件映射一方面给用户提供了一组措施, 好似用户将文件映射到自己地址空间的某个部分, 使用简单的内存访问指令读写文件;另一方面, 它也可以用于内核的基本组织模式, 在这种模式种, 内核将整个地址空间视为诸如文件之类的一组不同对象转载 2011-12-11 14:18:55 · 4501 阅读 · 0 评论 -
浅析request_module内核驱动直接引用用户空间程序/sbin/modprobe
在soundcore_open打开/dev/dsp节点函数中会调用到下面的: request_module("sound-slot-%i", unit>>4);函数,这表示,让linux系统的用户空间调用/sbin/modprobe函数加载名为sound-slot-0.ko模块#define request_module(mod...) __request_module(true转载 2011-12-09 15:58:44 · 8632 阅读 · 0 评论 -
linux多线程驱动中调用udelay()对整个系统造成的影响(by liukun321咕唧咕唧)
以前没考虑过这个问题,而且之前可能运气比较好,虽然用了udelay但也没出什么奇怪的问题,今天在优快云上看到了一篇关于此问题帖子,觉得很受用,再此做简要的记录和分析: 驱动开的是内核线程 跟普通进程一样是可以调度的,而udelay是靠死循环实现的延迟,当你的内核线程没有占用cpu时,很可能超过1ms都不会执行你的程序,100us是小于进程可能的最小时间片的 (HZ=10原创 2012-01-15 12:17:59 · 3315 阅读 · 0 评论 -
解决 Linux 一定时间后自动关闭LCD
来自:http://blog.youkuaiyun.com/dongliqiang2006/archive/2009/06/12/4262950.aspx【节选】:Linux启动之后,只要一段时间不动键盘(开发板上用IO扩展出来的键盘),LCD就会自动关闭(黑屏、显示慢慢消失之类),只要按下键盘就能恢复。 这个问题让我花了一天多的时间。其实如果是手持设备,这样也没有什么。但是我转载 2013-07-05 09:46:36 · 4201 阅读 · 0 评论 -
S5pv210 HDMI 接口在 Linux 3.0.8 驱动框架解析 (By liukun321 咕唧咕唧)
作者:liukun321 咕唧咕唧日期:2014.1.18转载请标明作者、出处。本文主要简述S5pv210处理器的 HDMI 接口在 Linux 3.0.8 内核下的驱动框架。现在三星的主流处理器基本都支持HDMI,使用HDMI也有段时间了,却一直不知道它是怎么工作的,只知道linux和android下都会有一个HDMI-service的用户服务程序。然后底层会有HDMI驱动。知道原创 2014-01-18 18:48:25 · 23674 阅读 · 10 评论 -
FT5X06 如何应用在10寸电容屏(linux-3.5电容屏驱动简析&移植10寸电容屏驱动到Android4.2) (by liukun321咕唧咕唧)
这是几个月以前的东西了,在彻底遗忘之前拿出来好好写写。做个笔记,也算是造福后来人了。在做这个项目之前,没有做过电容屏的驱动,印象中的电容触摸屏是不需要校正的。IC支持多大的屏就要配多大的屏。但是拿到需求,发现要用FT5406做10寸屏,可是FT5406手册上明明写了,最大支持到8.9寸。由于经验不足,感到略懵。就去核实这个需求方案是不是搞错了?!得到的答案:蓝魔的平板也是这个搭配。这样, 那需求应原创 2014-04-19 14:36:12 · 10692 阅读 · 3 评论 -
基于Linux 3.0.8 Samsung FIMC(S5PV210) 的摄像头驱动框架解读(一)
作者:咕唧咕唧liukun321来自:http://blog.youkuaiyun.com/liukun321FIMC这个名字应该是从S5P100开始出现的,在s5pv210里面的定义是摄像头接口,但是它同样具有图像数据颜色空间转换的作用。而exynos4412对它的定义看起来更清晰些,摄像头接口被定义为FIMC-LITE 。颜色空间转换的硬件结构被定义为FIMC-IS。不多说了,我们先来看看Linux3.0原创 2014-08-04 22:32:44 · 10364 阅读 · 4 评论 -
IO寄存器操作的边际效应
第一种说法: side effect(译为边际效应或副作用):是指读取某个地址时可能导致该地址内容发生变化,比如,有些设备的中断状态寄存器只要一读取,便自动清零。I/O 寄存器的操作具有side effect,因此,不能对其操作不能使用cpu缓存。 原文网址: http://qinbh.blog.sohu.com/62733495.html第二种说法: 说一下转载 2011-11-07 18:58:42 · 3447 阅读 · 1 评论 -
Linux下的IO端口和IO内存
Linux下的IO端口和IO内存CPU对外设端口物理地址的编址方式有两种:一种是IO映射方式,另一种是内存映射方式。 Linux将基于IO映射方式的和内存映射方式的IO端口统称为IO区域(IO region)。 IO region仍然是一种IO资源,因此它仍然可以用resource结构类型来描述。 Linux管理IO region: 1) request_region转载 2011-11-07 19:37:14 · 1228 阅读 · 0 评论 -
LINUX 异步IO机制
Linux的I/O机制经历了一下几个阶段的演进:1. 同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止。2. 同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK,I/O操作可以立即返回,但是并不保证I/O操作成功。3. 异步事件阻塞I/O: 用户进程可以对I/O事件进行阻塞,但是I/O操作并不阻塞。通过select/poll/epoll等转载 2011-11-28 11:21:42 · 1970 阅读 · 0 评论 -
rmmod:No such file or directory 问题的解决
作者:liukun321(咕唧咕唧)原文出处:http://blog.youkuaiyun.com/liukun321 我们在卸载内核模块时常常遇到rmmod: No such file or directory这个错误. 原因是我们没将内核模块放在文件系统指原创 2011-10-15 14:03:57 · 4268 阅读 · 3 评论 -
linux 设备驱动中对结构体成员赋值的常用格式
struct super_operation new_super{ .read=new_read; .write=new_write; // 更多的这样的语句};另外还有一种语法是下面这个样子的:struct super_operation new_super{ read: new_read; write: new_write; // 更原创 2011-10-24 17:23:51 · 1982 阅读 · 0 评论 -
驱动模块Makefile解析
驱动模块Makefile解析作者:王劲南,华清远见嵌入式学院讲师。先看一下代码ifeq ($(KERNELRELEASE),) KERNELDIR ?= /home/linux/linux-2.6.22.6 PWD := $(shell pwd) modules: $(MAKE) -C $(KERN转载 2011-10-24 19:56:58 · 1340 阅读 · 0 评论 -
linux 设备模型简析
file_operations 不可能被抛弃。它是字符设备的基础结构,各种设备模型或者说总线,只是对字符设备进行了包装。 驱动一定是内核模块 内核模块不一定是驱动 设备模型的初衷 是省电 建立一条 挂有 所有设备的树 全局设备树 与用户空间的通信:设备间的通信 都是通过 sysfs文件系统实现的 把设备模型的接口以文件的形式 暴露给用户可以通过 读写文件的方式 配置设备原创 2011-10-23 18:22:30 · 1313 阅读 · 0 评论 -
linux 设备在合适申请内存比较恰当
总觉的在驱动的read,write,ioctl里面进行大的内存申请会有问题。我看到的一些别人的驱动都不是这么做的。都是在probe的时候,定义个结构体,申请个足够大的内存,和其中有指针和设备有关系。这样你在read。write,ioctl的时候,都可以通过文件标识符得到设备,设备通过和结构体的关系得到结构体指针,从而得到申请的内存指针,你就可以使用已经申请好的内存,而不是在read原创 2011-10-24 17:32:17 · 1100 阅读 · 0 评论 -
浅谈LINUX 内存分页机制(by liukun321咕唧咕唧)
以前看过《深入理解linux内核》一书对有关内存管理的分析,但是当时对linux所知甚少,弄了个云里雾里,就那么草草过去了。今天看LDD3的时候在分配内存这章貌似又看见了它的影子,再结合前面看的《深入理解linux内核》,好像对它有了些重新的认识。下面就浅要分析一下内存分页机制: 每个进程都拥有4G(2的32次方)的虚拟地址空间。在实际编程过程中,指针中存放的地址也都是32位的线性地址(原创 2011-11-06 20:55:03 · 2100 阅读 · 0 评论 -
浅析为何要内存对齐(by liukun321咕唧咕唧)
在分析内存对其之前,先简要简要介绍一下ARM处理器是如何进行数据操作的: ARM是32位处理器,armv4能高效的处理8,16,32位的数据,但是大多数arm处理器直接操作的是32位的数据。地址跳变基数为4字节即4.一次存取数据量为32位。(硬件角度),我们一次取到的32位数据不一定是一个完整的数据构,可能是两个数据结构,也可能是某个数据结构的一部分,(而编译器帮助我们将一条对原创 2011-11-15 19:29:54 · 3317 阅读 · 0 评论 -
结构体在内存中的对齐规则
一个结构体变量定义完之后,其在内存中的存储并不等于其所包含元素的宽度之和。例一: #include using namespace std; struct转载 2011-11-15 19:32:04 · 31472 阅读 · 24 评论 -
字符驱动 poll方法小记(by liukun321咕唧咕唧)
被poll方法卡了一天,只因对内核源码了解太少啊。 看LDD3的poll的时候,就被书上所讲的搞得云里雾里,确实把握不了她的脉络,,当时想:不就是个poll吗,无非就是调个poll_wait嘛。。。SO,我就那么草草的从那章飘过了。 可是poll一用起来,我汗了。搞了一天,进程只要睡过去就醒不过来。应用代码实现的功能很简单,怎么就醒不过来呢?显然,驱动有问题。可是p原创 2011-11-03 19:57:13 · 1505 阅读 · 0 评论 -
简述编译进内核的平台设备是如何在内核注册的(by liukun3211咕唧咕唧)
对内核结构感到迷惑,是因为缺少好奇心。这句话说得一点也不假。顺利的移植完驱动,看到内核顺利的启动,驱动正常工作。貌似是大功告成。可是对于一个学习驱动的人来说这可不是什么好事。由于前段时间太顺利,被一次次的“success”迷了心窍。自认为了不得了。上星期在移植uda1341驱动时,才突然反思,驱动目录里很多设备的驱动都是基于platform虚拟平台总线的。但是驱动程序里只有对device_driv原创 2011-11-25 19:49:14 · 1544 阅读 · 0 评论 -
linux驱动中分配连续物理内存
dma_alloc_coherent vs dma_alloc_writecombine都是分配连续物理内存,返回虚拟地址1.dma_alloc_coherent#define pgprot_noncached(prot) __pgprot(pgprot_val(prot) & ~(L_PTE_CACHEABLE | L_PTE_BUFFERABLE))禁用cahceable 和 buff原创 2014-10-14 21:48:42 · 8366 阅读 · 0 评论