嗨,我有几个问题。如果有人回答我会很高兴的:)
我正在尝试为LCD 16X2模块编译linux驱动程序。
我试图在我的代码中使用struct file_operations();
1.通过其他代码,我注意到它们添加了#ifdef KERNEL21进行编译。我试图做到这一点,而我得到的错误更少了。为什么以这种方式工作。即时通讯使用内核2.6.18-128.4.1.el5 ..我是否需要更改为#ifdef KERNEL26?如果我尝试这样做,我会收到更多错误。
2.一些file_operation参数是rtuen ssize_t函数。这是什么意思?在其他代码示例中,也存在“ #ifdef KERNEL21”,但仍然出现错误:
“ lcd_module.c:74:错误:预期标识符或ג(גג{ג令牌之前的ג”
3.最后一个问题,我使用了一个Makfile示例,但得到的是.o文件,而不是可以用来工作的.ko文件。如何使用.o文件运行模块?
提前谢谢:)
最佳答案
ssize_t
基本上是带符号的size_t
,并在内核中得到广泛使用,因为小于零的值用于在预期无符号大小的地方返回错误。例如,预计read
文件操作将返回读取的字节数,但是如果内存不足,则可以返回-ENOMEM
,并且errno
将在用户空间程序中进行适当设置。
对于2.6内核,应该使用kernel-headers
软件包中的Makefile,而不是手工制作的Makefile,它会生成.ko
文件而不是.o
。在这里进一步阅读:http://www.cyberciti.biz/tips/build-linux-kernel-module-against-installed-kernel-source-tree.html
关于c - #ifdef KERNEL2x和file_operations(..,..,....),ssize_t函数,printk(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4452207/