![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux驱动函数
文章平均质量分 76
oLinXi1234567
这个作者很懒,什么都没留下…
展开
-
kmalloc/kfree,vmalloc/vfree函数用法和区别
1.kmalloc1>kmalloc内存分配和malloc相似,除非被阻塞否则他执行的速度非常快,而且不对获得空间清零.tiger说明:在用kmalloc申请函数后,要对起清零用memset()函数对申请的内存进行清零。>2>kamlloc函数原型:#includeVoid *kmalloc(size_t size, int flag转载 2014-05-04 21:08:59 · 498 阅读 · 0 评论 -
中断的编写
request_irq()一、中断注册方法在linux内核中用于申请中断的函数是request_irq(),函数原型在Kernel/irq/manage.c中定义:int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqfl原创 2014-11-04 08:40:35 · 679 阅读 · 0 评论 -
linux设备驱动的编译与下载
这里我们以mini2440为例来说明驱动程序的编译与下载原创 2014-10-23 14:37:20 · 576 阅读 · 0 评论 -
c语言中static 用法
static在c里面可以用来修饰变量,也可以用来修饰函数。先看用来修饰变量的时候。变量在c里面可分为存在全局数据区、栈和堆里。其实我们平时所说的堆栈是栈而不是堆,不要弄混。int a ;int main(){ int b ; int c* = (int *)malloc(sizeof(int));}a是全局变量,b是栈变量,c是堆变量。static转载 2014-11-23 16:37:28 · 411 阅读 · 0 评论 -
s3c2410_gpio_setpin()等系列函数
系列函数系列函数的定义在arch/arm/mach-s3c2410/gpio.c,相关的宏定义在include/asm-arm/arch-s3c2410/regs-gpio.h(1)void s3c2410_gpio_setpin(unsigned int pin, unsigned int to);设置相应GPIO口的输出值,例如:pin=S3C2410_GPG2转载 2014-05-05 15:27:55 · 678 阅读 · 0 评论 -
Linux设备驱动之Ioctl控制
大部分驱动除了需要具备读写设备的能力之外,还需要具备对硬件控制的能力。 一、在用户空间,使用ioctl系统调用来控制设备,原型如下:int ioctl(int fd,unsigned long cmd,...);/*fd:文件描述符cmd:控制命令...:可选参数:插入*argp,具体内容依赖于cmd*/ 用户程序所作的只是通过命令码告诉驱动程序它想做什么,转载 2014-11-23 20:23:32 · 395 阅读 · 0 评论 -
Linux2.6设备驱动常用的接口函数
Linux2.6设备驱动常用的接口函数(一)----字符设备 刚开始,学习linux驱动,觉得linux驱动很难,有字符设备,块设备,网络设备,针对每一种设备其接口函数,驱动的架构都不一样。这么多函数,要每一个的熟悉,那可多难啦!可后来发现linux驱动有很多规律可循,驱动的基本框架都差不多,再就是一些通用的模块。基本的架构里包括:加载,卸载,常用的读写,打开,关闭,这是那种那基本转载 2014-11-25 08:05:42 · 882 阅读 · 0 评论 -
Linux 内核访问外设IO资源的方式
首先介绍一下I/O端口和I/O内存。1. I/O端口:当一个寄存器或内存位于I/O空间时,称其为I/O端口。2. I/O内存:当一个寄存器或内存位于内存空间时,称其为I/O内存。再来看一下I/O寄存器和常规内存的区别:I/O寄存器具有边际效应(side effect),而内存操作则没有,内存写操作的唯一结果就是在指定位置存贮一个数值;内存读操作则仅仅是返回指定位置最后一次写入的转载 2014-11-25 08:44:33 · 634 阅读 · 0 评论 -
Linux 字符设备驱动简单总结
一、字符设备、字符设备驱动与用户空间访问该设备的程序三者之间的关系。 如图,在Linux内核中使用cdev结构体来描述字符设备,通过其成员dev_t来定义设备号(分为主、次设备号)以确定字符设备的唯一性。通过其成员file_operations来定义字符设备驱动提供给VFS的接口函数,如常见的open()、read()、write()等。转载 2014-11-30 23:01:59 · 507 阅读 · 0 评论 -
I/O驱动相关__raw_readl和__raw_writel
1.S3C2410_GPB5是端口编号,定义在regs-gpio.h中,#define S3C2410_GPIO_BANKB (32*1)#define S3C2410_GPIONO(bank,offset) ((bank) + (offset))#define S3C2410_GPB5 S3C2410_GPIONO(S3C2410_GPIO_BANKB,转载 2014-11-24 20:10:47 · 566 阅读 · 0 评论 -
字符设备的注册与注销模版
//一下程序申请了2个从设备号//#define MEMDEV_MAJOR 254 static mem_major = MEMDEV_MAJOR; //主设备号module_param(mem_major, int, S_IRUGO);struct cdev cdev; static int __init XXX_init(void)//驱动程序的注册{d原创 2014-12-01 08:54:42 · 776 阅读 · 0 评论 -
S3C2440开发板LED驱动——ioremap 映射 ********
刚开始学字符设备驱动,感觉最难的是驱动和底层硬件的连接。linux上的驱动程序,是基于操作系统之上的,他并不直接和底层的硬件打交道,但是我们写的驱动必须能使硬件“跑”起来,即与硬件紧密相连。就拿最简单的LED驱动来说,我们的驱动程序是在虚拟的内存上面跑的,但是最终,LED的点亮还是必须靠GPIO管脚的高低电平来控制。那么,我们的虚拟的内存怎么才能和实际的硬件上面的寄存器对应起来呢?转载 2014-12-23 15:02:14 · 533 阅读 · 0 评论 -
S3C2440 地址分配硬件连接及其启动原理分析**********
一.CPU 地址分配:1. s3c2440A 的存储器控制器有以下特性:l 大小端(通过软件选择)l 地址空间:每个bank有128M 的字节(总共1G字节/8个banks)l 可编程的访问位宽,bank0(16/32 位),其他bank(8/16/32 位)l 共8个存储器banksl 6 个是ROM,SRAM 等类型存储器bank (bank0转载 2014-12-23 15:03:52 · 608 阅读 · 0 评论 -
linux驱动中物理地址的空间转换
在linux kernel 中,物理地址是不能直接使用的,ARM必须通过转换才可以。转换分为两种, 静态和动态。静态就是下面那种,不过,静态的地址转换,还需要在kernel 初始化的时候作映射。 动态映射是使用 ioremap 函数 。[cpp] view plaincopy#define SL2312_GPIO_BASE 0x4D0转载 2014-11-03 21:31:06 · 1199 阅读 · 0 评论 -
S3c2440的存储控制器--驱动中存储器的使用。。
1 #if defined(CONFIG_ARCH_S3C2440) 2 int oldval_bwscon = *((volatile unsignedint *)S3C2410_BWSCON); 3 *((volatileunsigned int *)S3C2410_BWSCON)=(oldval_bwscon&~(3//设置BANK3:总线宽度为16,使能nWAIT 4转载 2014-11-03 22:16:13 · 1054 阅读 · 0 评论 -
驱动函数笔记
1.驱动程序是依赖于内核的原创 2014-10-22 22:47:10 · 413 阅读 · 0 评论 -
kmalloc函数
在设备驱动程序中动态开辟内存,不是用malloc,而是kmalloc,或者用get_free_pages直接申请页。释放内存用的是kfree,或free_pages. 对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。 进程的4GB内存空间被人为的分为两个部分转载 2014-05-04 21:09:45 · 1058 阅读 · 0 评论 -
class_create()
存在于:include/linux/device.h#define class_create(owner, name) \({ \ static struct lock_class_key __key; \ __class_c转载 2014-05-05 16:28:38 · 721 阅读 · 0 评论 -
linux内核中的IS_ERR
linux内核中的IS_ERR linux内核中的IS_ERR()、PTR_ERR()和ERR_PTR()在看内核源码的时候,经常会遇到IS_ERR,比如在 linux/arch/arm/kernel/sys_arm.c中[plain] www.2cto.com asmlinkage int sys_execve(char __user *filena转载 2014-05-05 16:36:41 · 726 阅读 · 0 评论 -
register_chrdev()与unregister_chrdev()
Linux下的设备驱动程序被组织为一组完成不同任务的函数的集合,通过这些函数使得Windows的设备操作犹如文件一般。在应用程序看来,硬件设备只 是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作,如open ()、close ()、read ()、write () 等。Linux主要将设备分为二类:字符设备和块设备。字符设备是指设备发送和接收数据以字符的形式进行;而块设备则转载 2014-05-05 16:19:23 · 882 阅读 · 0 评论 -
S3C2440 SDRAM内存驱动
++++++++++++++++++++++++++++++++++++++++++本文系本站原创,欢迎转载! 转载请注明出处:http://blog.csdn.net/mr_raptor/article/details/6555786++++++++++++++++++++++++++++++++++++++++++ SDRAM(Synchronous Dynamic Ran转载 2014-05-15 12:44:59 · 943 阅读 · 0 评论 -
DM9000驱动
想了解一下DM9000的移植修改原理,所以分析了一下时序图和引脚连接首先看一下DM9000的引脚和MINI2440的引脚连接DM9000 MINI2440 功能描述SD0 DATA0 数据信号 | |SD15 DATA15 数据信号CMD ADDR2 识别为地址还是数据INT EINT7 中断IOR# nOE转载 2014-05-15 13:28:27 · 762 阅读 · 2 评论 -
S3C2440的读写时序
转载 2014-05-15 16:01:44 · 617 阅读 · 0 评论 -
驱动中对于 内存的 处理
用.kmalloc()函数来开辟一段连续的内存原创 2014-11-04 09:17:04 · 577 阅读 · 0 评论 -
驱动调试之自制工具——寄存器编辑器
当我们调试驱动程序的时候,可能要调整寄存器的设置。按照我们之前的作法就是直接在程序里面修改,然后重新编译程序。但是这种方法比较麻烦,我们可以编写一个工具,可以直接对寄存器进行修改,这就是我们说的寄存器编辑器。其具体程序如下:#include #include #include #include #include #include #include #转载 2014-11-19 13:43:11 · 731 阅读 · 0 评论 -
驱动程序调试方法之printk——printk的原理与直接使用
1、基本原理(1)在UBOOT里设置console=ttySAC0或者console=tty1这里是设置控制终端,tySAC0 表示串口, tty1 表示lcd(2)内核用printk打印内核就会根据命令行参数来找到对应的硬件操作函数,并将信息通过对应的硬件终端打印出来!2、printk的使用(1)printk函数的信息如何才能在终端显示出来转载 2014-11-19 13:25:17 · 2545 阅读 · 1 评论 -
驱动程序调试方法之printk——自制proc文件(二)
上一节的程序很振奋人心,我们自己实现了一个myprintk打印函数。但是这个函数存在一个致命的缺陷,那就是只能使用一次cat /proc/mymsg命令来读取mylog_buf的值。这是因为读到最后会出现:mylog_r == mylog_w,表示缓冲区为空,下一次就不能在读到数据了。在本节里面我们就着手来解决这个问题,我们要实现的就是每次使用 cat /proc/mymsg 时,都会从头转载 2014-11-19 13:42:10 · 1010 阅读 · 0 评论 -
LINUx 驱动程序printk 调试
1. 控制台的日志优先级#define KERN_EMERG "" /* 致命级:紧急事件消息,系统崩溃之前提示,表示系统不可用 */#define KERN_ALERT "" /* 警戒级:报告消息,表示必须采取措施转载 2014-11-19 10:30:57 · 975 阅读 · 0 评论 -
DMA基本概念及linux 2440下DMA驱动程序 编写与测试
本文是基于操作系统linux下的利用DMA的方式将转载 2014-11-04 13:15:16 · 622 阅读 · 0 评论 -
LCD驱动(FrameBuffer)实例开发讲解
一、开发环境主 机:VMWare--Fedora 9开发板:Mini2440--64MB Nand, Kernel:2.6.30.4编译器:arm-linux-gcc-4.3.2二、背景知识1. LCD工作的硬件需求: 要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG转载 2015-05-28 14:30:18 · 1324 阅读 · 0 评论