linux 3.6ソース分析(六)do_を開始basic_setup

1690 ワード

カーネルinitスレッドでdo_が呼び出されましたbasic_setup、この関数も多くのカーネルと駆動の初期化をしました
/*  ,            。               ,
    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の作成に関連します.