淺嘗輒止37-module init1

書接淺嘗輒止36-module init0
我們知道m(xù)odule_init(x)的結果是static initcall_t __initcall_x6 = x;动分,并且這個變量是放在.initcall6.init

initcall6.init是什么淌哟?

initcall6.init不是顯式定義的腾降,所以不能從代碼中直接grep到它。這是內核的代碼最麻煩的點之一友绝,很多宏是非顯式定義的匕积,再厲害的代碼工具也不能幫助你直接找到一些宏的定義最盅,這段代碼也就成了天書。
對于這種非顯式定義的宏什黑,也不是完全沒有辦法犬绒,我的經驗是把它拆開程單獨的詞,再去搜索那些詞兑凿,就可能找到了凯力。
例如在kernel/include/asm-generic/vmlinux.lds.h中有如下定義

#define INIT_CALLS_LEVEL(level)                     \
        VMLINUX_SYMBOL(__initcall##level##_start) = .;      \
        *(.initcall##level##.init)              \
        *(.initcall##level##s.init)             \

INIT_CALLS_LEVEL(6)展開就是

        VMLINUX_SYMBOL(__initcall6_start) = .;      \
        *(.initcall6.init)              \
        *(.initcall6s.init)             \

至少.initcall6.init出現了茵瘾。就在這個define的下面,還有

#define INIT_CALLS                          \
        VMLINUX_SYMBOL(__initcall_start) = .;           \
        *(.initcallearly.init)                  \
        INIT_CALLS_LEVEL(0)                 \
        INIT_CALLS_LEVEL(1)                 \
        INIT_CALLS_LEVEL(2)                 \
        INIT_CALLS_LEVEL(3)                 \
        INIT_CALLS_LEVEL(4)                 \
        INIT_CALLS_LEVEL(5)                 \
        INIT_CALLS_LEVEL(rootfs)                \
        INIT_CALLS_LEVEL(6)                 \
        INIT_CALLS_LEVEL(7)                 \
        VMLINUX_SYMBOL(__initcall_end) = .;

VMLINUX_SYMBOL

關于VMLINUX_SYMBOL咐鹤,我們就按照下面最簡單的版本理解好了拗秘。

#define __VMLINUX_SYMBOL(x) x
#define VMLINUX_SYMBOL(x) __VMLINUX_SYMBOL(x)

*(.initcall6.init)

*(.initcall6.init)這個寫法在比較新的版本中會寫成KEEP(*(.initcall6.init)),意思是告訴編譯器將局部符號包含在目標文件的符號表中祈惶,我理解是__initcall6_start.initcall6.init等價雕旨。

且聽下回分解……

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市捧请,隨后出現的幾起案子凡涩,更是在濱河造成了極大的恐慌,老刑警劉巖疹蛉,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件活箕,死亡現場離奇詭異,居然都是意外死亡可款,警方通過查閱死者的電腦和手機育韩,發(fā)現死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闺鲸,“玉大人筋讨,你說我怎么就攤上這事∶校” “怎么了悉罕?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長立镶。 經常有香客問我蛮粮,道長,這世上最難降的妖魔是什么谜慌? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任然想,我火速辦了婚禮,結果婚禮上欣范,老公的妹妹穿的比我還像新娘变泄。我一直安慰自己,他們只是感情好恼琼,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布妨蛹。 她就那樣靜靜地躺著,像睡著了一般晴竞。 火紅的嫁衣襯著肌膚如雪蛙卤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機與錄音颤难,去河邊找鬼神年。 笑死,一個胖子當著我的面吹牛行嗤,可吹牛的內容都是我干的已日。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼栅屏,長吁一口氣:“原來是場噩夢啊……” “哼飘千!你這毒婦竟也來了?” 一聲冷哼從身側響起栈雳,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤护奈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后哥纫,有當地人在樹林里發(fā)現了一具尸體霉旗,經...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年磺箕,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抛虫。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡松靡,死狀恐怖,靈堂內的尸體忽然破棺而出建椰,到底是詐尸還是另有隱情雕欺,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布棉姐,位于F島的核電站屠列,受9級特大地震影響,放射性物質發(fā)生泄漏伞矩。R本人自食惡果不足惜笛洛,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乃坤。 院中可真熱鬧苛让,春花似錦、人聲如沸湿诊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厅须。三九已至仿畸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背错沽。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工簿晓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人甥捺。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓抢蚀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親镰禾。 傳聞我的和親對象是個殘疾皇子皿曲,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內容