淺嘗輒止36-module init0

大家學(xué)習(xí)Linux驅(qū)動(dòng)開(kāi)發(fā)的時(shí)候,一定見(jiàn)過(guò)module_init和module_exit。

淺嘗

照例,把這個(gè)宏分解開(kāi)。在kernel/include/linux/init.h里面有這些define

#define module_init(x)  __initcall(x);
#define __initcall(fn) device_initcall(fn)
#define device_initcall(fn)     __define_initcall(fn, 6)
#define __define_initcall(fn, id) \
    static initcall_t __initcall_##fn##id __used \
    __attribute__((__section__(".initcall" #id ".init"))) = fn; \
    LTO_REFERENCE_INITCALL(__initcall_##fn##id)
#define LTO_REFERENCE_INITCALL(x)

可以得到module_init(x)的展開(kāi)為

static initcall_t __initcall_x6 __used \
    __attribute__((__section__(".initcall6.init"))) = x;

這里面有兩個(gè)信息:

  • static initcall_t __initcall_x6 = x;
    有一個(gè)initcall_t類型的靜態(tài)變量__initcall_x6被賦值為x。
    initcall_t的定義如下,可以看出,這里定義了一個(gè)函數(shù)指針變量并賦值。
typedef int (*initcall_t)(void);
  • __attribute__((__section__(".initcall6.init")))
    這個(gè)變量被鏈接到.initcall6.init

這變量干啥用的?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 3,204評(píng)論 0 3
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語(yǔ)言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢(mèng)閱讀 100,687評(píng)論 9 468
  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 6,335評(píng)論 0 10
  • 土豆和西紅柿原來(lái)不是一個(gè)世界的人 但他們卻走到了一起 因?yàn)橥炼棺兂闪耸項(xiàng)l 而西紅柿變成了番茄醬 他們倆變成了絕配 ...
    酒不懂咖啡的苦閱讀 277評(píng)論 1 0
  • 這是讓人第一次讀無(wú)限愕然的短篇。精確而精巧的句子,筆伐干凈,前面寫得清楚精致,小場(chǎng)景形態(tài)描寫都細(xì)致且筆墨不多,但是...
    瘋狂的文學(xué)閱讀 590評(píng)論 0 0

友情鏈接更多精彩內(nèi)容