看板 Linux 關於我們 聯絡資訊
1.不加上 __init會不會有什麼影響呢? 我想是不會的,系統依然可以正常運做 2.加上init的目的是希望將相同類似只執行過一次之後 就再也用不到的code放在同一個section,而且是在4K boundry上面,這樣子在開完機的最後就可以把這一區塊 free掉,變成可以再利用 3.不是加上__init就會使這個函式只被執行一次 是因為這個函式只會被執行一次,所以才加上init讓他執行完 可以被一起free掉 ※ 引述《gn00618777 (非常念舊)》之銘言: : ※ [本文轉錄自 C_and_CPP 看板 #1JnJQ54O ] : 作者: gn00618777 (非常念舊) 看板: C_and_CPP : 標題: [問題] __initdata 和 __init : 時間: Tue Jul 15 22:11:13 2014 : 在 kernel 的程式裡看到函式有 __initdata 以及 __init 屬性 : 上網查了一下,只要函式加了這兩個,代表函式只會執行一次之後就被丟出 : 記憶體...函式裡面的東西會放在.init.text的section中 ←這甚麼鬼= =? : ===================================================================== : 以下為 kernel porting 的範圍 也是關於C語言 : static struct i2c_board_info __initdata am335x_i2c0_boardinfo[] 和 : static struct i2c_board_info am335x_i2c1_boardinfo[],為啥有分 __initdata 和 : 沒有 __initidata? 有啥差別嗎? 假設我device都不在 i2c0 上,我可以直接將 : static struct i2c_board_info __initdata am335x_i2c0_boardinfo[] 改成 : static struct i2c_board_info __initdata am335x_i2c1_boardinfo[] 嗎? : 加了__initdata 的初始化 i2c1 的函式執行過後,上面的devices就不能透過i2c1了嗎? : 謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.129.9.104 ※ 文章網址: http://www.ptt.cc/bbs/Linux/M.1405469869.A.B66.html
powertodream:不加__init, 在kernel init stage的時候會跑不到吧? 07/16 09:34
powertodream:一開始有一段時間會去init section 逐序跑過裡面 07/16 09:35
powertodream:像是一些driver的 __init 07/16 09:37
zzLin:樓上正解 07/16 17:17
yvb:非正解. 可能把 __initcall 相關系列和 __init 搞錯了? 07/16 19:15
gn00618777:謝謝各位,其實我想問為何i2c0要加init而i2c1卻不用 07/16 21:09
yvb:因為i2c0在init階段的註冊動作,會找塊記憶體複製過去, 07/17 13:57
yvb:所以init階段結束後,占用空間可釋放掉. 07/17 13:58
yvb:加了 __init 和 __initdata 就是 init階段結束時, 會被釋放掉. 07/17 14:00