对于我的作业,我需要阅读一些来自串口的字符串。 这必须在内核模块中完成,所以我不能使用stdio库。 我正在这样做:
#include <linux/module.h>
#include <linux/unistd.h>
#include <asm/io.h>
#include <asm/fcntl.h>
#define SERIAL_PORT "/dev/ttyACM0"
void myfun(void){
int fd = open(SERIAL_PORT,O_RDONLY | O_NOCTTY);
..reading...
}
但它给了我“隐式声明功能开放”
答案 0 :(得分:2)
您想使用filp_open()
函数,它几乎是帮助在内核空间中打开文件。你可以在上面找到那个男人here
来自filp_open()
的文件指针属于struct file
类型,并且在您完成后不要忘记用filp_close()关闭它:
#include <linux/fs.h>
//other includes...
//other code...
struct file *filp = filp_open("/dev/ttyS0");
//do serial stuff...
filp_close(filp);
答案 1 :(得分:1)
在内核源代码中寻找方法可能非常可怕,因为它太大了。这是我最喜欢的命令:find . -iname "*.[chs]" -print0 | xargs -0 grep -i "<search term>
。
快速说明:
所以对于这个搜索:“int open(”并且你会在名称中获得一些tty命中(这些将用于控制台) - 查看代码并查看它们是否是你想要的。
答案 2 :(得分:-1)
包括open
的标头文件,通常为#include <unistd.h>
编辑:
不确定内核使用,但执行man 2 open
。
在我的linux版本上,您可能需要以下所有内容:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
取决于您使用的宏。