- 论坛徽章:
- 0
|
#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int main()
{
int testdev;
int i;
char buf[10];
testdev=open("/dev/lcd",O_RDWR);
if(testdev=-1)
{
printf("Cann't open file\n");
exit(0);
}
read(testdev,buf,10);
for(i=0;i<10;i++)
printf("%d\n",buf);
close(testdev);
}
上面为我写的一个简单的驱动程序的测试程序usblptest.c。可是运行(./usbtest)后,显示:
[root@localhost test3]# lstest
Makefile usblptest usblptest.c usblptest.o
[root@localhost test3]# ./usblptest
Cann't open file
[root@localhost test3]#
这是怎么回事情啊,无法打开open函数(值返回为负),我是没有接实际设备的。驱动程序我是在系统内找的一个lcd.c,我自己编译后,在加载进内核的,过程如下:
[root@localhost test2]# ls
lcd.c lcd.h lcd.ko lcd.mod.c lcd.mod.o lcd.o Makefile Module.symvers
[root@localhost test2]# insmod lcd.ko
[root@localhost dev]# mknod lcd c 10 255
[root@localhost dev]# ls
bsg lp3 ram6 tty1 tty36 tty62 usbmon3
bus MAKEDEV ram7 tty10 tty37 tty63 usbmon4
cdrom mapper ram8 tty11 tty38 tty7 usbmon5
console mem ram9 tty12 tty39 tty8 usbmon6
core net ramdisk tty13 tty4 tty9 usbmon7
disk null random tty14 tty40 ttyS0 usbmon8
dvd nvram root tty15 tty41 ttyS1 vcs
fd oldmem rtc tty16 tty42 ttyS2 vcs1
full parport0 scd0 tty17 tty43 ttyS3 vcs2
fuse parport1 sda tty18 tty44 urandom vcs3
hpet parport2 sda1 tty19 tty45 usbdev1.1_ep00 vcs4
initctl parport3 sda2 tty2 tty46 usbdev1.1_ep81 vcs5
input port sda3 tty20 tty47 usbdev2.1_ep00 vcs6
kmem ppp sda5 tty21 tty48 usbdev2.1_ep81 vcs7
kmsg ptmx sda6 tty22 tty49 usbdev3.1_ep00 vcs8
kvm pts sda7 tty23 tty5 usbdev3.1_ep81 vcsa
lcd ram sda8 tty24 tty50 usbdev4.1_ep00 vcsa1
具备了lcd设备文件了。我查看驱动源代码,发现里面的MINOR设置成255,
static struct miscdevice lcd_dev = {
MISC_DYNAMIC_MINOR,
"lcd",
&lcd_fops
};
static int lcd_init(void)
{
int ret;
unsigned long data;
pr_info("%s\n", LCD_DRIVER);
ret = misc_register(&lcd_dev);
。。。。
[ 本帖最后由 dreamice 于 2008-12-30 15:28 编辑 ] |
|