疯了~2天了,书上拷贝的驱动一直无法打开。。
现在学习linux驱动。上来就在电脑上的linux写最简单的驱动。在驱动中的open函数只有个printk语句。
但在应用程序中调用open函数时。。。返回总是-1.这是为什么?
下面是我加载测试过程。
我在驱动程序中用的主设备号是240.
insmod call_dev.ko
mknod /dev/call c 240 0
./call2(应用程序名字) 最简单的hello world程序吧?
通常这么简单的例程是没有open函数与close函数的,只有init, exit
通常printk在init函数和exit函数中,只要运行了insmod driver.ko,就可以看到打印信息的
如果你非要在写段用户程序来OPEN它,那肯定有问题了
再有,如果你是在PC上调,终端没有显示是很正常的,因为PC终端不是所有的内核MESSAGE都显示的,得用dmesg | tail 看最末尾的信息 回复【1楼】billowtust
-----------------------------------------------------------------------
我用的是一个比hello,world复杂一点的程序,所有的fileoperation里的基本操作都有,但都只是一个printk函数。这个程序比较完整,算是一个演示吧。我驱动模块加载是成功的。我用dmesg能够看到。但是我在自己编写的应用程序中。open函数总是失败。我用了一个printf查看了。后来我用gdb看应用程序。open函数返回的fd总是-1.根本没有成功。一直找不到这个问题的根本原因。。
页:
[1]