您好我有几个问题。如果有人会回答我会很高兴:) 我正在尝试为lcd 16X2模块编译linux驱动程序。 我正在尝试在我的代码中使用struct file_operations(); 我通过其他代码注意到他们将#ifdef KERNEL21添加到编译中。我尝试了这个,我的错误少得多。为什么它以这种方式工作。即时通讯使用内核2.6.18-128.4.1.el5 .. soo我需要更改为#ifdef KERNEL26吗?如果我尝试做的话,我会收到更多错误。
2. file_operation参数的一些函数是rtuen ssize_t。这是什么意思?在其他代码示例中还有“#ifdef KERNEL21”但仍然出现错误: “lcd_module.c:74:错误:预期标识符或ג(ג{גtoken”之前的ג>
3.last qustion,我使用了一个Makfile示例,我得到了.o文件而不是.ko,我用它来工作。如何使用.o文件运行模块?
感谢提前:)
答案 0 :(得分:1)
ssize_t
基本上是签名的size_t
,并且在内核中广泛使用,因为小于零的值用于在期望无符号大小的位置返回错误。例如,read
文件操作应返回读取的字节数,但如果内存不足,则可以返回-ENOMEM
,并在用户空间中正确设置errno
程序
使用2.6内核,您应该使用kernel-headers
包中的Makefile而不是手工制作的包,并生成.ko
文件而不是.o
。进一步阅读:http://www.cyberciti.biz/tips/build-linux-kernel-module-against-installed-kernel-source-tree.html