start_kernel----smp_setup_processor_id(以及weak属性)

来源:互联网 发布:怎么在淘宝上做代销 编辑:程序博客网 时间:2024/05/16 02:07

在init/main.c中有定义

void __init __weak smp_setup_processor_id(void){}

这是一个__weak属性的空函数。
先了解一下__weak属性:

和gcc编译器相关:
weak属性可以让编译器在编译的时候忽略函数未定义的错误

弱符号:
若两个或两个以上全局符号(函数或变量名)名字一样,而其中之一声明为weak symbol(弱符号),则这些全局符号不会引发重定义错误。链接器会忽略弱符号,去使用普通的全局符号来解析所有对这些符号的引用,但当普通的全局符号不可用时,链接器会使用弱符号。当有函数或变量名可能被用户覆盖时,该函数或变量名可以声明为一个弱符号。弱符号也称为weak alias(弱别名)。

参考:
http://blog.chinaunix.net/uid-20593827-id-1918496.html
http://www.cnblogs.com/youthlion/archive/2011/12/01/2270680.html

源代码中不难发现:
有些架构比如arm是有自己的smp_setup_processor_id函数的,相当于上面所说的普通全局符号,这种情况下连接器就会忽略init/main.c中的smp_setup_processor_id函数。
而我使用的是x86架构,这时smp_setup_processor_id为空。

0 0
原创粉丝点击