Linux设备驱动
文章平均质量分 81
seanyxie
谢思源的个人博客
展开
-
基于mini2440的驱动程序开发和移植
<br />首先要保证自己的驱动程序正确的,然后编写Makefile,下面是Makefile例子<br />ifneq ($(KERNELRELEASE),)<br />obj-m := memdev.o<br />else<br /> <br />KDIR := /opt/FriendlyARM/mini2440/linux-2.6.32.2<br />all:<br /> make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-原创 2010-07-08 14:49:00 · 4783 阅读 · 0 评论 -
struct device 中的dev_id哪里去了?
struct device -replace bus_id with dev_name(),以后只要使用 dev -> bus_id 的时候,改成 dev_name()就可以了。参看http://blog.chinaunix.net/u3/108840/showart_2270330.html原创 2010-07-13 20:29:00 · 2482 阅读 · 0 评论 -
Linux内核中的platform机制
Linux内核中的platform机制从Linux 2.6起引入了一套新的驱动管理和注册机制:platform_device和platform_driver。Linux中大部分的设备驱动,都可以使用这套机制,设备用platform_device表示,驱动用platform_driver进行注册。Linux platform driver机制和传统的device driver 机制(通过driver_register函数进行注册)相比,一个十分明显的优势在于platform机制将设备本身的资源注册进内核,由内转载 2010-07-17 00:12:00 · 1548 阅读 · 0 评论 -
mini2440按键中断和LED gpio
<br />驱动程序:<br />LED分别使用GPB5/6/7/8 六个按键分别使用GPG0、3、5、7、6、11、所用中断号是8、11、13、15、14、19<br />/*<br />程序说明:字符型按键驱动,按下按键1时候1号LED亮,按2按键LED2亮,依次,按5时候所有LED都亮,按6时候闪烁两下<br />*/<br />#include <linux/miscdevice.h><br />#include <linux/kernel.h><br />#include <linux/init.原创 2010-07-16 14:34:00 · 3045 阅读 · 0 评论 -
kobject和kset
1 Kobject1.1 简介<br />Kobject 是Linux 2.6 引入的新的设备管理机制,在内核中由struct kobject数据结构 进行描述通过这个数据结构使所有设备在底层都具有统一的接口,kobject提供基本的对象管 理,是构成Linux2.6设备模型的核心结构,它与sysfs文件系统紧密关联,每个在内核中注 册的kobject对象都对应于sysfs文件系统中的一个目录。Kobject是组成设备模型的基本结 构。但是,它比较低调,从不单独使用,都是嵌套在别的数据结构中。类似于C++中原创 2010-07-13 12:35:00 · 1906 阅读 · 0 评论 -
s3c2410_gpio_cfgpin等内核导出函数
//这里面的函数都是内核导出函数/plat-s3c24XX/gpio.c中#include #include #include #include #include #include #include #include #include #include //设置gpio的工作模式,是输入,输出还是其他的//s3c2410_gpio_cfgpin(S3C2410_GPB(5),S3C2410_GPIO_INPUT),就是设置GPB5为输入模式void s3c2410_gpio_cfgpin(unsigned原创 2010-07-11 19:50:00 · 4590 阅读 · 2 评论 -
自动在/dev/下创建设备文件
<br />在modprobe或者insmod后,如果不自动创建设备文件,需要mknod手动创建设备文件,然后应用程序才能工作,<br />我们可以在安装了模块后,自动在/dev下创建设备文件<br /> <br />在设备中添加用于创建设备文件的class和每个即将在/dev下创建的设备struct device<br />如下:<br />struct mem_dev <br />{原创 2010-07-10 22:20:00 · 5116 阅读 · 0 评论 -
register_chrdev_region()和registe_chrdev()
分配设备编号,注册设备与注销设备的函数均在fs.h中申明,如下:extern int register_chrdev_region(dev_t, unsigned, const char *); //静态的申请和注册设备号extern int alloc_chrdev_region(dev_t, unsigned, const char *);//动态的申请注册一个设备号extern int register_chrdev(unsigned int, const char *,原创 2010-07-12 21:25:00 · 7030 阅读 · 2 评论 -
阻塞性驱动编写
<br />memdevQueue.c和memdevQueue.h是驱动程序,另有两个测试程序,当设备中无数据可读时候阻塞进程,然后调用另一个测试程序向设备写入数据,此时设备中有数可以读取,则唤醒读进程,从设备中读取数据。<br />驱动程序<br />memdevQueue.h<br />#include<linux/ioctl.h> //包含ioctl已经命令定义等<br />#ifndef _MEMDEV_H_<br />#define _MEMDEV_H_<br />#ifndef MEMDEV_原创 2010-07-10 12:49:00 · 1283 阅读 · 0 评论 -
register_chrdev() register_chrdev_region() alloc_chrdev_region的区别?
<br />在fs.h中的申明如下:<br />分配设备号:<br />extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *);<br />extern int register_chrdev_region(dev_t, unsigned, const char *);<br />注册设备:<br />extern int register_chrdev(unsigned int, const char *,<br原创 2010-07-12 01:10:00 · 2976 阅读 · 0 评论 -
__init __initdata __exit __exitdata的不同和说明
<br />__init宏使内建模块中的init函数在执行完成后释放掉,不过可装载的模块不受影响。如果你关心init函数什么时候调用,这一点是很有用的。<br />还有个__initdata,和__init的作用基本上一样,不过它是针对变量而不是函数的。<br />__exit宏会使那些内建到内核的模块省略掉cleanup函数,不过和__init一样,对loadable模块没影响。再说一遍,如果你关心cleanup运行的时机,这是重要的。原创 2010-07-11 22:00:00 · 1651 阅读 · 0 评论 -
poll select 机制
<br /> poll 和 select <br />使用非阻塞 I/O 的应用程序常常使用 poll, select, 和 epoll 系统调用. poll, select 和 epoll 本质上有相同的功能: 每个允许一个进程来决定它是否可读或者写一个或多个文件而不阻塞. 这些调用也可阻塞进程直到任何一个给定集合的文件描述符可用来读或写. 因此, 它们常常用在必须使用多输入输出流的应用程序, 而不必粘连在它们任何一个上. 相同的功能常常由多个函数提供, 因为 2 个是由不同的团队在几乎相同时间完成的:转载 2010-07-10 18:21:00 · 2869 阅读 · 0 评论 -
按键中断的platform bus设备和驱动
<br />platform_device <br /> <br />/*<br />程序说明:基于platform bus的按键中断设备程序,与platform BUS的按键驱动程序匹配使用<br />作者:谢思源<br />时间:2010.7.16<br />*/<br />#include <linux/init.h><br />#include <linux/module.h><br />#include <linux/kernel.h><br />#include <linux/fs.h><br原创 2010-07-17 12:50:00 · 2273 阅读 · 2 评论