linux 3.6ソース分析(六)do_を開始basic_setup
1690 ワード
カーネルinitスレッドでdo_が呼び出されましたbasic_setup、この関数も多くのカーネルと駆動の初期化をしました
上の関数はdriverを呼び出しました.Init関数は、モデルサブシステムの初期化を駆動する役割を果たし、カーネル駆動エンジニアにとって重要であり、詳細は以下の通りである.
もう一つの主要な関数do_initcalls()は、すべてのコンパイルカーネルの駆動モジュールの初期化関数を呼び出します.ここで、各カーネルモジュール初期化関数によってカスタマイズされた起動レベル(1〜7)に従って、順次呼び出し器によって関数を初期化する.同じレベルの初期化関数の場合、インストールコンパイルはリンクの順序呼び出し、すなわちカーネルMakefileの作成に関連します.
/* , 。 ,
CPU ,
。
..
*/
static void __init do_basic_setup(void)
{
cpuset_init_smp();// SMP , control group cpuset 。 SMP, 。
/* khelper。 , , user space , , */
usermodehelper_init();
shmem_init();
driver_init();// , /sys
init_irq_proc();// proc irq , 。
do_ctors();// , .ctors 。
usermodehelper_enable();
do_initcalls();// 。
}
上の関数はdriverを呼び出しました.Init関数は、モデルサブシステムの初期化を駆動する役割を果たし、カーネル駆動エンジニアにとって重要であり、詳細は以下の通りである.
void __init driver_init(void)
{
/* These are the core pieces */
devtmpfs_init();// devtmpfs , 。
/* kobject:
devices
dev
dev/block
dev/char
*/
devices_init();
buses_init();// bus
classes_init();//1. class
firmware_init();//1. firmware
hypervisor_init();//1. hypervisor
/* These are also core pieces, but must come after the
* core core pieces.
, 。
*/
platform_bus_init();//1. bus/platform
cpu_dev_init();//1. devices/system/cpu
memory_dev_init();// devices/system/memory
}
もう一つの主要な関数do_initcalls()は、すべてのコンパイルカーネルの駆動モジュールの初期化関数を呼び出します.ここで、各カーネルモジュール初期化関数によってカスタマイズされた起動レベル(1〜7)に従って、順次呼び出し器によって関数を初期化する.同じレベルの初期化関数の場合、インストールコンパイルはリンクの順序呼び出し、すなわちカーネルMakefileの作成に関連します.