看板 LinuxDev 關於我們 聯絡資訊
※ 引述《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