Linux
Linux Booting Procedure
반응형
Linux Booting Procedure
Boot-loader --> Kernel --> FileSystem
starrt.s
|
v
BeforeMain() : SDRAM <-> JUMP
|
v
CMain() : Serial, Timer, Ethernet init.
|
+-+-----------+
| |
v v
Reload() GetCommand()
| |
v v
DoBootKernel() CMD_TBL ---+---> DoTftp()
...
kernel의 압축 해제 (decoding code는 assembly code)
그리고 kernel start
$KERNEL_SRC/arch/arm/boot/compressed/
head.S
|
v
Head-armv.S b SYMBOL_NAME(start_kernel)
|
$KERNEL_SRC/init/main.c |
start_kernel() <-----+
|
v
lock_kernel()
|
v
setup_arch() +- setup_processor
+- setup_architecture()
|
v
paging_init() page table configuration, memory map init.
trap_init()
init_irq()
time_init timer interrupt init.
console_init() console init.
sched_init()
init_modules() CONFIG_MODULES가 설정되어 있을때 호출되어 kernel module 관련 부분 init.
kmem_cache_init(() kernel object 처리용 cache를 위한 linked list (=cache chain)
mem_init() memory system init.
proc_root_init() /proc 이하의 memory 내에 존재하는 file system creation
....
proc_sys_root = proc_mkdir("sys", 0); 마지막에 proc라는 virtual file system을 생성함
memory에 있는 것을 file처럼 access하기에 entry라고 부름(proc 내에 있는 것을)
rest_init()
kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
do_basic_setup() ...
kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
...
cpu_idle() waiting for the system event infinitely
File System..
$KERNEL_SRC/init/main.c
init()
|
v
lock_kernel()
do_basic_setup() start_kernel에서 모두 처리하지 못한 system의 나머지 부분을 초기화
(PCI, IrDA, PCMCIA, 등 (H/W 관련 초기화는 여기서까지)
...
free_initmem
unlock_kernel
init_post
run_init_process("/sbin/init");
run_init_process("/etc/init");
run_init_process("/bin/init");
run_init_process("/bin/sh");
// EARLY INIT CALL //
sock_init Initrd가 설정되어 있다면 Initial RAM disk 설정
filesystem_setup()
반응형
'Linux' 카테고리의 다른 글
Linux ko extension (0) | 2015.03.10 |
---|---|
Linux module example (skeleton code) (0) | 2015.03.10 |
checking symbols/modules/devices @ Linux (0) | 2015.03.10 |
making makefile for device driver (0) | 2015.03.10 |
Kernel Trap (트랩) (0) | 2015.03.10 |
댓글