※ 引述《askacis (ASKA)》之銘言:
: ※ 引述《lomoway10 (lomoway)》之銘言:
: : 我有幾個driver,彼此有個啟動順序問題.
: : 我要怎麼讓kernel知道要先啟動哪個driver.再去執行哪個driver呢?
: : (這裡都是把driver合在kernel裡面,不是build module)
: : 另一個問題.假設.順序已經對了.
: : 但是第一個driver還沒有initial完.第二個driver已經開始啟動.
: : 可是他卻因為第一個還沒完成.而出現probe失敗的訊息.導致initial失敗.
: : 這種問題又該怎麼處理?
: : 有沒有人有相關的經驗呢??
: 如果都是build-in在kernel裡頭的話,那麼kernel啟動的時候有
: 分先後等級的函式可以讓你呼叫,請看
: kernel_source/include/linux/init.h
: 在你的driver加上相對應的函式就可以控制不同driver起來的順序了
: EX. 如果想要讓你的B driver啟動順序在A之前的話,可以這樣寫
: In A driver:
: static int __init init_A (void)
: {
: ....
: }
: late_initcall(init_A);
: In B driver:
: static int __init init_B (void)
: {
: ....
: }
: arch_initcall(init_B);
: 有錯的話還請大大指正囉~~^^
如果屬於於同一類的話這招或許就不行了?
有__init會link該function在一個init table裡
init時會走過一次這table
如果在同一級中似乎是按照實作(or宣告)的先後順序link?
(以上皆是遙遠的記憶,我遇過一次這需求)
所以你要B先跑就先實作B~再實作A
目的就是安排init table的先後罷了
手邊沒機器可以TRACE和實驗,有錯請告訴我XD
--
最大的夢想
是有一台時光機
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.43.209.95