最近,在给字符设备驱动globalmem增加代码,实现其只能被一个进程打开的功能时,遇到了一个错误error:expected declaration specifiers or '...' before '&' token,周末折腾了两天都没有思路。周一的时候总算解决了。现总结如下:
1、原globalmem设备驱动已编译调试通过。
2、为实现只能被一个进程打开的功能,选择了信号量,增加的只有几行代码,如下所示:
3、结果增加了这几行代码后,编译就出现问题,如下:
4、参考了如下文档。
https://blog.csdn.net/huangweiqing80/article/details/83038154
首先怀疑是否函数使用有误,参考了上面这篇,不是这个问题。
https://blog.csdn.net/tmt123421/article/details/49181679
这篇说的是头文件的包含问题,然后检查了头文件,未果。。
https://stackoverflow.com/questions/35952154/expected-declaration-specifiers-or-before-token
这篇是一个13岁小孩遇到的类似问题,好吧,比人家多活20年,白活了。。
5、解决:将init_MUTEX(&sema)这条语句放到模块加载函数中,上述问题解决了,但出现了新的错误,如下:
6、新的问题是因为我使用的Ubuntu18.04的系统,直接使用该系统包含的内核编译,新的内核不支持init_MUTEX(&sema)这条语句,改用sema_init(&sema, 1)就ok了,如下:
以下内容跟上