linux
文章平均质量分 72
angle_birds
这个作者很懒,什么都没留下…
展开
-
linux模块导出符号 EXPORT_SYMBOL_GPL EXPORT_SYMBOL
一个模块mod1中定义一个函数func1;在另外一个模块mod2中定义一个函数func2,func2调用func1。在模块mod1中,EXPORT_SYMBOL(func1);在模块mod2中,extern int func1();就可以在mod2中调用func1了。=================================EXPORT_SYMBOL只出现在2.6内核中转载 2012-03-26 21:29:40 · 36408 阅读 · 1 评论 -
实例解析linux内核I2C体系结构(2) [嵌入式]
四、在内核里写i2c设备驱动的两种方式前文介绍了利用/dev/i2c-0在应用层完成对i2c设备的操作,但很多时候我们还是习惯为i2c设备在内核层编写驱动程序。目前内核支持两种编写i2c驱动程序的方式。下面分别介绍这两种方式的实现。这里分别称这两种方式为“Adapter方式(LEGACY)”和“Probe方式(new style)”。(1) Adapter方式(LEGACY转载 2012-03-14 23:49:47 · 951 阅读 · 0 评论 -
实例解析linux内核I2C体系结构(1)
一、概述谈到在linux系统下编写I2C驱动,目前主要有两种方式,一种是把I2C设备当作一个普通的字符设备来处理,另一种是利用linux I2C驱动体系结构来完成。下面比较下这两种驱动。第一种方法的好处(对应第二种方法的劣势)有: ● 思路比较直接,不需要花时间去了解linux内核中复杂的I2C子系统的操作方法。第一种方法问题(对应第二种方法的好处)有:转载 2012-03-14 23:45:00 · 1179 阅读 · 0 评论 -
linux内核input子系统解析
作者:刘洪涛,华清远见嵌入式学院讲师。Android、X windows、qt等众多应用对于linux系统中键盘、鼠标、触摸屏等输入设备的支持都通过、或越来越倾向于标准的input输入子系统。因为input子系统已经完成了字符驱动的文件操作接口,所以编写驱动的核心工作是完成input系统留出的接口,工作量不大。但如果你想更灵活的应用它,就需要好好的分析下input子系统了。转载 2012-03-16 00:49:10 · 864 阅读 · 0 评论 -
注册的i2c_board_info数组中的信息没有生成i2c_client.
个人猜测是这样的,注册的i2c_board_info数组中的信息没有生成i2c_client.i2c_register_board_info的传统用法是在内核初始化时,在i2c_adapter注册之前。这点注释中已经说明了。查看i2c_adapter的注册代码可以发现,i2c_adapter注册的时候会扫描已经注册的board_info的链表,为每一个注册的信息调用i2c_new_devi转载 2012-03-16 00:09:58 · 2292 阅读 · 0 评论 -
Linux基础: 解密module_init幕后的故事
在Linux底下写过driver模块的对这个宏一定不会陌生。module_init宏在MODULE宏有没有定义的情况下展开的内容是不同的,如果这个宏没有定义,基本上表明阁下的模块是要编译进内核的(obj-y)。1.在MODULE没有定义这种情况下,module_init定义如下:#define module_init(x) __initcall(x);转载 2012-03-16 00:26:30 · 781 阅读 · 0 评论 -
linux触摸屏驱动分析,touchscreen, struct input_dev,基于TSC2007
代码从2.6.32拷贝:[cpp:nogutter] view plaincopy/* * drivers/input/touchscreen/tsc2007.c * * Copyright (c) 2008 MtekVision Co., Ltd. * Kwangwoo Lee * * Using c转载 2012-03-16 00:40:52 · 3951 阅读 · 1 评论 -
Linux内核中工作队列的操作
1. 前言 工作队列(workqueue)的Linux内核中的定义的用来处理不是很紧急事件的回调方式处理方法. 以下代码的linux内核版本为2.6.19.2, 源代码文件主要为kernel/workqueue.c. 2. 数据结构 /* include/linux/workqueue.h */ // 工作节点结构 struct work_struct { // 等转载 2012-03-26 21:30:46 · 1090 阅读 · 0 评论 -
linux ln命令参数及用法详解---linux连接文件或目录命令
ln(link)功能说明:连接文件或目录。语 法:ln [-bdfinsv][-S ][-V ][--help][--version][源文件或目录][目标文件或目录] 或 ln [-bdfinsv][-S ][-V ][--help][--version][源文件或目录...][目的目录]补充说明:ln命令用在连接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经转载 2012-04-10 23:40:00 · 622 阅读 · 0 评论 -
Linux init
一、什么是INIT: init是Linux系统操作中不可缺少的程序之一。 所谓的init进程,它是一个由内核启动的用户级进程。 内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数 据结构等)之后,就通过启动一个用户级程序init,完成引导进程。所以,init始 终是第一个进程(其进程编号始终为1)。 内核会在过去曾使用过init的几个地转载 2012-04-10 23:00:17 · 974 阅读 · 0 评论 -
电阻式触摸屏的驱动程序和详细注释
http://os.chinaunix.net/a2009/1127/998/000000998949.shtmlhttp://blog.chinaunix.net/uid/22935566/frmd/105748.htmlhttp://wenku.baidu.com/view/1297b11ca8114431b90dd8a4.html#include #include转载 2012-07-11 20:43:06 · 870 阅读 · 0 评论 -
gpio_direction_output 与 gpio_set_value
gpio_set_value(port_num,0/1) 一般只是在这个GPIO口的寄存器上写上某个值,至于这个端口是否设置为输出,它就管不了!而gpio_direction_output (port_num,0/1),在某个GPIO口写上某个值之后,还会把这个端口设置为输出模式。 因此,有人也许就会建议,把gpio_set_value这个函数直接去掉不用,是否可以,显然是可以原创 2012-07-11 20:23:16 · 862 阅读 · 0 评论 -
Unix编程之size_t、ssize_t
对于赶时间的朋友,只看第一段就好了。 首先,我非常肯定以及确定的告诉你ssize_t是有符号整型,在32位机器上等同与int,在64位机器上等同与long int,有没有注意到,它和long数据类型有啥区别?其实就是一样的。size_t 就是无符号型的ssize_t,也就是unsigned long/ unsigned int (在32位下),不同的编译器或系统可能会有区别,主要是因为转载 2012-08-02 09:37:21 · 818 阅读 · 0 评论 -
cdev、file operations 结构体
1、实现 cdev、file operations 结构体2、申请设备号:alloc_chrdev_region(...)3、为 cdev 申请空间 kmalloc(sizeof(struct cdev),GFP_KERNEL)4、关联 cdev 、file operations , cdev_init(&dev->cdev,&file_operations)5、关联设备号和cde原创 2012-08-03 11:42:58 · 1258 阅读 · 0 评论 -
电容触摸屏
http://hi.baidu.com/god_sperm/blog/item/2aaac228e8a1ece8e7cd400a.html转载 2012-07-30 15:27:34 · 764 阅读 · 0 评论 -
cdev结构 and MKDEV
MKDEV 功能:将主设备号和次设备号转换成dev_t类型cdev结构在Linux2.6内核中一个字符设备用cdev结构来描述,其定义如下:struct cdev { struct kobject kobj; struct module *owner; //所属模块 const struct file_operations*转载 2012-08-02 12:43:22 · 11823 阅读 · 2 评论 -
在linux下如何将ttyS0改成别的号,比如ttyS4什么的,我的系统只有一个串口。
不明白楼主为什么要这样做,不过是有办法的。ttyS0只是代表一个设备节点,它存在主设备号和次设备号。一个设备节点包含了这两个设备号,Linux系统通过这两个号唯一的确定一个驱动实例。一个实际存在的串口只能够存在一个驱动实例。大多数的驱动实例只支持单一现成的读写操作,所以不允许多个程序同时打开设备文件,典型的一种就是串口,它只允许一个程序打开。一个驱动实例对应一组唯一的主设备号和次设备号转载 2012-08-01 23:29:53 · 6814 阅读 · 1 评论 -
cdev_alloc/cdev_init、cdev_add、cdev_del
内核中每个字符设备都对应一个 cdev结构的变量,下面是它的定义:linux-2.6.22/include/linux/cdev.hstruct cdev {struct kobject kobj; // 每个 cdev都是一个 kobjectstruct module *owner; //指向实现驱动的模块const struct file_op转载 2012-08-07 14:26:54 · 11040 阅读 · 1 评论 -
I2C
i2c_add_driver函数用法 http://wuyidaxuezhb.blog.163.com/blog/static/185337391201211133547701/Linux I2C驱动完全分析(一)http://www.cnblogs.com/armlinux/archive/2011/04/30/2390827.html转载 2012-08-30 20:45:18 · 726 阅读 · 0 评论 -
scull工作过程
scull(simple character utility for loading localities,"区域装载的简单字符工具") 是一个操作内存区域的字符设备驱动程序,这片内存区域就相当于一个字符设备。 scull的优点在于他不和任何硬件相关,而只是操作从内核分配的一些内存。任何人都可以编译和运行scull,而且还看看可以将scull移植到linux支持的所有计算机平台上。转载 2012-08-21 15:56:58 · 921 阅读 · 0 评论 -
字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()
函数原型: int alloc_chrdev_region(dev_t *dev, unsigned int -firstminor, unsigned int -count, char *name)头文件 : 函数功能: 动态分配设备编号函数参数说明: 该函数需要传递给它指定的第一个次设备号firstminor(一般为0)和要分配的设备转载 2012-08-19 14:50:31 · 1242 阅读 · 0 评论 -
Linux设备驱动之Ioctl控制
大部分驱动除了需要具备读写设备的能力之外,还需要具备对硬件控制的能力。 一、在用户空间,使用ioctl系统调用来控制设备,原型如下:int ioctl(int fd,unsigned long cmd,...);/*fd:文件描述符cmd:控制命令...:可选参数:插入*argp,具体内容依赖于cmd*/ 用户程序所作的只是通过命令码告诉驱动程序它转载 2012-08-22 19:01:17 · 694 阅读 · 0 评论 -
Linux 设备驱动模型中的class(类)
首先,想说明一下,促使我研究class(类)的是因为它能够自动创建/dev下的设备节点。当然class还有其另外的作用,且自动创建设备节点的还有udev系统,udev是处于用户空间的,其自动创建设备节点也是依赖于sysfs文件系统中提供的class类,我有个问题,如果我的内核没有移植好udev系统,只是利用class(类),能不能够自动创建设备节点呢???针对这样一个问题,想写这个文章理清理清一下转载 2012-09-03 15:44:39 · 642 阅读 · 0 评论 -
Linux字符驱动中动态分配设备号与动态生成设备节点
在驱动程序中初始化入口函数中,向内核注册一个设备后,往往要注册一个类例如static int __init mydriver_init(void) //驱动程序的初始化{ …… MYDRIVER_Major = register_chrdev(0, DEVICE_NAME, &mydriver_fops); //向内核注册一个设备,返回值为注册的主设备号转载 2012-08-14 22:25:57 · 1944 阅读 · 0 评论 -
class_create(),device_create自动创建设备文件结点
class_create(),device_create自动创建设备文件结点从linux 内核2.6的某个版本之后,devfs不复存在,udev成为devfs的替代。相比devfs,udev有很多优势,在此就不罗嗦了,提醒一 点,udev是应用层的东东,不要试图在内核的配置选项里找到它;加入对udev的支持很简单,以作者所写的一个字符设备驱动为例,在驱动初始化的代码里调用class_c转载 2012-09-06 14:53:44 · 824 阅读 · 0 评论 -
i2c_master_recv()/i2c_msg {}
inti2c_master_recv(struct i2c_client *client, char *buf ,int count) int i2c_master_recv(struct i2c_client *client, char *buf ,int count)//从芯片中读取数据,并存入buf{ struct i2c_adapter *adap=client->转载 2012-09-28 15:31:00 · 3936 阅读 · 0 评论 -
The Linux Kernel API
http://docs.huihoo.com/linux/kernel/2.6.26/kernel-api/index.html原创 2012-09-28 15:39:05 · 823 阅读 · 0 评论 -
i2c_check_functionality() / 如何在驱动中调用i2c设配器帮我们完成数据传输
if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA| I2C_FUNC_SMBUS_WORD_DATA))//判定适配器能力 goto exit;i2c_check_functionality用来判定设配器的能力,这一点非常重要。你也可以直接查看对应设配器的能力,如stati转载 2012-09-28 15:34:30 · 18281 阅读 · 0 评论 -
Linux设备驱动之I2C架构分析
一:前言I2c是philips提出的外设总线.I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL.正因为这样,它方便了工程人员的布线.另外,I2C是一种多主机控制总线.它和USB总线不同,USB是基于master-slave机制,任何设备的通信必须由主机发起才可以.而I2C是基于multi master机制.一同总线上可允许多个master.关于I2C协议的知识,这里不再赘述.可自行转载 2012-09-30 01:36:12 · 1219 阅读 · 0 评论 -
Linux设备模型之input子系统详解
------------------------------------------本文系本站原创,欢迎转载!转载请注明出处:http://ericxiao.cublog.cn/------------------------------------------一:前言在键盘驱动代码分析的笔记中,接触到了input子系统.键盘驱动,键盘驱动将检测到的所有按键都上报给了input转载 2012-09-30 01:43:31 · 1190 阅读 · 0 评论 -
linux设备模型之bus,device,driver分析一
===============================本文系本站原创,欢迎转载!转载请注明出处:http://www.cnblogs.com/gdt-a20=============================== 内核的开发者将总线,设备,驱动这三者用软件思想抽象了出来,巧妙的建立了其间的关系,使之更形象化。结合前面所学的知识,总的来说其三者间的关系为b转载 2012-09-30 02:38:12 · 1197 阅读 · 0 评论 -
linux设备模型之bus,device,driver分析二
===============================本文系本站原创,欢迎转载!转载请注明出处:http://www.cnblogs.com/gdt-a20=============================== 上篇分析了bus,driver的注册过程,这篇主要分析device的注册,并总结给出个流程图。三、device的注册 还是照例先看一下devi转载 2012-09-30 02:40:21 · 1199 阅读 · 0 评论 -
linux设备模型深探
------------------------------------------本文系本站原创,欢迎转载!转载请注明出处:http://ericxiao.cublog.cn/------------------------------------------一:前言Linux设备模型是一个极其复杂的结构体系,在编写驱动程序的时候,通常不会用到这方面的东西,但是。理解转载 2012-09-30 01:54:26 · 855 阅读 · 0 评论 -
linux内核可装载模块(lkm)传参机制 module_param()/module_param_string()
对于如何向模块传递参数,Linux kernel 提供了一个简单的框架。其允许驱动程序声明参数,并且用户在系统启动或模块装载时为参数指定相应值,在驱动程序里,参数的用法如同全局变量。 使用下面的宏时需要包含头文件。 通过宏module_param()定义一个模块参数: module_param(name, type, perm); name既是用户看到的参数转载 2012-09-13 17:01:21 · 12614 阅读 · 0 评论 -
struct device / device_driver 结构体
一、定义:linux/include/linux/device.hstruct device { struct klist klist_children; struct klist_node knode_parent; /* node in sibling list */ struct klist_转载 2012-09-23 23:26:45 · 7335 阅读 · 0 评论 -
Linux内核部件分析--设备驱动模型之driver
上节我们分析设备驱动模型中的device,主要是drivers/base/core.c,可以说是代码量最大的一个文件。本节要分析的驱动driver,就要相对简单很多。原因也很简单,对于driver,我们能定义的公共部分实在不多,能再sysfs中表达的也很少。本节的分析将围绕drivers/base/driver.c,但头文件仍然是include/linux/device.h和drivers/bas转载 2012-10-09 11:01:39 · 728 阅读 · 0 评论 -
Linux内核部件分析--设备驱动模型之bus
前面我们分析了设备驱动模型中的device和driver,device和driver本来是不相关的东西,只因为bus的存在,才被联系到了一起。本节就来看看设备驱动模型中起枢纽作用的bus。本节的头文件在include/linux/device.h和drivers/base/base.h,实现代码主要在bus.c中。因为在bus中有很多代码时为了device找到driver或者driver找到dev转载 2012-10-09 11:10:52 · 1257 阅读 · 0 评论 -
i2c struct i2c_adapter /i2c_client /i2c_driver /i2c_add_driver() /i2c_register_driver()
1 struct i2c_adapter { 2 struct module *owner; 3 unsigned int id; 4 unsigned int class; // 适配器支持的类型,如传感器,eeprom等 5 const struct i2c_algorithm *algo;转载 2012-09-23 23:25:54 · 2331 阅读 · 0 评论 -
Linux内核部件分析--设备驱动模型之device-driver
前面我们分析了device、driver、bus三种类型,主要是三者的注册与注销,在sysfs中的目录与属性文件创建等内容。本节就来详细分析下,在设备注册到总线上时,总线是如何为其寻找对应的驱动的;在驱动注册到总线上时,总线又是如何为其寻找对应的设备的。本节的实现代码集中在drivers/base/bus.c和drivers/base/dd.c中。先来回忆下,在device_reg转载 2012-10-09 11:12:17 · 884 阅读 · 0 评论 -
linux设备和驱动加载的先后顺序
Linux驱动先注册总线,总线上可以先挂device,也可以先挂driver,那么究竟怎么控制先后的顺序呢。Linux系统使用两种方式去加载系统中的模块:动态和静态。静态加载:将所有模块的程序编译到Linux内核中,由do_initcall函数加载核心进程(/init/main.c)kernel_initàdo_basic_setup()àdo_initcalls()该函数中会将在__转载 2012-10-09 11:16:43 · 1239 阅读 · 0 评论