__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")))
舉例:
staticint __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;
}
staticint __init init_setup(char *str)
//作用就是把「=」後邊的傳給execute_command。
//比如設定了init=/linuxrc 則execute_command=&「/linuxrc」 表示不正確 就是那個結構體的str引數偏移n個的位址
staticint 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可以開...