qemu中模擬裝置的註冊是在main函式之前

2021-08-08 22:08:54 字數 1281 閱讀 6479

qemu將要模擬的裝置分成了5類

typedef enum module_init_type;

#define block_init(function) module_init(function, module_init_block)

#define opts_init(function) module_init(function, module_init_opts)

#define qapi_init(function) module_init(function, module_init_qapi)

#define type_init(function) module_init(function, module_init_qom)

#define trace_init(function) module_init(function, module_init_trace)

這五類註冊的時候最後都是呼叫module_init

#define module_init(function, type) \

static void __attribute__((constructor)) do_qemu_init_ ## function(void) \

可以看到每個module註冊的時候後乙個__attribute__((constructor)) 引數。這是gcc的乙個引數,給函式加上__attribute__((constructor))。表示此函式會在main函式呼叫之前被呼叫。與之對應的是__attribute__((destructor))會在main函式執行完的時候呼叫.

__attribute__((constructor))-> main -> __attribute__((destructor)).

這裡也就是說通過module_init 註冊的函式都會在main函式前被呼叫。這裡也就說在main函式之前以及給你通過register_module_init註冊裝置了

然後在main函式中就可以直接呼叫註冊時候提供的init函式

}這裡以type_init(machvirt_machine_init);為例的話,就會呼叫machvirt_machine_init。

Linux 中字元裝置的註冊

linux中字元裝置的註冊過程是比較簡單的。我們通常可以呼叫misc register 函式來註冊乙個字元裝置。misc裝置是一種字元裝置,通過該裝置可以將fops請求 給註冊的misc裝置,從而實現字元裝置的功能。使用者呼叫該介面註冊misc字元裝置時,可以動態分配裝置minor號,當獲取mino...

ios 取裝置語言 在iOS中獲取當前的裝置語言?

所提供的解決方案實際上將返回裝置的當前區域,而不是當前選擇的語言。這些通常是一樣的。然而,如果我在北美,我把我的語言設定為日語,我的地區仍將是英語 美國 為了檢索當前選擇的語言,您可以 nsstring language nslocale preferredlanguages objectatind...

在mysql中模擬oracle的sequence

為了在mysql中實現類似於oracle的sequence的功能,要進行以下步驟 1 建立乙個只有乙個資料行的資料表 create table t sequence id int unsigned not null insert into t sequence values 0 2 用以下操作檢索出...