檔案:beep.rar
大小:21kb
儘管在2.6的核心版本已經支援udev,可以很方便的使用,並且使用也很舒服。但是使用udev,在啟動過程中掃瞄/sys/class目錄並生成裝置節點的時間稍微有點長,在一些系統中是無法忍受的,所以沒辦法只好放棄udev,回到靜態裝置節點的時代,以加快啟動速度。
2.6核心中,引入了cdev概念,使用cdev的驅動與傳統的2.4的字元驅動又不一樣,下面給出乙個使用cdev和靜態裝置節點的驅動範例。
beepdrv.c
1beepdrv.h/*beepdrv.c
2beep driver. guangzhou zhiyuan34
5by chenxibing 6*/
78 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #include 19 #include 20 #include 21 #include 22 #include 23
24 #include 25 #include 26 #include 27 #include 28 #include 29 #include 30
31 #include 32 #include 33
34 #include 35
36 #include "
beepdrv.h"37
38#define dev_name "beep"
39struct cdev *beep_cdev;
40#define beep_major 231
41#define beep_minor 0
42int beep_major =beep_major;
43int beep_minor =beep_minor;
4445 module_param(beep_major, int, 0
);46 module_param(beep_minor, int, 0
);47
48#define gpio_iobase io_p2v(gpio_base)
4950
static
struct
semaphore beep_sem;
5152
static
int beep_open(struct inode *inode, struct file *filp)
5360
61static
int beep_release(struct inode *inode, struct file *filp)
6269
70static
int beep_ioctl(struct inode *inode, struct file *filp,
71 unsigned int cmd, unsigned long
arg)
7278
79if (_ioc_nr(cmd) >=beep_ioc_maxnr)
8283
//printk("arg=0x%x\n", arg);
8485
8687
switch
(cmd)
105106
return0;
107}
108109
static
struct file_operations beep_fops =;
115116
static
void beep_setup_cdev(struct cdev *dev)
117128
129static
int __init beep_init(void
)130
148if (result < 0
)149
return
result;
150151 beep_cdev =cdev_alloc();
152if (!beep_cdev)
156 beep_setup_cdev(&beep_cdev);
157 printk(dev_name "
registered ok.\n");
158return0;
159fail:
160 cdev_del(&beep_cdev);
161 unregister_chrdev_region(mkdev(beep_major, beep_minor), 1
); 162
//beep_exit();
163164
return
result;
165}
166167
static
int __exit beep_exit(void
)168
173174
175module_init(beep_init);
176module_exit(beep_exit);
177178 module_author("
abing ");
179 module_description("
zhiyuan tp-beep driver");
180 module_license("
gpl");
1#ifndef __beepdrv_h
2#define __beepdrv_h
3 #include 4
5#define beep_ioc_magic 'b'67
#define set_beep_on _io(beep_ioc_magic, 0)
8#define set_beep_off _io(beep_ioc_magic, 1)910
#define beep_ioc_maxnr 2
1112
#endif
//__beepdrv_h
Linux 字元裝置驅動cdev
關鍵字 字元裝置檔案建立 device create 字元裝置cdev 與裝置號dev t的聯絡 sys class 目錄下建立類目錄class create linux下面一切皆是檔案,這句是有 的,這個 起因,應該就是vfs 虛擬檔案系統,將soc下面的所有外設,都抽象成乙個個檔案進行管理。外設...
Linux字元裝置驅動 cdev結構體day00
day00 摘要 linux字元裝置驅動cdev結構體 1.cdev結構體 描述乙個字元裝置 定義 struct 1 dev t定義裝置號,32位,12位主裝置號,20位次裝置號.2 使用巨集major,minor可以獲得裝置主次號 major dev t dev 主裝置號 minor dev t ...
字元裝置裝置節點建立的兩種方法
在linux下,字元裝置和塊裝置都體現了 一切皆為檔案 的思想,對於這兩種裝置而言,他們在linux系統中都有乙個對應的檔案來 代表 它們的存在,那就是裝置檔案。應用程式通過操作某個裝置檔案,便可以操作對應的硬體。裝置有主裝置號和次裝置號,例如在linux下通過ls l dev ttys0命令可以看...