linux驱动学习
wangsh217
这个作者很懒,什么都没留下…
展开
-
shell与Makefile区别及总结
Makefile与shell脚本区别http://blog.csdn.net/absurd/article/details/6364181.通配符不一样shell:*Makefile:%2.引用变量不一样shell:$var 或者${var}Makefile:$(var)3.Makefile的target里面才执行shell脚本或者用函...转载 2019-10-15 14:17:25 · 1795 阅读 · 0 评论 -
Linux Makefile与shell脚本区别
在Makefile可以调用shell脚本,但是Makefile和shell脚本是不同的。本文试着归纳一下Makefile和shell脚本的不同。1、 shell中所有引用以$打头的变量其后要加{},而在Makefile中的变量是以$打头的后加()。实例如下:Makefile:PATH="/data/"SUBPATH=$(PATH)Shell:PATH="/data/"S...转载 2019-10-15 13:59:30 · 609 阅读 · 0 评论 -
Linux高级字符设备驱动
1. Ioctl 用来做什么? 大部分驱动除了需要具备读写设备的能力外,还需要具备对硬件控制的能力。例如,要求设备报告错误信息,改变波特率,这些操作常常通过ioctl方法来实现。 1.1 用户使用方法在用户空间,使用ioctl 系统调用来控制设备,原型如下: int ioctl(int fd,unsigned long cmd,...)原型中的点表示这是转载 2013-08-19 10:18:52 · 452 阅读 · 0 评论 -
linux mtd等各种驱动学习的牛人博客地址
http://blog.csdn.net/yming0221/原创 2013-08-19 16:24:10 · 535 阅读 · 0 评论 -
ioctl()函数使用
使用ioctl与内核交换数据1. 前言 使用ioctl系统调用是用户空间向内核交换数据的常用方法之一,从ioctl这个名称上看,本意是针对I/O设备进行的控制操作,但实际并不限制是真正的I/O设备,可以是任何一个内核设备即可。2. 基本过程 在 内核空间中ioctl是很多内核操作结构的一个成员函数,如文件操作结构struct file_operations(include/linux/f转载 2013-08-15 10:23:31 · 731 阅读 · 0 评论 -
linux字符设备驱动的 ioctl 幻数
在Linux字符设备驱动入门(一)中,我们实现了字符设备的简单读写字符功能,接下来我们要在这个基础上加入ioctl功能。首先,我们先来看看3.0内核下../include/linux/fs.h中file_operations结构体的定义:struct file_operations { struct module *owner; loff_t (*llseek) (转载 2013-08-15 16:38:59 · 1036 阅读 · 0 评论 -
构造IOCTL命令的学习心得-----_IO, _IOR, _IOW, _IOWR 幻数的理解
在编写ioctl代码之前,需要选择对应不同命令的编号。为了防止对错误的设备使用正确的命令,命令号应该在系统范围内唯一,这种错误匹配并不是不会发生,程序可能发现自己正在试图对FIFO和audio等这类非串行设备输入流修改波特率,如果每一个ioctl命令都是唯一的,应用程序进行这种操作时就会得到一个EINVAL错误,而不是无意间成功地完成了意想不到的操作。 在驱动程序里, ioc转载 2013-08-15 16:57:22 · 701 阅读 · 0 评论 -
linux ioctl函数应用程序及其驱动映射
关于IOCTL驱动的编写方法LDD这本书确实写的比较明白了,在这呢我就简单的做一个介绍。这里我主要描述自己编写IOCTL驱动时所遇到的问题及其原因。驱动里的ioctl函数主要实现不用read,write函数的与用户空间的简单数据交关于IOCTL驱动的编写方法LDD这本书确实写的比较明白了,在这呢我就简单的做一个介绍。这里我主要描述自己编写IOCTL驱动时所遇到的问题及其原因。驱动里的ioc转载 2013-08-16 16:28:09 · 869 阅读 · 0 评论 -
MTD 分区
AT91SAM9260的dataflash在U-boot-1.3.4中的分区文件:board/atmel/at91sam9260ek/partition.c/*define the area offsets*/dataflash_protect_t area_list[NB_DATAFLASH_AREA] = { {0x00000000, 0x00003FFF, FLAG_P转载 2013-09-11 15:46:43 · 989 阅读 · 0 评论 -
I2C硬件原理及驱动
I2C总线是由Philips公司开发的两线式串行总线,用于连接微控制器和外围设备。 I2C总线支持多主控模式,任何能够进行发送和接收的设备都可以成为主设备。主控能够控制数据的传输和时钟频率,在任意的时刻只能有一个主控。 组成I2C总线的两个信号为数据线SDA和时钟线SCL。为避免总信号线的混乱,要求各设备连接到总线的输出端必须是开漏输出或集电极开路输出的结构。根据这种结转载 2013-09-16 17:25:47 · 3122 阅读 · 0 评论 -
Ubuntu 12.04 中android4.0 源码编译环境搭建
初始化编译环境官方资料:http://source.android.com/source/initializing.html 软件需求: Python2.5-2.7,可以http://www.python.org/download/下载(Ubuntu12.04自带)。 JDK6:编译Gingerbread或更新版本; JDK5:编译Froyo或更早版本。可以到转载 2013-10-16 11:18:30 · 971 阅读 · 0 评论 -
Linux信号量的实现
#include 初始化-----------------------------------------使用sema_init()初始化一个信号量void sema_init(struct semaphore *sem, int val);注: 其中val是信号量的初始值使用宏初始化信号量DECLARE_MUTEX(name); // 把一个转载 2013-08-02 11:12:42 · 738 阅读 · 0 评论 -
Linux设备驱动开发笔记
机制:提供什么能力策略:如何使用这些能力在编写驱动时, 程序员应当编写内核代码来存取硬件, 但是不能强加特别的策略给用户, 因为不同的用户有不同的需求. 驱动应当做到使硬件可用, 将所有关于如何使用硬件的事情留给应用程序.编写驱动需要注意的地方:1、必须注意并发/重入的问题内核空间和用户空间不能直接操作,必须通过特别的函数(copy_from_user/copy_to_转载 2013-08-01 17:18:14 · 956 阅读 · 0 评论 -
request_irq()、free_irq(),以及spin_lock_irqsave和spin_lock区别
request_irq()、free_irq()request_irq()、free_irq()这是驱动程序申请中断和释放中断的调用。在include/linux/sched.h里声明。Request_irq()调用的定义:int request_irq(unsigned int irq,void (*handler)(int irq, void *dev_id, struct原创 2013-08-01 16:43:58 · 839 阅读 · 0 评论 -
字符型驱动程序设计基本步骤
字符型驱动程序设计基本步骤 08.02.19 驱动程序任务就是 1.建立struct file_operations 结构,2. 完成 struct file_operations 结构中device_seek,device_read等文件操作函数的实现。3 .register_chrdev(DRAM转载 2013-07-30 16:24:31 · 867 阅读 · 0 评论 -
Linux设备驱动程序学习(3)-字符设备驱动程序
开始学习《Linux设备驱动程序(第三版)》第三章,本章主要是学习字符设备的基本操作,以scull为研究对象,即“simple character utility for loading localities”(区域装载的简单字符工具),scull是一个操作内存区域的字符设备驱动程序,这片内存区域就相当于一个设备。scull可以为真实的设备驱动程序提供一个样板。一、主设备号和次设备号转载 2013-07-31 11:28:56 · 897 阅读 · 0 评论 -
Linux设备驱动程序学习(2)-构造和运行模块
一、内核开发的特点(摘自《LINUX内核设计与实现(第三版)》): 内核编程时既不能访问C库也不能访问标准C头文件。 内核编程必须使用GNU C 内核没有内存保护机制 不要轻易在内核中使用浮点数 内核给每个进程只有一个很小的定长堆栈(内核栈) 同步和并发 要考虑可移植性 二、内核功能划分内核可以划分为如下几部分:进程管理 内核进程管理活动就是在转载 2013-07-31 11:36:52 · 1124 阅读 · 0 评论 -
Linux设备驱动程序学习(5)-并发和竞态
并发及其管理1、并发(concurrency)指的是多个执行单元同时、并行被执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态(race condition)。 2、在设计自己的驱动程序时,第一个要记住的规则是,只要可能,就应该避免资源的共享。如果没有并发的访问,也就不会有竞态的产生。因此,仔细编写的内核代码应具有最少的共享。这种思想的最明转载 2013-07-31 11:45:28 · 883 阅读 · 0 评论 -
字符设备的内核抽象[转]
顾名思义,字符设备驱动程序管理的核心对象是字符设备。从字符设备驱动程序的设计框架角度出发,内核为字符设备抽象出了一个具体的数据结构struct cdev,其定义如下: 1 struct cdev { 2 3 struct kobject kobj; 4 5 struct module *owner; 6 7转载 2013-07-31 11:43:09 · 509 阅读 · 0 评论 -
ioctl 变成了 unlocked_ioctl[转]
kernel 2.6.35 及之前的版本中struct file_operations 一共有3个ioctl :ioctl,unlocked_ioctl和compat_ioctl现在只有unlocked_ioctl和compat_ioctl 了 在kernel 2.6.36 中已经完全删除了struct file_operations 中的ioctl 函数指针,取而代之的转载 2013-07-31 11:56:07 · 675 阅读 · 0 评论 -
Linux设备驱动程序学习(6)-高级字符驱动程序操作-ioctl and llseek
一个实际可用的设备除了提供同步写入和读取之外,还会提供更多的功能,本章阐述了编写全功能字符设备驱动程序的几个概念。首先,在本节的学习,将会实现ioctl和llseek系统调用,其中,ioctl是用于设备控制的公共接口。内核版本:linux-2.6.32.2 ioctl除了读取和写入设备之外,大部分驱动程序还需要另外一种能力,即通过设备驱动程序执行各种类型的硬件控制。简单数据传输之外转载 2013-07-31 11:48:59 · 1056 阅读 · 0 评论 -
AT91SAM9260定时器计数器模块(翻译)
发现自己看了英文资料后,很容易见忘,因此翻译了AT91SAM9260芯片的定时计数器模块一节的内容,同时在翻译之时,也加上了自己的理解。作为笔记备忘! 34.1:描述AT91SAM9260芯片有两个定时计数器模块:TCB0(TC0、TC1、TC2)和TCB1(TC3、TC4、TC5),偏移地址分别为0xFFFA 0000和0xFFFD C000,每个定时计数器模块包含3个一样的16bi转载 2013-08-01 16:23:13 · 1154 阅读 · 0 评论 -
at91sam9260驱动
RT-Thread for AT91SAM9260 移植手记需要实现的函数 rt_base_t rt_hw_interrupt_disable(void); 关中断,并返回之前的中断状态 void rt_hw_interrupt_enable(rt_base_t level); 开中断,参数为中断状态,一般为rt_hw_i转载 2013-08-01 16:46:52 · 1537 阅读 · 0 评论 -
Linux gpio 中断应用(转载)
今日为了调试ARM板上的GPIO引脚中断效果,以便在后续项目使用ARM与ZLG7290按键LED中断芯片连接中随意选择空闲的GPIO引脚来作为ZLG7290的中断信号线,特意编写了一个小的Linux GPIO中断驱动程序下载到开发板上做实验。经验证,这种软件中断方式也还差强人意。下面贴出自己编写的不成熟的代码,见笑()。 实验的硬件电路为ARM GPIO的PB17连接一个共阴L转载 2013-08-01 16:57:03 · 1457 阅读 · 0 评论 -
linux驱动学习知识积累
一、基础知识扫盲1、dev_t结构体在内核中,dev_t结构体用来保存设备编号信息,在linux/type.h中定义,是一个32位的数,12位表示主设备号+20位的次设备号?123int MAJOR(dev_t dev)//获得dev的主设备号 int MINOR(dev_t dev)//获得dev的次设备号 de转载 2013-07-30 15:37:35 · 542 阅读 · 0 评论