块设备驱动框架详解
摘要:一、正确的理解块设备驱动的概念 1、块设备和字符设备的差异 (1)块和字符是两种不同的访问设备的策略 (2)同一个设备可以同时支持块和字符两种访问策略 (3)设备本身的物理特性决定了哪一种访问策略更适合 (4)块设备本身驱动层支持缓冲区,而字符设备驱动层没有缓冲 (5)块设备驱动最适合存储设备 2、
阅读全文
sysfs中属性文件的建立
摘要:1、device中建立属性文件 (1)函数调用关系: /**************************************************************/ device_create_file sysfs_create_file /********************
阅读全文
Linux内核gpiolib注册建立过程
摘要:1、相关的数据结构 2、函数调用关系图 smdkc110_map_io s5pv210_gpiolib_init samsung_gpiolib_add_4bit_chips samsung_gpiolib_add_4bit s3c_gpiolib_add gpiochip_add // 这个函数就
阅读全文
Linux内核静态映射表的建立过程
摘要:/* * 平台: s5pv210 * 内核版本号: 2.6.35.7 */ kernel/arch/arm/mach-s5pv210/mach-smdkc110.c 这个文件是由三星在移植内核时提供的一个很重要的文件,这个文件中的函数都是与硬件相关的。 mach-smdkc110.c文件中的smdk
阅读全文
Linux驱动学习之常用的模块操作命令
摘要:1、常用的模块操作命令 (1)lsmod(list module,将模块列表显示),功能是打印出当前内核中已经安装的模块列表 (2)insmod(install module,安装模块),功能是向当前内核中去安装一个模块,用法是insmod xxx.ko (3)modinfo(module info
阅读全文
Linux驱动学习之驱动开发准备工作
摘要:一、开启驱动开发之路 1、驱动开发的准备工作 (1)正常运行linux系统的开发板。要求开发板中的linux的zImage必须是自己编译的,不能是别人编译的。原因在于在安装模块的时候会进行安全性校验 (2)内核源码树,其实就是一个经过了配置编译之后的内核源码。我们需要内核源码编译自己的模块 (3)n
阅读全文
Linux驱动学习之什么是驱动?
摘要:一、什么是驱动? 1: 驱动一词的字面意思 2: 物理上的驱动 3: 硬件中的驱动 4: linux内核驱动。软件层面上的驱动广义上是指:这一段代码操作了硬件去动,所以这一段代码就叫硬件的驱动程序。 狭义上驱动程序就是专指操作系统中用来操控硬件的逻辑方法的部分代码。而我们这里讲的驱动就指的是这个狭义
阅读全文
gslX680驱动的移植实践
摘要:将gslX680触摸屏驱动移植到自己的开发板上(对应的源码文件gslX680.c),并且实现可以使用make menuconfig进行动态的加载和卸载 因为触摸屏设备属于一种典型的输入设备,所以他的驱动源码最好是放在 drivers\input\touchscreen这个目录下,这样是最规范的。 (
阅读全文
I2C总线驱动框架详解
摘要:一、I2C子系统总体架构 1、三大组成部分 (1)I2C核心(i2c-core):I2C核心提供了I2C总线驱动(适配器)和设备驱动的注册、注销方法,I2C通信方法(”algorithm”)上层的,与具体硬件无关的代码以及探测设备 检测设备地址的上层代码等。。 (2)I2C总线驱动(I2Cadapt
阅读全文
Linux内核中断学习
摘要:1、内核中断概述 (1)在OS环境下编写中断处理函数与之前在裸机中编写中断处理函数的方式是不一样的,在Linux内核中提供了一套用来管理硬件中断资源的软件体系架构。 (2)在操作系统中,中断号与gpio、内存一样被认为是一种硬件资源,当我们需要使用某一个中断号时必须向操作系统申请中断资源,只有申请成
阅读全文
input输入子系统
摘要:一、什么是input输入子系统? 1、Linux系统支持的输入设备繁多,例如键盘、鼠标、触摸屏、手柄或者是一些输入设备像体感输入等等,Linux系统是如何管理如此之多的不同类型、不同原理、不同的输入信息的 输入设备的呢?其实就是通过input输入子系统这套软件体系来完成的。从整体上来说,input输
阅读全文
内核链表操作函数/宏
摘要:之前说过Linux内核中建立了一套内核链表体系,包括在内核中链表的定义和使用方法。由于内核中定义的对链表的操作方法太多了,限于时间和能力的问题,我将记录在学习过程 中所用到的操作方法。 内核中源文件位置:include\linux\list.h 1、list_entry宏 (1)原型: #defin
阅读全文
Linux内核启动logo
摘要:之前在分析samsung的fb驱动代码的时候,其中有一段代码是处理内核logo显示相关的,今天就内核logo这个话题来聊一聊! 一、处理内核logo显示相关的代码在哪? 回到samsung的fb驱动代码中,因为fb的驱动代码是基于platform平台总线编写的,所以我们需要找到platform_dr
阅读全文
proc文件系统在内核中的表现
摘要:当Linux内核启动起来之后,我们可以通过proc虚拟文件系统来查看内的中的一些动态信息。 例如:可以 cat /proc/misc 来查看系统中装载的所有misc类设备 cat /proc/devices 来查看系统中装载的字符设备和块设备 但是需要注意的是:proc文件系统现在用到比较少了,主要
阅读全文
关于在应用层为何不能设置分辨率的问题
摘要:问题的描述:之前在测试fb的驱动程序的时候,试图在应用层通过ioctl函数设置LCD的分辨率,但是并没有设置成功,原因何在? 定位问题:肯定是驱动中的事情 进一步定位问题:因为我们是通过ioctl函数来进行设置的,而应用层的ioctl函数最终会调用到驱动中的ioctl函数,所以问题出在驱动中的ioc
阅读全文
三星framebuffer驱动代码分析
摘要:一、驱动总体概述 本次的驱动代码是Samsung公司为s5pv210这款SoC编写的framebuffer驱动,对应于s5pv210中的内部外设Display Controller (FIMD)模块。 驱动代码是基于platform平台总线编写的。 1、驱动代码的源文件分布: (1):drivers
阅读全文
Linux驱动框架之framebuffer驱动框架
摘要:1、什么是framebuffer? (1)framebuffer帧缓冲(一屏幕数据)(简称fb)是linux内核中虚拟出的一个设备,framebuffer向应用层提供一个统一标准接口的显示设备。帧缓冲(framebuffer) 是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层
阅读全文
内核中防止竞争状态的手段
摘要:1、什么是竞争状态,之前在应用编程的学习中已经提到过。 竞争状态就是在多进程环境下,多个进程同时抢占系统资源(内存、CPU、文件IO),竞争状态对OS来说是很危险的,此时OS如果没处理好就会造成意想不到的结果。 写程序当然不希望程序运行的结果不确定,所以我们写程序时要尽量消灭竞争状态。操作系统给我们
阅读全文
内核链表与普通链表
摘要:1、在Linux内核中经常能够看到 struct list_head 这样的一个结构体,这个就是内核中的一个链表,内核链表 struct list_head { struct list_head *next, *prev;}; 这个结构体中只有两个指向链表结构体的指针,分为前向指针和后向指针,因为可
阅读全文
Linux驱动框架之misc类设备驱动框架
摘要:1、何为misc设备 (1)misc中文名就是杂项设备\杂散设备,因为现在的硬件设备多种多样,有好些设备不好对他们进行一个单独的分类,所以就将这些设备全部归属于 杂散设备,也就是misc设备,例如像adc、buzzer等这些设备一般都归属于misc中。 (2)需要注意的是,虽然这些设备归属于杂散设备
阅读全文