耗费时间点 1:
写代码不细心,实现字符设备的open函数,居然不给return返回值,导致应用一旦调用打开设备,就打印长串的内核崩溃打印,但是奇怪的是打印栈打印里面没有提及本人实现的open函数名.
以后一定要注意,只要是函数就给个返回.无论是否void.标识的函数,这样子应该可以提醒是否该设定返回值.
需要深刻记忆点 2:
替代mknod命令的内核函数,可以用class_create(...) + device_create(...)函数实现.
知识点巩固 3:
C 宏 里的 ## 符号的使用,一定要谨记变量实体和非变量实体一定要分割清楚,不然达不到效果,
例如:
#define A(a,b,c,d) struct a_##b c_##d
//使用的时候出现如下结果
A(H,Q,W,T); //相当于代码 struct a_Q c_T; 造成这个结果,就是没有把变量和常量用##分割好
//应当如下使用
#define A(a,b,c,d) struct a##_##b c##_##d
//使用的结果为
A(H,Q,W,T); //相当于代码 struct H_Q W_T; //这就是分割正确的效果