Linux 核心啟動中的驅動初始化順序__Linux

來源:互聯網
上載者:User

Linux核心為不同驅動的載入順序定義不同的優先順序,見下面的宏:

include/linux/init.h

#define pure_initcall(fn)   __define_initcall("0",fn,1)
#define core_initcall(fn)   __define_initcall("1",fn,1)
#define core_initcall_sync(fn)   __define_initcall("1s",fn,1s)
#define postcore_initcall(fn)   __define_initcall("2",fn,2)
#define postcore_initcall_sync(fn) __define_initcall("2s",fn,2s)
#define arch_initcall(fn)   __define_initcall("3",fn,3)
#define arch_initcall_sync(fn)   __define_initcall("3s",fn,3s)
#define subsys_initcall(fn)   __define_initcall("4",fn,4)
#define subsys_initcall_sync(fn) __define_initcall("4s",fn,4s)
#define fs_initcall(fn)    __define_initcall("5",fn,5)
#define fs_initcall_sync(fn)   __define_initcall("5s",fn,5s)
#define rootfs_initcall(fn)   __define_initcall("rootfs",fn,rootfs)
#define device_initcall(fn)   __define_initcall("6",fn,6)
#define device_initcall_sync(fn) __define_initcall("6s",fn,6s)
#define late_initcall(fn)   __define_initcall("7",fn,7)
#define late_initcall_sync(fn)   __define_initcall("7s",fn,7s)
#define __initcall(fn) device_initcall(fn)

把自己的驅動的函數名用這些宏去定義之後,就會對應不同的載入時候的優先順序。其中,我們寫驅動中所用到的module_init對應的是 #define module_init(x) __initcall(x); 而 #define __initcall(fn) device_initcall(fn) 所以,驅動對應的載入的優先順序為6。

在上面的不同的優先順序中,數字越小,優先順序越高。同一等級的優先順序的驅動,載入順序是連結過程決定的,結果是不確定的,我們無法去手動設定誰先誰後。不同等級的驅動載入的順序是先優先順序高,後優先順序低,這是可以確定的。所以,像我們之前在驅動中用:
module_init(i2c_dev_init);
module_init(as352x_afe_init);
module_init(as352x_afe_i2c_init);

所以,大家都是同一個優先順序去初始化,最後這些驅動載入的順序,可以查看在根目錄下,產生的system.map:

。。。。。
c00197f4 t __initcall_default_rootfsrootfs
c00197f8 t __initcall_timer_init_sysfs6
c00197fc t __initcall_clock_dev_init6
。。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.