您好,我有几个问题。如果有人能回答我会很高兴:) 我正在尝试为 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/