Linux

Linux Booting Procedure

Roien 2015. 3. 10.
반응형
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

댓글