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

标签 c module driver

您好,我有几个问题。如果有人能回答我会很高兴:) 我正在尝试为 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 文件操作预计会返回读取的字节数,但如果内存不足,您可以返回 -ENOMEMerrno 将在用户空间程序中进行适当设置。

对于 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/

相关文章:

c - 如何在不使用数组的情况下在 C 中找到第三大整数?

javascript - 将继承与模块模式相结合

node.js - 使用模块进行 TypeScript 转换

mysql - 未找到 Jdbc 驱动程序

c - 什么情况下我们使用堆排序?

c - 理解 C 中的 strlen 函数

c - 指针正在复制内存地址而不是值

linux - Yocto - 添加自定义驱动程序

linux - 如何在 Linux 内核中使用 bio 请求读取扇区

windows - dokan sshfs 有多稳定?