内核中有些函数有asmlinkage修饰符,比如:
这里基于5.15.133版本分析一下这个“修饰符”。
asmlinkage本身是个宏定义,X86/IA64以外的架构定义在include/linux/linkage.h头文件中。
也就是asmlinkage本身就是extern “C”。
主要的目的是让C++程序能够调用到这个C语言定义的函数。
比如下面的程序:
main.c:
callee.c:
我们用gcc命令进行编译的时候会报undefined reference错误。
如果给hello函数加个extern “C”,
编译会顺利进行。