misc_register()用主编号10调用 register_chrdev(),设备名称和函数表指针通过miscdevice数据结构获得。同样,miscdevice 数据结构还保存设备驱动程序所使用的次要号码。
以下是在设备驱动程序代码内注册 EP9312 触摸屏采用的函数调用:
misc_register(&ep93xx_ts_miscdev) |
数据结构 ep93xx_ts_miscdev 是对触摸屏硬件的内核访问,定义如下:
static struct miscdevice ep93xx_ts_miscdev =
{
EP93XX_TS_MINOR, /* device minor number */
"ep93xx_ts", /* name of the device */
&ep93xx_ts_fops /* device file operations */
/* table pointer */
} |
其他类型设备驱动程序采用次要号码区分设备。
硬件接口函数在设备驱动器内即被静态定义,当设备注册时,由内核通过传递给操作系统的文档操作函数指针获得。指针列表定义如下:
static struct file_operations ep93xx_ts_fops =
{
owner: THIS_MODULE,
read: ep93xx_ts_read,
write: ep93xx_ts_write,
poll: ep93xx_ts_poll,
open: ep93xx_ts_open,
release: ep93xx_ts_release,
fasync: ep93xx_ts_fasync,
} |
初始化触摸屏设备后,即需创建文档系统特殊文件,以便协助应用程序代码访问设备。创建 EP9312 触摸屏特殊文件的 mknod 命令如下:
mknod /dev/misc/ep93xx_ts c 10 240 |
该步骤即可在根目录系统下的初始化文档初始化 Linux 时得到执行,也可在命令提示里实现手动操作。
以下是用户级应用代码的一个实例,通过文档系统特殊文件访问触摸屏设备:
#define TS_DEV "/dev/misc/ep93xx_ts"
int read_ts()
{
int fd, nbytes;
short data[3];
fd = open("/dev/misc/ep93xx_ts", O_NONBLOCK);
if ( fd < 0 )
{
printf("Unable to open touch screen device %s!
", TS_DEV);
exit(1);
}
nbytes = read(pd_fd, data, sizeof(data));
close(fd);
if (nbytes != sizeof(data))
return 0;
return 1;
} |