
linux驱动学习记录
文章平均质量分 64
vincent_zou
能者无疆!
展开
-
Kernel中断处理相关
Linux设备驱动程序学习(11)-中断处理 可以让设备在产生某个事件时通知处理器的方法就是中断。一个“中断”仅是一个信号,当硬件需要获得处理器对它的关注时,就可以发送这个信号。 Linux 处理中断的方式非常类似在用户空间处理信号的方式。 大多数情况下,一个驱动只需要为它的设备的中断注册一个处理例程,并当中断到来时进行正确的处理。本质上来讲,中断处转载 2009-03-09 19:26:00 · 292 阅读 · 0 评论 -
miscdevice、platform_device区别?
miscdevice、platform_device区别?最近研究Linux设备驱动程序遇到混乱,请大侠过来理理头绪。Linux设备模型中:bus_type、device、device_driver《Linux设备驱动程序》的linux设备模型章中说到设备模型中,所有设备都通过总线相连。添加设备devA,必须指定其device结构体的bus_type域,初始化其他域,然后调用device转载 2009-03-29 11:21:00 · 1021 阅读 · 3 评论 -
写的相当好的!Linux Platform Device and Driver
Linux Platform Device and Driver Linux Platform Device and Driver 日期:08-06-27 从Linux 2.6起引入了一套新的驱动管理和注册机制:Platform_device和Platform_driver。 Linux中大部分的设转载 2009-03-29 15:00:00 · 436 阅读 · 1 评论 -
以后要用的 基于S3C2410的SD卡linux驱动工作原理(一)(转载)
基于S3C2410的SD卡linux驱动工作原理(一)(转载) 我在讲嵌入式Linux驱动开发班的时候,发现不少学员对SD卡驱动这块比较感兴趣,课下来找我探讨。而在很多技术论坛,也有不少人问这方面的问题,所以就想写一下这方面的内容,希望对大家的学习能有所帮助。想了解SD卡的工作原理,首先需要了解的就是SD卡协议了,这个在网上可以轻松的下载到转载 2009-03-29 15:13:00 · 286 阅读 · 0 评论 -
s3c2440的dma操作的一般步骤
s3c2440的dma操作的一般步骤 一般的,在s3c2440中,要想进行dma传输,需要一下七个步骤:一:int s3c2410_dma_request(unsigned int channel, struct s3c2410_dma_client *client,转载 2009-03-29 09:57:00 · 524 阅读 · 0 评论 -
platform_device与驱动的联系
platform_device与驱动的联系 首先你需要为SOC的各个功能部分定义他的一些资源.例如可用于访问的寄存器地址.中断号,DMA什么的。然后将这些资源(resource) 作为 platform 的dev .通过platform_add_devices函数将你定义的paltform_device变量注册到系统的dev里面.。或者转载 2009-03-29 11:13:00 · 292 阅读 · 0 评论 -
How can I use the IOCTL number in the user space? (get it!)
As we know,I can get an unique ioctl number in kernel space using the macros defined as following:#define MYDRIVER_IOC_MAGIC g//'g'是一个内核中,没有占用的一个ioclt code! #define MYDRIVER_IOC_OP2 _IO(MYDRI原创 2009-03-31 21:16:00 · 298 阅读 · 0 评论 -
建立linux内核过程简单解析
1.先使用configuration tools,配置内核。a:make menuconfig ARCH=armb: 然后:make ARCH==arm CROSS_COMPILE=arm-linux- (应该是内核出来之后,再次运行的吧??)2.选择配置内核3.生成.config文件,其中包含着配置信息。4.make bzImage 5.root Makefile 读原创 2009-03-31 20:48:00 · 233 阅读 · 0 评论 -
PWM
前几天。就弄了PWM的驱动,当时的情况是,示波器可以观察到PWM信号!程序退出,然后系统“死了”ctrl+C 也没有反应。过了一天,想了想是不是ioctl发命令时。把编码的命令(因为很简单0,1)同时发给其他的进程!把串口或是其他的进程给杀了!导致键盘输入无反应! 完全是猜测!但还是迫使我,去详细看了看,用幻数,和内核程序来生成ioctl命令的方法!这样才可以确保,生成的命令码事系统原创 2009-04-04 19:44:00 · 197 阅读 · 0 评论 -
PWM驱动奇怪的问题,最终解决了!! 请保持良好的编程习惯!!!
以后就养成习惯,用regs-XXX.h中定义了的相关位!!!! 不要自己往寄存器里填数字。用已定义的位来配置寄存器虽然麻烦点,但很好看啊 O(∩_∩)O哈哈~今天又有点时间来处理下,以前残留的问题了! PWM驱动,运行完就“死机”,或是,没有波形出来! 上午调了一段时间,把问题给解决了! 一方面,寄存器没有设置好! 这一点 是比较汗颜的!这也是之前就,没有很好了原创 2009-04-05 12:59:00 · 331 阅读 · 0 评论 -
“拿来” at24c02的驱动程序
前段时间,看了看iic总线,故弄了一个at24c02的驱动,在网上下了一个。看了看,很符合我的裸机程序改造驱动的思路!haha 故把它优化了一下,往系统里。移植了! 随手就加了一个自旋锁,来保护下读写!spin_lock_irq();...........................................结果,程序达不到目的!具体原因是收不到应答信号!(最原创 2009-04-04 19:29:00 · 378 阅读 · 0 评论 -
IIC驱动源代码基于字符设备(写的不错)
2.1 驱动源代码#include #include #include #include #include #include #include #include #include #include #include #define DEVICE "TEST_IIC"#define DATA_LEN 6int major = 233;int minor =转载 2009-05-01 15:16:00 · 744 阅读 · 0 评论 -
块设备驱动程序实现 (好好琢磨琢磨)
块设备驱动程序实现从虚拟文件系统,文件系统,逻辑卷一路顺流而下,一直来到了硬盘块设备驱动程序。从上层看下层,总是被系统的实现搬弄得云遮雾障,不明所以,因此,干吗不干脆从底层开始慢慢往上爬。OK,让我们就从块设备的驱动程序开始吧。首先定义一些常用变量(为什么是GK? GK stands for gingko。这是Gingko Storage System的一个组成部分。什么是Gingko Stora转载 2009-05-05 15:08:00 · 471 阅读 · 0 评论 -
IIC驱动分析
网上分析IIC驱动数据传输流程的的文章还是比较少,大多数就是一个驱动的框架在哪里,没办法,偷懒不成就只好自己仔细的分析了,过程中也有一些不懂的地方,得到论坛里很多热心的朋友帮助, 感谢他们。发到网上跟大家共享自己的经验,让一些初学者能够少走一些弯路, 如果有错误希望大家能及时指正。谢谢! 首先分析I2C.DEV 中的 ioctl 函数, =========两个重要的结构体======转载 2009-05-01 15:07:00 · 597 阅读 · 0 评论 -
platform_device的注册详情分析
platform_device的注册详情分析 ================================Author: taoyuetaoEmail: tao_yuetao@yahoo.com.cnBlog: http://www.eetop.cn/blog/?11145 2006-11-21====转载 2009-03-29 11:14:00 · 358 阅读 · 0 评论 -
通过NFS启动QQ2440
通过NFS启动QQ2440 今天,我通过NFS启动我的QQ2440的板子。本来很简单的东西,我却做了一个晚上。其主要原因有:1,对原理的不理解,按照我们的实验老师所说,不要让手指挥你的脑,而要让脑去指挥你的手,而我正好有用手指挥脑的毛病;2,不仔细,对一些细节的忽视,其实正确结果很早就做出来了,但因为没有仔细看转载 2009-03-29 10:46:00 · 254 阅读 · 0 评论 -
关于2.6.20中的dma的
关于2.6.20中的dma的 一些相关函数的说明。供自己日后参考。--------------------------------------------------------------------------------------int __init s3c24xx_dma_init_map(struct s3c2转载 2009-03-29 10:41:00 · 197 阅读 · 0 评论 -
字符设备驱动程序及数据结构简介
1.设备号 分为主次设备号,看上去像是两个号码,但在内核中用dev_t()一种结构表示,同时不应该自己去假设赋值设备号,而是使用宏()来取得.MAJOR(dev_t dev); MINOR(dev_t dev);即使你有确定的主,次设备号也要用dev=MKDEV(int major, int minor); 1.1分配设备号静态分配 //first就是上面的devi转载 2009-03-09 19:45:00 · 837 阅读 · 0 评论 -
linux 对arm的支持
在linux内核中对S3C2410的定义主要是两大块:1.在include/asm-arm/arch-s3c2410中有许多关于2410的头文件(.h)如:regs-gpio.h regs-**** //相关的寄存器和控制位就定义在这类文件中map.hhardware.h2.在linux/arch/arm/mach-s3c2410/gpio.c中有许多关于2410的文件(.c .h)如:gpio转载 2009-03-12 09:07:00 · 261 阅读 · 0 评论 -
触摸屏1--一个新的挑战
我经常是这么做的:在写一个驱动之前,先把其对应的裸奔程序给弄好。 昨天,就弄了触摸屏的程序。 开始看了下datasheet,对各个寄存器的配置有了了解。就开始动手弄了。说动手弄,是因为我是来移植的! 程序强大的友善公司已经提供了 。仔细看看了他们的程序,恩! 不错。 懂的差不多了! 开始移植吧。 咦! 出现问题了! 移植过去的程序用不了!这下可头大了! 调试了一阵子,改了原创 2009-03-13 14:54:00 · 195 阅读 · 0 评论 -
今天调好了键盘驱动!
还记得去年10月,我就买了块板子,准备学嵌入式开发。直到现在才开始认认真真地写驱动玩玩。这个键盘驱动我以前就弄过的,不过当时知识学的不扎实。光会纯搬别人的程序,出现了问题都不知道怎么解决。经过这么几个月的努力,现在做起来就舒服多了 。 在写和调试的过程中也遇到了许多的问题。下面就是一些记录: POLL函数的实现方法:static unsigned int key_dev_poll(原创 2009-03-11 18:19:00 · 354 阅读 · 0 评论 -
setting the type of external interrupt!!!!!
int set_irq_type(unsigned int irq, unsigned int type) ;..................................................................................................... case IRQT_NOEDGE://type ca原创 2009-03-11 18:55:00 · 171 阅读 · 0 评论 -
something about poll_wait
驱动中POLL函数的实现方法:static unsigned int key_dev_poll( struct file *file, struct poll_table_struct *wait){ unsigned int mask = 0; poll_wait(file, &key_dev->wq, wait); if (key_de原创 2009-03-11 19:04:00 · 462 阅读 · 0 评论 -
内核编程头文件整理
//typedef 了 很多常用的数据类型。dev_t 等类型MAJOR(dev_t dev); MINOR(dev_t dev);相反, 如果你有主次编号, 需要将其转换为一个 dev_t, 使用:MKDEV(int major, int minor);中int register_chrdev_region(dev_t first, unsigned int原创 2009-03-17 21:39:00 · 544 阅读 · 0 评论 -
触摸屏2-不得不接受暂时失败
昨天加今天上午,一直在写我的触摸屏驱动程序, 在这过程中,碰到了很多很多的问题。 通过查资料,看内核源代码解决了不少问题,但仍然有问题存在! 现在的问题就是 :程序无法进入中断! 看到网上很多驱动程序的例子, 牵涉到了 平台设备,输入子系统等概念,我还不太懂。 我自己的程序是把它完全当做字符设备来写的 。准备先放一放手上的事,学一学相关的概念,再回头写。 虽然,写触摸屏驱动没原创 2009-03-22 10:43:00 · 215 阅读 · 0 评论 -
触摸屏3--我习惯了绝处逢生
经过不懈的努力,和网上的求助,搁置了一天的触摸屏,在今天被我弄好了!我按照自己的思路,写出了整个驱动。网上很多的驱动都是基于input子系统的,在现在看来,我还不是很懂书上也讲得不是很多,这一点很郁闷。书上有还可以学,现在是 书上都讲的比较笼统。看来只好找找外文书了 在触摸屏2一文中,就提到了不少问题。如今有出现了新的问题,被我一一解决了 。1.在驱动程序中,不需要对中断相关原创 2009-03-24 19:04:00 · 262 阅读 · 0 评论 -
something about slab layer!!
总概念:the Linux kernel provides the slab layer (also called the slab allocator). The slab layer acts as a generic data structure-caching layer. The slab layer divides different objects into grou原创 2009-03-26 09:34:00 · 138 阅读 · 0 评论 -
使用__attribute__处理对齐问题
使用__attribute__处理对齐问题 GNU C扩展的__attribute__ 机制被用来设置函数、变量、类型的属性,其用得较多的是处理字节对齐的问题。__attribute__ 的语法为: __attribute__ ((语法列表))参数aligned(number) [number为最小转载 2009-03-26 11:27:00 · 305 阅读 · 0 评论 -
Linux系统启动过程详解
Linux系统启动过程详解 1)BIOS自检2)启动Grub/Lilo3)加载内核4)执行init进程5)通过/etc/inittab文件进行初始化6)登陆Linux1)BIOS自检 a)POST(Power On Self Test),对硬件进行检测 计算机在通电后首先由BIOS进行自检,即所谓的P转载 2009-03-26 11:30:00 · 351 阅读 · 1 评论 -
分析list_entry()宏
分析list_entry()宏 list_entry()宏#define list_entry(ptr, type, member) / ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) ptr是指向list_head转载 2009-03-26 11:28:00 · 305 阅读 · 1 评论 -
Linux的I2C驱动架构
最近因为工作需要涉及到了I2C总线。虽然我过去用过I2c,但看了 Linux kernel 后才发现,一个 layer 能被做到这样完善。1. Linux的I2C驱动架构Linux中I2C总线的驱动分为两个部分,总线驱动(BUS)和设备驱动(DEVICE)。其中总线驱动的职责,是为系统中每个I2C总线增加相应的读写方法。但是总线驱动本身并转载 2009-05-01 14:59:00 · 343 阅读 · 0 评论