易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux内核中的platform机制


 
Linux内核中的platform机制
从Linux 2.6起引入了一套新的驱动管理和注册机制:platform_device和platform_driver。Linux中大部分的设备驱动,都可以使用这套机制,设备用platform_device表示,驱动用platform_driver进行注册。
Linux platform driver机制和传统的device driver 机制(通过driver_register函数进行注册)相比,一个十分明显的优势在于platform机制将设备本身的资源注册进内核,由内核统一管理,在驱动程序中使用这些资源时通过platform device提供的标准接口进行申请并使用。这样提高了驱动和资源管理的独立性,并且拥有较好的可移植性和安全性(这些标准接口是安全的)。platform机制的本身使用并不复杂,由两部分组成:platform_device和platfrom_driver。通过platform机制开发底层设备驱动的大致流程如图所示。
图 platform机制开发驱动流程
platform_device结构体用来描述设备的名称、资源信息等。该结构被定义在include/linux/platform_device.h中,定义原型如下:
struct platform_device {
const char * name;    //定义平台设备的名称
int id;
struct device dev;
u32 num_resources;
struct resource * resource; //定义平台设备的资源。
};
下面来看一下platform_device结构体中最重要的一个成员struct resource * resource。struct resource被定义在include/linux/ioport.h中,定义原型如下:
struct resource {
resource_size_t start;  //定义资源的起始地址
resource_size_t end;  //定义资源的结束地址
const char *name;    //定义资源的名称
unsigned long flags; //定义资源的类型,比如MEM,IO,IRQ,DMA类型
struct resource *parent, *sibling, *child;  //资源链表指针
};
通过调用函数platform_add_devices()向系统中添加该设备了,该函数内部调用platform_device_register( )进行设备注册。要注意的是,这里的platform_device设备的注册过程必须在相应设备驱动加载之前被调用,即执行platform_driver_register()之前,原因是驱动注册时需要匹配内核中所有已注册的设备名。
接下来来看platform_driver结构体的原型定义,在include


相关文档:

LINUX下关于CPU信息获取

1. TOP    命令 然后按“1”,可以查看CPU有多少个核。
2. less /proc/cpuinof 可以查看 CPU内核个数及更多内核信息。
3.dmesg |grep CPU 可以核实CPU内核个数且基于多少个物理CPU及详细信息。
4.dmidecode |grep "CPU"  可以核实多少个物理CPU。
另外  grep '' * 有妙用,可以查看 ......

linux内存池

内存池(memory pool) 是linux2.6的一个新的特性。基本上将,一个内存池允许一个内核成分,如块设备子系统,仅在内存不足的紧急情况下分配一些动态内存来使用。
内存池是动态内存的储备,只能被特定的内核成分(即池的“拥有者”)使用。拥有者通常不使用储备;但是,如果动态内存变得极其稀有以至于所有普通内
......

Ten Powerful Linux Commands

Today is the last day in 2009, I have no idea what should I do but just want to pray that my family, relatives and bosom  friends would have a sweet life in the next year. Linux is a 2nd OS in my life, there are always something new can make me  feel awesome, so I think that with continuou ......

linux系统的ld.so.conf文件

今天重新编译以前的一个程序,里面用到iconv库:gcc test.cc -liconv
运行时:a.out:error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory
以前编译运行是可以的,可能是不久前升级了iconv库影响。在/usr/local/lib下可以找到libiconv.so.2,把/usr/local/l ......

详解Linux内核之双向循环链表(转)

摘要: 本文详解了内核中面向对象的list结构的原理,以及如何以list为内嵌对象来构造自己的链表结构,如何从内嵌list对象获得自定义的对象指针;探讨了各种宏或者函数的详细使用方法及怎样以通用list结构来操作自定义对象。
关键字:双向循环链表,list,list_entry,typeof,containerof,list_for_each,list_for_each ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号