linux驱动
文章平均质量分 84
mcgrady_tracy
这个作者很懒,什么都没留下…
展开
-
helloworld
/*Linux驱动源代码hello.c*/#include#include static int __inithello_init(void){ /*模块初始化函数*/ printk(KERN_ALERT"Hello,world\n"); return 0;}static void __exithello_exit(void){原创 2011-12-09 22:56:31 · 780 阅读 · 0 评论 -
linux lcd驱动分析二
接着上 一篇,程序看到了probe函数中。 831 mach_info = pdev->dev.platform_data; 832 if (mach_info == NULL) { 833 dev_err(&pdev->dev, 834 "no原创 2012-07-05 01:40:21 · 2610 阅读 · 6 评论 -
linux lcd驱动分析三
还是回到probe函数中。 838 if (mach_info->default_display >= mach_info->num_displays) { 839 dev_err(&pdev->dev, "default is %d but only %d displays\n", 840原创 2012-07-06 01:54:11 · 2643 阅读 · 0 评论 -
linux lcd驱动分析四
前面的probe函数已经分析完了,但是我们还是不明白帧缓冲设备到底是一个什么样的设备,这一节我们将得到答案。 1657 /** 1658 * fbmem_init - init frame buffer subsystem 1659 * 1660 * Initialize the frame buffer subsystem. 16原创 2012-07-10 00:35:31 · 2061 阅读 · 0 评论 -
linux lcd驱动分析五
在前面我们已经明确了LCD驱动其实就是一个字符设备驱动,它的主设备号为29,次设备号同注册的帧缓冲设备有关,从0开始最多支持32个帧缓冲设备。接下来将主要是对LCD这个字符设备的file_operations分析。struct file_operations定义: 1424 static const struct file_operations fb_fops = { 14原创 2012-07-15 01:02:01 · 1240 阅读 · 1 评论 -
linux lcd驱动分析一
硬件平台:mini2440 + TD035STED4 软件平台:linux-2.6.32.2 日期:2012/07/04首先看驱动模块的初始化函数和卸载函数:/* drivers/video/s3c2410fb.c */ 1119 int __init s3c2410fb_init(void) 1120 { 1121 int ret = p原创 2012-07-04 23:20:12 · 2317 阅读 · 0 评论 -
proc源码解析(一)--proc文件系统的内容
在linux系统中,伪文件系统是系统中重要的组成部分,它与普通文件的最大差别在于它的易失性。普通文件都有固定的存储介质,而伪文件系统则存储在内存中,这也使得伪文件系统在系统掉电后,它保存的内容就会挥发掉。Linux系统中存在以下几类伪文件系统:1.procfs:proc提供内核和用户交互的平台,由于其文件格式是ASCII,所以用户可以使用cat,vim,echo等命令查看或修改文件,当然必转载 2012-09-18 11:46:09 · 1839 阅读 · 0 评论 -
proc源码解析(二)--proc数据结构
上节主要说明了proc下的内容,从本节开始解析proc的实现。与普通文件系统一样,proc当然需要虚拟文件系统的支持,所以它必须具备文件系统的几个主要的数据结构。1.proc_dir_entry 在proc文件系统中,每个entry的实例是由proc_dir_entry来描述的,其结构如下:struct proc_dir_entry { unsigned int转载 2012-09-18 11:49:11 · 2830 阅读 · 0 评论 -
proc源码解析(三)--proc初始化
在使用proc之前,我们必须首先初始化并挂载proc,并在内核内存中创建数据结构来描述文件系统。但是,不同的体系结构拥有不同的proc内容,所以,在初始化阶段并不完全创建子目录的内容,有些文件要等到系统运行时动态创建。Proc文件系统初始化的流程图如下: proc_root_init的定义定义如下:void __init proc_root_init(void){转载 2012-09-18 11:51:57 · 3404 阅读 · 0 评论 -
proc源码解析(六)--proc文件读写函数
前边说过目录项创建时一般都使用默认的读写函数,本节就来看看默认的文件操作函数的定义。前边已经引用过该定义,此处再次引用:static const struct file_operations proc_file_operations = { .llseek = proc_file_lseek, .read = proc_file_read,转载 2012-09-18 11:58:52 · 2826 阅读 · 0 评论 -
proc源码解析(五)--proc的管理函数
proc目录是系统模拟出来的一个文件系统,本身并不存在于磁盘上,其中的文件都表示内核参数的信息,这些信息分两类,一类是可都可写的,这 类参数都在“/proc/sys”目录下,另一类是只读的,就是“/proc/sys”目录之外的其他目录和文件,当然这只是一种惯例,实际在其他目录下建立可读写的/proc文件也是可以的。 Linux内核在2.4以后/proc目录文件的建立已经变得很容易,以前版转载 2012-09-18 11:54:37 · 1659 阅读 · 0 评论 -
proc源码解析(七)--查找目录项
前边几节讲了proc的实现和管理,还有一个重要的功能没有提到,那就是proc目录项的查找。 在查找的过程中,用户程序把proc看作是普通文件系统里的文件;也就是说当查找目录项时,do_lookup会调用real_lookup函数执行与文件系统相关的查找,real_lookup则会调用proc根节点inode的 proc_root_inode_operations中的proc_root_l转载 2012-09-18 12:01:45 · 2579 阅读 · 0 评论 -
proc源码解析(四)--挂载proc文件系统
挂载proc文件系统和挂载普通文件系统如ext2没有区别,其挂载过程会在VFS文件系统时详细描述,此处就不在多费唇舌了。 proc的挂载命令是: root@xuhengyang # mount -t proc proc /proc转载 2012-09-18 11:53:36 · 2635 阅读 · 0 评论 -
proc文件系统操作实例
#include #include #include #include #define PROCFS_BUF_MAX_SIZE 32struct proc_dir_entry *my_proc_dir;struct proc_dir_entry *my_proc_file;int test_val = 5;static int proc_file_r原创 2012-09-18 21:30:49 · 1673 阅读 · 0 评论 -
Linux驱动之与硬件通信
1 IO端口和IO内存区别像x86系列处理器有两种地址空间:一种是内存地址空间,一种是端口地址空间,访问端口有单独的指令,例如in/out指令,而像ARM这类处理器则使用单一的地址空间,没有端口地址空间的概念。在硬件层,IO端口和IO内存并无本质区别,都是通过向地址总线和控制总线发送地址和控制信号,再通过数据总线读写数据。2 使用IO端口2.1 IO端口分配IO端口分配使用原创 2012-11-01 21:57:39 · 1971 阅读 · 0 评论 -
kzalloc
在内核中许多分配内存空间采用的是kzalloc函数,当时不理解为什么用这个函数呢,而不用kmalloc这个函数呢kzalloc和kmalloc差异kzalloc在include/linux/slab.h中定义static inline void *kzalloc(size_t size, gfp_t flags){ return kmalloc(size, flags原创 2011-12-08 22:15:35 · 1245 阅读 · 0 评论 -
Linux I2C子系统分析-I2C总线驱动
<!--p {margin-bottom:0.21cm}-->在drivers/i2c/busses下包含各种I2C总线驱动,如S3C2440的I2C总线驱动i2c-s3c2410.c,使用GPIO模拟I2C总线的驱动i2c-gpio.c,这里只分析i2c-gpio.c。i2c-gpio.c它是gpio模拟I2C总线的驱动,总线也是个设备,在这里将总线当作平台设备处原创 2012-01-19 15:56:32 · 8120 阅读 · 4 评论 -
Linux字符设备驱动
/*Linux字符设备驱动源代码scdd.c*/#include /*模块头文件*/#include #include /*dev_t头文件*/#include /*MAJOR和MINOR宏头文件*/#include /*register_chrdev_region等函数原创 2011-12-09 23:19:53 · 1115 阅读 · 0 评论 -
rmmod卸载驱动问题
以前rmmod不能卸载驱动,提示rmmod: chdir(/lib/modules): No such file or directory我在lib目录下新建目录modules,再次卸载提示rmmod: chdir(2.6.32.2): No such file or directory我在modules目录下再新建目录2.6.32.2如果配置 General setup原创 2011-12-09 23:54:56 · 4512 阅读 · 2 评论 -
模块参数
/*Linux驱动源码hellop.c*/#include#include#include static char *whom="bufan";static int howmany=1;static int paramA[] = {1,2,3,4,5,6,7,8};static int paramA_no = 1;module_param(howmany,int原创 2011-12-09 23:00:42 · 954 阅读 · 0 评论 -
自动创建设备节点
驱动程序编写好后,还需要创建设备节点,有两种方式,一是通过mknod命令去手动创建,例如:mknod /dev/hello c 250 0,/dev/hello为设备节点名字,c代表字符设备,250和0代表它的主次设备号。二是使用udev或mdev来实现自动创建设备节点。使用mknod手动创建设备节点不够灵活,如果是动态分配的设备号怎么办,难道每次加载驱动后去查看/proc/devices文件中查原创 2011-12-09 23:52:14 · 4610 阅读 · 0 评论 -
kmalloc
linux/slab.h使用kmalloc分配一段连续的内存空间,同malloc相似函数原型void *kmalloc(size_t size,int flags)第一个参数size表示分配内存的大小,flags标志通常取GFP_KERNEL,注意分配的是虚拟地址空间使用kfree释放申请的内存空间函数原型void kfree(const void *)原创 2011-12-08 22:27:45 · 825 阅读 · 0 评论 -
混杂设备
包含头文件#include建一个miscdevice结构体static struct miscdevice misc = { .minor = MISC_DYNAMIC_MINOR, .name = DEVICE_NAME, .fops = &dev_fops,};在驱动函数初始化中注册这个混杂设备misc_register(原创 2011-12-09 23:59:47 · 2304 阅读 · 0 评论 -
设备
<!--p {margin-bottom:0.21cm}-->2.设备379struct device {380 struct device *parent;381382 struct device_private *p;383384 struct kobject kobj;385 const char *init_name; /* init原创 2011-12-22 16:27:45 · 1039 阅读 · 0 评论 -
总线
<!--p {margin-bottom:0.21cm}-->Linux设备模型总线、设备和驱动1.总线总线使用结构structbus_type描述,这个结构类型定义在include/linux/device.h中51struct bus_type {52 const char *name;53 struct bus_attribute *bus_a原创 2011-12-22 15:57:37 · 951 阅读 · 0 评论 -
Linux内核链表
Linux内核链表定义在include/linux/list.h文件中链表结构定义struct list_head { struct list_head *next, *prev;};Linux内核链表它是一个双向循环链表,里面只包含两个struct list_head结构指针。1. 链表初始化链表初始化有两种方式:(1)使用LIST_HEAD宏定义个头原创 2011-12-14 23:10:46 · 2653 阅读 · 1 评论 -
驱动
<!--p {margin-bottom:0.21cm}-->3.驱动122struct device_driver {123 const char *name;124 struct bus_type *bus;125126 struct module *owner;127 const char *mod_name; /* use原创 2011-12-22 16:36:34 · 1045 阅读 · 0 评论 -
平台总线设备模型
<!--p {margin-bottom:0.21cm}-->平台总线是内核实现的一条虚拟总线,Linux设备模型包含三个重要的元素,总线、设备和驱动,那看看平台总线又是怎样去实现的。首先看平台总线的定义: 946 struct bus_type platform_bus_type = { 947 .name = "pla原创 2012-01-19 15:23:40 · 2988 阅读 · 0 评论 -
Linux I2C子系统分析-I2C设备驱动
<!--p {margin-bottom:0.21cm}-->接下来以一个实际的例子来看I2C设备驱动,就以drivers/i2c/i2c-dev.c为例。先看它的初始化和注销函数static int __init i2c_dev_init(void){ int res; printk(KERN_INFO "i2c /dev entries driver原创 2012-01-19 16:03:46 · 3744 阅读 · 1 评论 -
Linux Kernel and Android 休眠与唤醒(中文版)
源文转载自:http://blog.csdn.net/wangyunqian6/article/details/7519422Table of Contents简介国际化版本信息对于休眠(suspend)的简单介绍Linux Suspend 的流程相关的文件:准备, 冻结进程让外设进入休眠ResumeAndroid 休眠(suspend)转载 2013-03-04 15:15:55 · 1258 阅读 · 0 评论