리눅스 & 안드로이드2011. 2. 11. 13:28
각각 Bootstrap loader와 Kernel vmlinux의 head.o(head.S) 두 개의 소스파일은 별개이며 혼돈해서는 안된다.

* Bootloader
  • 전원이 처음 인가되면 곧바로 실행되는 시스템의 비휘발성 메모리에 저장되어있는 로우레벨 코드
  • 저수준 초기화를 진행하기 위해 간단한 초기화 코드와 부트 이미지를 로드하기 위한 코드 및 시스템 자체 진단 루틴 등을 포함
  • 최종적으로 OS 이미지를 로드하고 알맞은 곳에 위치시키고나서 제어권을 해당 이미지로 넘긴다
* Bootstrap loader(kernel/arch/arm/boot/compressed/head.S)
  • 커널 이미지의 압축을 해제
  • 커널 이미지를 재배치 하기위한 알맞은 환경을 만든다
  • 커널로 제어권을 옮긴다
* Kernel vmlinux - kernel/arch/arm/kernel/head.S
  • 프로세서와 아키텍처가 올바른지 검사
  • 초기 페이지 테이블 생성
  • 프로세서의 메모리 관리 장치(MMU)를 활성화
    • 예전 기억을 떠올려보면, MMU 활성화 전/후에 TRACE32등의 debugger로 tracing을 하기 위해서는, MMU가 활성화 되기 전에 MMU 활성화 후에 jump될 주소를 미리 계산해서 breakpoint를 설정 해 주어야 함
  • 일부 에러감지 및 리포팅을 위한 설정
  • 커널 본체의 시작점 main.c로 점프
    • MMU의 유/무에 따라서 head-common.S 또는 head-nommu.S에서 start_kernel로 점프할 수도 있다
* Kernel main.o - kernel/init/main.c
  • Kernel command line 처리
  • Call initializing function directly. ex) init_timers() / console_init()
  • *_initcall 매크로를 이용해 초기화 함수들을 ELF 이미지의 특정 section에 등록(do_initcalls에서 호출)
  • do_initcalls()에서 *_initcall을 이용해 등록된 초기화 함수들을 호출한다
  • 초기화 함수와 데이터에 의해 사용된 메모리 영역을 해제 (init_post() in kernel/init/main.c)
    • free_initmem() in kernel/init/main.c
    • ex) .init.text / .init.data / .initcalln.init
  • 시스템 콘솔장치를 연다 (init_post() in kernel/init/main.c)
    • sys_open((const char __user *) "/dev/console", O_RDWR, 0)
  • 최초의 사용자 영역 프로세스를 시작 (init_post() in kernel/init/main.c)
    • run_init_process는 execve() system call을 이용
      • run_init_process(execute_command)
      • run_init_process("/sbin/init")
      • run_init_process("/etc/init")
      • run_init_process("/bin/init");
      • run_init_process("/bin/sh");
    • execve() system call을 이용하므로 실행에 성공하면 return되지 않는다
      • 그러므로 실행에 실패하게 되면, init_post()함수의 마지막에 있는 panic()을 만나 kernel panic이 발생

# cgroup - Control Groups provide a mechanism for aggregating/partitioning sets of tasks, and all their future children, into hierarchical groups with specialized behavior.

'리눅스 & 안드로이드' 카테고리의 다른 글

Kernel Command Line  (0) 2011.02.15
GNU Compiler __attribute__  (2) 2011.02.11
kernel 빌드에서 생성/링크되는 파일들  (0) 2011.02.10
vmlinux image 구성요소  (0) 2011.02.10
Tips for kernel build  (0) 2011.02.09
Posted by 세월의돌
잡담2011. 2. 10. 23:09
많은 사람들이 즐겨 마시는 흑맥주 기네스!
오늘은 늦으막이 느즈막이 아내와 마트에서 장을 보며 기네스를 업어왔다. 헤헤^^
아울러, 깡통 칼몬드만 있는줄 알았는데, 적은 양의 봉지 칼몬드를 발견! 완전 기분이 좋다~
마눌님이 항상 구박을 해서, 자주 마실수는 없는 맥주.
유럽에 가면 맛있는 하우스 맥주들을 물처럼 마실 수 있다던데...
유럽 배낭여행을 다녀온 친구들도 많이 있는데, 나는 언제쯤 유럽여행을 갈 수 있을까?-0-

이번에 장만한 NEX-5를 활용하려고 사진도 몇장 촬영했다.
처음으로 플래시를 장착하고 촬영했는데, 그냥 자동(?)모드+플래시로 촬영한 사진은 좀 어두웠는데,
손으로 야경촬영을 선택하니 플래시가 사용되지 않았는데도, 여러장을 촬영하여 합성(HDR?)하는 방식으로 촬영이 되면서 나름 깔끔하게 촬영이 된 것 같다.
이래저래 기분좋은 밤이다~ 그나저나 우리 요놈이는 언제나 나오려나...흐흐
어찌 되었던 다음주 이시간 즈음에는 세 가족이 함께 하겠구나~lol

Posted by 세월의돌