kernel中各種initcall的優先順序

2021-07-23 21:48:07 字數 2041 閱讀 2024

首先看下核心中的定義:

#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

module_init(x) __initcall(x);

#define __initcall(fn) device_initcall(

fn)

下面再介紹個特殊的:

module_i2c_driver(),其實它是module_init的一種封裝形式,和module_init具有一樣的註冊優先順序,同為device_initcall,也就是 __define_initcall(「6」,fn,6)。它在late_initcall之前執行,另乙個需要注意的是late_initcall是最低優先順序的型別。

示例:

module_i2c_driver(adxl34x_driver);

#define module_i2c_driver(__i2c_driver) \

module_driver(__i2c_driver, i2c_add_driver, \

i2c_del_driver)

#define module_driver(__driver, __register, __unregister, ...) \

static

int __init __driver##_init(void) \

\module_init(__driver##_init); \

static

void __exit __driver##_exit(void) \

\module_exit(__driver##_exit);

kernel中的per cpu變數

per cpu 變數的引入有效的解決了smp系統中處理器對鎖得競爭,每個cpu只需訪問自己的本地變數。本文闡述了per cpu變數在2.6核心上的實現和相關操作。在系統編譯階段我們就手工的定義了乙份所有的per cpu變數,這些變數的定義是通過巨集define per cpu實現的 11 defin...

kernel中的函式 request

下圖為示意圖,讀者可以參考該圖來閱讀 個人認為對linux下i o資源的管理如掌握 request region函式就能掌握其精髓。linux下對i o資源主要用結構體resource來管理,管理的方法就是用resource來描述使用的i o資源的狀態,並將這些resource用如下兩個resour...

OpenCL中kernel的迴圈呼叫

kernel的迴圈呼叫主要是涉及緩衝區的建立和主機端命令同步 很多例子中會在建立快取物件時對快取物件做初始化,例如 cl mem memobject1 clcreatebuffer context,cl mem read only cl mem copy host ptr sizeof float ...