#ifdef KERNEL2x& file_operations(..,..,..,..),ssize_t函数,printk()

时间:2010-12-15 16:19:50

标签: c module driver

您好我有几个问题。如果有人会回答我会很高兴:) 我正在尝试为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文件运行模块?

感谢提前:)

1 个答案:

答案 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