[t:/]$ 지식_

리눅스 커널 기동 후 부팅 초기 단계

2009/02/06

일반적으로 어플라이언스 장비들은.

  1. 공급자가 포팅해 놓은 그대로 사용하여 일반 리눅스처럼 운영하거나.
  2. 커스터마이징 부팅을 하여 깔쌈하고 폐쇄적으로 부팅한다.

fast boot가 필요하다면 0.1초라도 단축하기 위해서 다방면으로 수정하게 된다.

. . .

아직도 GPL을 제대로 이해 못하는 곳이 많지만 요즘에는 어느정도 가이드라인이 많이 알려졌기에 커널 들어내서 다시 비비는 전통적인 작업은 이제 하지 않는 듯 하다.

소스를 공개하기 싫은 것이라 아니라 그 절차 자체를 잘 모르고 학습할 의지도 별로 없기 때문. 이런건 회사차원에서 전폭적으로 밀어주면 잘 정리할테인데 "가욋일" 취급을 받으므로 귀찮은 영역에 속한다 -_-; S/E 조직에서 알아서 착착착 나가면 좋을텐데..

. . .

커널 부팅이 마무리에 이르면 /init/main.c 쪽으로 진입한다. 예전 내용은 기억 안 나고 커널 2.6.21을 보니 다음과 같이 되어 있다.

    run_init_process("/sbin/init");
    run_init_process("/etc/init");
    run_init_process("/bin/init");
    run_init_process("/bin/sh");

쉘을 전용 보안 쉘로 바꾸어 띄우기 위해 여기서부터 조작한 적도 있긴 있지만 이제 허접했던 과거는 청산하기로 하자.

4줄이나 있는 것은 배포본마다 위치가 사맛디 아니하기 때문에 그렇다. 다 실행하는 건 아니다.

이제 커널은 /sbin/init 를 실행하였다. /sbin/init 는 커널 로딩 후의 초기화 과정을 실행한다. init 프로그램은 기존 것을 가져다 쓰기도 하지만 임베디드 리눅스에서는 busybox에 심볼릭 링크를 걸어서 쓰게 된다.

PC쪽이라면 mingetty와 같은 콘솔을 실행하려 할 것이다.

이 글을 참고하자. inittab 에 관한 내용이다.

http://blog.naver.com/khsrdc?Redirect=Log&logNo=110006244927

inittab의 내용은 임베디드 환경에서 다음 정도로만 쓰면 된다.

::sysinit:/etc/init.d/rcS
ttyS0::respawn:-/bin/sh
tty1::respawn:-/bin/sh
#tty2::respawn:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

여기서 sysinit 항목에 의해서 /etc/init.d/rcS 를 제일 처음 실행한다. 데비안 / 레드햇의 구조와 관계없이 뜯어내도 상관없지만.. 이제 우리는 정도만을 걷기로 하자.

우분투를 보니 최근 데비안이 다 그런것인지 inittab이 없어졌다. 당황하지 말고 다음 글을 참조한다.

http://blog.naver.com/ikariksj?Redirect=Log&logNo=140037078872

어쨌거나 이제 /etc/init.d/rcS 로 진입하였다. 여기서는 부팅 과정에 필요한 일들을 한다.

네트웍을 올리는 스크립트를 실행하기도 하고 rc.local을 실행하기도 한다. alias나 PATH도 잡는다. 각종 lock 파일 같은 것을 정리한다.

커널 모듈도 올리고, 어플라이언스 장비라면 주 프로그램을 실행하는 스크립트를 호출하기도 한다.

쉘이 뜨기 전에 /etc/issue를 보여준다. 수정해도 된다. uname을 이용해서 CPU, 커널 버전등으로 갈리기도 하는데.. 알아서 잘 수정하면 된다.

/proc/cpuinfo, /proc/cmdline /proc/version 등의 정보를 바로 이용해도 된다.

참 별 거 없는 부분이긴 하지만 어플라이언스 장비의 경우 초기 부팅 과정을 살펴보면 제품의 완성도를 대충 가늠해 볼 수 있다.

제품의 메인이 되는 프로그램을 일단 논외로 할때 제품의 신뢰성이 허접할수록 부팅이 엉망이다. 신경을 많이 쓴 리눅스 박스들은 /etc/ 내부가 깔끔하다.

또한 /etc 가 붙은 파티션은 항상 read only 로 잡는다. cramfs 등을 쓰고 mtd 에서 readonly 플래그를 활성화 시킨다. 그렇다면 /etc에서 쓰기 작업이 필요한 파일들은 /tmp에 심볼릭링크 시키거나 다른 nand 디바이스등에 붙여야 한다.

최초 부팅 시에는 이런 파일이 없을 가능성이 있으므로 이에 대한 상황도 대비해야 한다.









[t:/] is not "technology - root". dawnsea, rss