linux核心啟動過程中 set

2022-05-04 15:45:10 字數 2314 閱讀 7080

__set_up是乙個巨集

#define __setup(str, fn)                    \__setup_param(str, fn, fn, 0)

#define __setup_param(str, unique_id, fn, early) \

static

char __setup_str_##unique_id __initdata =str; \

static

struct

obs_kernel_param __setup_##unique_id \

__attribute_used__ \

__attribute__((__section__(

".init.setup

"))) \

__attribute__((aligned((

sizeof(long

))))) \

=struct

obs_kernel_param ;

#define __init __attribute__ ((__section__ (".init.text")))

#define __initdata __attribute__ ((__section__ (".init.data")))

#define __exitdata __attribute__ ((__section__(".exit.data")))

舉例:

static

int __init init_setup(char *str)

__setup(

"init=

", init_setup);

//轉換為

static

char __setup_str_init_setup __attribute__ ((__section__ ("

.init.data

"))) ="

init=

";

static

struct

obs_kernel_param __setup_init_setup

__attribute_used__

__attribute__((__section__(

".init.setup

")))

__attribute__((aligned((

sizeof(long

)))))

=

/*vmlinux.lds的.init段中

*/static

int __init obsolete_checksetup(char *line)/*

handle obsolete-style parameters */

else

if (!p->setup_func)

else

if (p->setup_func(line +n))/*呼叫引數中對應函式,引數為偏移n個(初始化是引數長度)後的字串*/

return1;

}p++; /*繼續處理,直到結束*/

} while (p <__setup_end);

return

had_early_param;

}

static

int __init init_setup(char *str)

//作用就是把「=」後邊的傳給execute_command。

//比如設定了init=/linuxrc 則execute_command=&「/linuxrc」 表示不正確 就是那個結構體的str引數偏移n個的位址

static

int noinline init_post(void

) ...

if(execute_command)

run_init_process(

"/sbin/init");

run_init_process(

"/etc/init");

run_init_process(

"/bin/init");

run_init_process(

"/bin/sh");

panic(

"no init found. try passing init= option to kernel.");

}

linux核心啟動過程

第一步 電腦加電後cpu開始自身初始化,然後從某個固定位置 一般為0xfffffff0 取指令開始執行,此指令為跳轉指令,跳轉到bios 首部。第二步 bios開始加電自檢進行post power on self test 此階段完成系統硬體檢測,包括記憶體 系統匯流排檢測等,然後bios讀取啟動裝...

Linux核心啟動過程

linux核心啟動過程 第一篇日誌就摘錄一下linux核心的啟動過程,參考了 linux核心移植和yaffs2根檔案系統製作 嵌入式linux系統從軟體角度看可以分為四部分 引導引導程式 bootloader linux核心,檔案系統,應用程式。bootloader是系統啟動時執行的第一段 它主要用...

Linux 核心啟動過程

核心啟動前需要滿足的條件 暫存器,cpu,cache mmu 1.cpu暫存器的設定 r0 0 r1為機器碼 r2為啟動引數,標記列表在ram中的起始位址 2.cpu工作模式 必須禁止中斷 irq和fiq cpu必須設定為svc模式 3.cache和mmu的設定 mmu必須關閉 指令cache可以開...