
linux驱动
文章平均质量分 69
header
责任大于能力
展开
-
我对linux理解之tty三
我们现在congtty core层的file operations开始分析。static const struct file_operations tty_fops = { .llseek = no_llseek, .read = tty_read, .write = tty_write, .poll转载 2013-02-25 21:17:26 · 689 阅读 · 0 评论 -
I2C设备驱动编写,struct i2c_device_id,struct i2c_driver,i2c_add_driver,i2c_register_board_info
我的理念:简单实用即可,不要搞一堆源码出来,结果让人看了以后还不知道怎么用,看我的:1、在arch/arm/mach-xxx/ 自己的平台文件里添加i2c信息,美其名曰:i2c_board_info例如:static struct i2c_board_info __initdata xxxi2c_board_info[] = { { I2C_BOAR转载 2013-03-02 11:39:23 · 618 阅读 · 0 评论 -
new style I2C设备驱动分析,probe,struct i2c_device_id
new style I2C设备驱动分析,probe,struct i2c_device_id分类: linux内核移植/驱动 2012-08-06 00:15989人阅读 评论(0) 收藏 举报 本文来自:http://hi.baidu.com/fcni_cn/item/561f6f3f0c391abc124b146a最近看了韦东山驱动视频的i2转载 2013-03-02 11:51:07 · 387 阅读 · 0 评论 -
CAN总线驱动 .
AT91 linux开发板的驱动\CAN总线驱动分类: Android linux 驱动 2011-07-18 11:19 504人阅读 评论(0)收藏 举报linuxbytebuttonstructdelaybuffer编写心得;can总线的芯片是mcp2515,利用spi进行数据的读写,spi是写在底层的驱动,对于mcp的数据读写操作放在应用层里转载 2013-03-15 16:02:38 · 1170 阅读 · 0 评论 -
V4L2视频采集实现步骤
V4L2视频采集实现步骤 一.什么是video4linuxVideo4linux2(简称V4L2),是linux中关于视频设备的内核驱动。在Linux中,视频设备是设备文件,可以像访问普通文件一样对其进行读写,摄像头在/dev/video0下。 二、一般操作流程(视频设备):1. 打开设备文件。 int fd=open(”/dev/video0″,O_RDWR)原创 2013-04-01 14:57:54 · 1569 阅读 · 0 评论 -
V4L2视频采集实现例程
V4L2视频采集实现例程http://zhougaofeng.ixiezi.com/2009/12/01/v4l2/#more-59Video4linux 简介Video4Linux是为市场现在常见的电视捕获卡和并口及USB口的摄像头提供统一的编程接口。同时也提供无线电通信和文字电视广播解码和垂直消隐的数据接口。本文主要针对USB摄像头设备文件/dev/video0,进行视频图像采集方原创 2013-04-01 14:58:48 · 1702 阅读 · 0 评论 -
Linux设备驱动中的并发控制
并发与竞态 解决竞态问题的途径是保证对共享资源的互斥访问。访问共享资源的代码区域称为临界区,临界区需要以某种互斥机制加以保护。中断屏蔽、原子操作、自旋锁和信号量等是Linux设备驱动中可采用的互斥途径。中断屏蔽 中断屏蔽将使得中断与进程之间的并发不再发生,而且,由于Linux内核的进程调度等操作都依赖中断来实现,内核抢占进程之间的并发也就得以避免了。但是,需要注意是的是转载 2013-04-03 20:24:00 · 474 阅读 · 0 评论 -
linux驱动头文件
#include 是在linux-2.6.29/include/linux下面寻找源文件。#include 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件。#include 是在linux-2.6.29/arch/arm/mach-s3c2410/include/mach下面寻找源文件。#include在linux-2.6.31_TX2440转载 2013-04-24 13:49:01 · 562 阅读 · 0 评论 -
file_operations结构体详细分析
第一个 file_operations 成员根本不是一个操作; 它是一个指向拥有这个结构的模块的指针.这个成员用来在它的操作还在被使用时阻止模块被卸载. 几乎所有时间中, 它被简单初始化为 THIS_MODULE, 一个在 中定义的宏.这个宏比较复杂,在进行简单学习操作的时候,一般初始化为THIS_MODULE。loff_t (*llseek) (struct file * fi转载 2013-04-24 13:53:12 · 513 阅读 · 0 评论 -
AD7490 SPI DRIVER
#include #include #include #include #include #include #include #include #include #include #define AD7490_IOCTL_READ_AD _IOR(0, 1, int)static struct { struct spi_device *spi;原创 2013-06-11 19:44:41 · 3248 阅读 · 0 评论 -
AD5669 IIC DAC driver
*//*! * @file ad5669.c * * @brief AD5669 voltage-output DAC driver * */#include #include #include #include #include #include #include #include #include #define AD5669_I原创 2013-06-11 19:43:22 · 1412 阅读 · 0 评论 -
基于AT91RM9200的16C554扩展485口驱动
基于AT91RM9200的16C554扩展485口驱动2011-05-26 10:43:07分类: LINUX以前做的一个项目里用到的,用16C554扩展4个485口,我在驱动里添加了485的收发控制,用的还行,没发现什么问题。内核是2.6.13分别在st16c554_start_tx,st16c554_stop_tx添加了485控制,当然仅对我的系统适用,并且转载 2013-08-05 20:02:00 · 1316 阅读 · 0 评论 -
基于AT91RM9200+linux平台的MCP2510驱动
基于AT91RM9200+linux平台的MCP2510驱动2011-05-26 11:40:25分类: LINUX 内核为linux 2.6.30.4在此内核里,can设备被视为网络设备,目录为linux2.6.30.4/net/can,由于项目紧,对此并不熟悉,放弃这种方式。采用 这种方式做的驱动。把CAN设备视为字符型驱动,添加到内核里。适转载 2013-08-05 20:03:57 · 858 阅读 · 0 评论 -
我对linux理解之driver_register
/** * driver_register - register driver with bus * @drv: driver to register * * We pass off most of the work to the bus_add_driver() call, * since most of the things we have to do deal with原创 2013-02-26 08:17:26 · 328 阅读 · 0 评论 -
我对linux理解之v4l2
我们先看具体sensor slave怎么注册到v4l2的:static struct v4l2_int_ioctl_desc ov5642_ioctl_desc[] = {//ioctl与对应的序号联系在一起,在v4l2层将被转换成固定的名字 {vidioc_int_dev_init_num, (v4l2_int_ioctl_func *)ioctl_dev_init},原创 2013-02-26 08:09:37 · 723 阅读 · 0 评论 -
我对linux理解之alsa一
我们以imx51为平台,去分析alsa的架构。有两个文件跟平台具体相关的:一个是跟cpu的音频接口相关的:sound/soc/imx/imx-3stack-wm8994.c;另一个是跟codec芯片有关的:sound/soc/codecs/wm8994.c我们先看imx-3stack-wm8994.c中的初始化:static int __init imx_3stack_init原创 2013-02-26 08:11:16 · 577 阅读 · 0 评论 -
我对linux理解之tty一
我们从具体的uart驱动开始追踪它的层次,我的系统是mx51,故从mxc_uart.c进行。1,初始化注册过程:static int __init mxcuart_init(void){ int ret = 0; printk(KERN_INFO "Serial: MXC Internal UART driver\n"); ret = uart_reg转载 2013-02-25 19:12:51 · 873 阅读 · 0 评论 -
我对linux理解之tty二
我们在mxc_uart.c中还发现console的初始化:static int __init mxcuart_console_init(void){ register_console(&mxc_console); return 0;}转而看register_console(&mxc_console):void register_console(struct转载 2013-02-25 21:16:25 · 487 阅读 · 0 评论 -
我对linux理解之tty五
static ssize_t tty_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos){ struct tty_struct *tty; struct inode *inode = file->f_path.dentry-转载 2013-02-25 21:23:20 · 788 阅读 · 0 评论 -
我对linux理解之i2c一
i2c设备是非常普遍的一种设备,我们现在开始i2c子系统的分析。我们先从注册开始:static const struct i2c_device_id IT7260_ts_id[] = { { IT7260_I2C_NAME, 0 }, { } };static struct i2c_driver IT7260_ts_driver = { .pro转载 2013-02-25 21:24:40 · 437 阅读 · 0 评论 -
我对linux理解之spi
我们先看spi外设的设备注册:static struct mc13892_platform_data mc13892_plat = { .init = mc13892_regulator_init,};static struct spi_board_info __initdata mc13892_spi_device = { .modalias = "pmic_转载 2013-02-25 21:27:20 · 502 阅读 · 0 评论 -
我对linux理解之framebuffer
我们看下imx51的lcd控制器的驱动:int __init mxcfb_init(void){ int ret; ret = platform_driver_register(&mxcfb_driver); if (!ret) register_early_suspend(&fbdrv_earlysuspend); retur转载 2013-02-25 21:28:14 · 702 阅读 · 0 评论 -
我对linux理解之input一
我们先看下input的注册过程:input_register_device(input_dev):int input_register_device(struct input_dev *dev){ static atomic_t input_no = ATOMIC_INIT(0); struct input_handler *handler; const转载 2013-02-25 21:29:37 · 459 阅读 · 0 评论 -
我对linux理解之driver_register
/** * driver_register - register driver with bus * @drv: driver to register * * We pass off most of the work to the bus_add_driver() call, * since most of the things we have to do deal with原创 2013-02-26 08:20:06 · 369 阅读 · 0 评论 -
我对linux理解之tty四
我们上一节分析了tty_open,这一节我们分析tty_read。static ssize_t tty_read(struct file *file, char __user *buf, size_t count, loff_t *ppos){ int i; struct tty_struct *tty; struct inode *转载 2013-02-25 21:18:24 · 597 阅读 · 0 评论 -
我对linux理解之i2c 二
我们下面开始分析i2c的通信,即读写过程。我们先看读函数,对应i2c core中的i2c_master_recv:int i2c_master_recv(struct i2c_client *client, char *buf ,int count){ struct i2c_adapter *adap=client->adapter;//通过client访问adapter转载 2013-02-25 21:25:32 · 488 阅读 · 0 评论 -
我对linux理解之input 二
我们看下input从打开,到读写的过程:static const struct file_operations input_fops = { .owner = THIS_MODULE, .open = input_open_file,};static int __init input_init(void){......err = register_c转载 2013-02-25 21:30:26 · 426 阅读 · 0 评论 -
我对linux理解之v4l2
我们先看具体sensor slave怎么注册到v4l2的:static struct v4l2_int_ioctl_desc ov5642_ioctl_desc[] = {//ioctl与对应的序号联系在一起,在v4l2层将被转换成固定的名字 {vidioc_int_dev_init_num, (v4l2_int_ioctl_func *)ioctl_dev_init},转载 2013-02-25 21:31:57 · 707 阅读 · 0 评论 -
uboot 启动流程 freescale
配置文件: include/configs/mx53_xx.h1. board/freescale/“platform”/u-boot.lds (链接脚本)ENTRY(_start) 指示程序的入口函数_start2. cpu/arm_cortexa8/start.S// 程序开始的一些基本设置,汇编,不知说啥#endif ldr pc,转载 2013-10-08 07:38:47 · 879 阅读 · 0 评论