色医生小说bl:mini2440

来源:百度文库 编辑:九乡新闻网 时间:2024/05/02 07:56:59

      __init __initdata __exit __exitdata说明
   __init宏使内建模块中的init函数在执行完成后释放掉,不过可装载的模块不受影响。如果你关心init函数什么时候调用,这一点是很有用的。

还有个__initdata,和__init的作用基本上一样,不过它是针对变量而不是函数的。

__exit宏会使那些内建到内核的模块省略掉cleanup函数,不过和__init一样,对loadable模块没影响。再说一遍,如果你关心cleanup运行的时机,这是重要的。 register_chrdev() /register_chrdev_region()/ alloc_chrdev_region的区别? 在fs.h中的申明如下:
分配设备号:
extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *);
extern int register_chrdev_region(dev_t, unsigned, const char *);
注册设备:
extern int register_chrdev(unsigned int, const char *,
               struct file_operations *);
注销设备:
extern int unregister_chrdev(unsigned int, const char *);
注销设备号:
extern void unregister_chrdev_region(dev_t, unsigned);
说明:
**********************************
extern int register_chrdev(unsigned int, const char *,
               struct file_operations *);
作用:注册一个字符串设备
unsigned int 是主设备号;


http://hi.baidu.com/excellentderek/blog/category/mini2440_led_driver/index/0
const char*是设备名;
struct file_operations*是文件结构体。
********************************
extern int register_chrdev_region(dev_t first, unsigned int count, char* name)
要想注册一个设备则需要一个主设备号,那么就需要给设备分配一个主设备号。
这个函数的作用:就是给一个设备分配设备编号的。
first是要分配设备编号范围的起始值。
count是所请求连续设备编号的个数。不能太大。
name是设备名,(要与该设备编号范围关联)
如果分配成功,则返回0,
如果分配失败,则返回负的错误码。这时候所请求的编号区域不能用。
注:申请是只是一个设备编号区域。
**********************************
extern int alloc_chrdev_region(dev_ *dev, unsigned int firstminor, unsinged int count, char *name)
说明:
1.如果我们提前知道设备的编号,那么就用register_chrdev_region(),这个可以工作的很好。
2.但是如果我们不知道呢,linux一直想解决这个问题,这就有了上面的函数。
这个函数是动态申请设备编号,这是linux的一个进步,一直想可以动态申请设备编号。
有了它,我们就不要考虑设备编号的问题了,因为使用它后,内核可以运行上面的函数给我们动态地分配我们需要的主设备号。
-------不知道设备编号的问题就自动解决了。
*dev是一个输出参数,当设备成功完成调用后,它将保存已分配范围的第一个编号。
firstminor是要请求的第一个次设备号。一般为0。
count同样是所请求连续设备编号的次数。
*name同样是相应和设备名。
************************************
说明:因为我们在led_driver中已经知道了设备编号,所以只要注册就可以了。不需要分配编号。
*********************************
注销同上,不说了。
**********************************
回头再说说设备编号的问题:
我们可以分配设备编号,最后用动态分配,不易冲突。
那么我们给一个设备分配的主设备号具体是多少呢?在一个范围总有一个确定的值吧。
其实:
一旦给一个设备分配好了设备号后,我们就可以在/proc/devices中读取了。
那么怎么样才能自动读取呢?
看LDD3吧!好好研究一上。