2018-09-22 总结

耗费时间点 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; //这就是分割正确的效果

你可能感兴趣的:(2018-09-22 总结)