다음 이전 차례

2. Overview of Boot Prompt Arguments

이 장은 커널 그 자체에게 부트 인자들을 전달해 주는 소프트웨어의 여러 예들을 보여줄 것이다. 어떻게 인자들이 처리되는가 또한 부트 인자들의 한계는 무엇인가 그리고 어떻게 각각의 원했던 장치로의 접근이 가능한지를 알 수 있다. 부트인자에 스페이스가 사용 안되도록 아주 주의하여야 한다. 단일 인자들 은 그 값들을 나열하며 여러 인자들은 스페이스 없이 콤마로 분리된다. 아래 이어지는 예들을 보라


 ether = 9,0x300,0xd0000,0xd4000,eth0  root=/dev/hda1          *RIGHT*
 ether = 9, 0x300, 0xd0000, 0xd4000, eth0  root = /dev/hda1    *WRONG*

2.1 LILO (LInux LOader)

Werner Almesberger가 만든 LILO(LInux LOader)는 매우 일반적으로 사용된 다. 이것은 여러 커널들중에 하나로 부팅할 수 있으며 이런 정보를 보통 텍스트로 저장한다. 대부분의 배포판에서는 기본적인 부트로더로서 LILO가 사용된다. LILO는 DOS, OS/2, Linux, FreeBSD 등을 별 어려움 없이 부팅할 수 있으며 매우 융통성이 있다.

전형적인 환경설정이라면 LILO는 멈추어서 "LILO" 를 출력할 것이다. 간단 히 말하면 당신이 컴퓨터를 켠후에 컴퓨터는 사용자로부터 옵션을 입력 받 기 위하여 몇초 동안 기다린다. 일반적인 시스템은 LILO configuration파일 을 이용하여 "linux", "backup", "msdos"라는 라벨들을 사용한다. 부트 인자 들을 넣으려 한다면 당신이 부트하기 원하는 시스템 라벨을 입력한 후에 아 래의 예처럼 입력하라.


        LILO: linux root=/dev/hda1

여기서 논의된 부트 인자들에 관해서는 LILO와 함께 오는 문서가 아주 훌룡 하다. LILO 에서의 append= 의 명령은 부트시에 인자들을 LILO 설정 파일에 영구적으로 추가하는데 아주 중요하다. 당신은 간단하게 append= "foo_bar" 와 같은 형식으로 /etc/lilo.conf 파일에 추가할 수 있다. 이것은 설정 파 일 처음에 추가되어 모든 섹션에 영향을 주게 할 수도 있고 "image=" 섹션 안에 추가되어 단일 섹션에 영향을 줄 수도 있다. 더 자세한 내용은 LILO문 서를 보라.

2.2 LoadLin

다른 부트 로더로는 자원들이 확실하다는 가정을 하고 도스 프롬프트로부터 리눅스 커널을 작동시키는(부트 인자들 포함) 능력을 가진 LoadLin 이라는 도스 프로그램이 있다. 도스를 사용하며 도스로부터 리눅스를 시작하기를 원하는 사람에게는 좋은 프로그램이다.

만약에 당신이 하드웨어를 알려진 상태로 두는 것을 지원하는 도스 드라이 버에 기반한 하드웨어를 가지고 있다면 이 프로그램은 매우 유용하다. 예를 들면 사블 호환모드로 두기 위해 약간의 레지스터들을 조작하는 도스 드라 이버를 요구하는 `SoundBlaster Compatible' 사운드카드를 가지고 있다면 이 경우에 해당한다. 주어진 드라이버와 함께 도스로 부팅한후에 시스템을 reboot함으로써 카드에 설정된 상황을 읽어버리는 경우 없이 도스 프롬프트 에서 리눅스를 바로 올릴 수 있다. 이렇게 하여 사블 호환 카드는 리눅스 하에서도 그 모드를 유지한다.

리눅스를 부트하는데 사용하는 다른 프로그램도 있지만 완벽한 리스트는 당 신의 지역 Linux ftp 미러의 system/Linux-boot/. 밑을 보라.

2.3 The ``rdev'' utility

커널 이미지 안에 여러 바이트로서 저장되어 디폴트 값들을 가지고 있는 부 트 인자들은 그리 많지 않다. 이러한 값들이 어디에 있는지 또 이들 값들을 어떻게 바꾸는지 알고 있는 대부분의 시스템에는 rdev 라는 유틸리티가 인스톨 되어 있다. 이는 기본적인 비디오 모드와 같이 커널 부트 인자로는 적합하지 않은 것들을 바꿀 수 있다.

rdev 유틸리티는 대게 swapdev, ramsize, vidmode 그리고 rootflags들로 다 르게 불리기도 한다. 거기엔 rdev가 변경할 수 있는 root device, swap device, RAM 디스크 parameter 디폴트 비디오 모드 그리고 root device의 읽기전용 아니면 읽고/쓰기모드의 5가지가 있다. rdev에 관한 좀더 많은 자료는 rdev -h 을 사용하거나 관련된 맨 페이지 를 보라(man rdev를 사용)

2.4 How the Kernel Sorts the Arguments

대부분의 부트 인자들이 가지는 형태:


        name[=value_1][,value_2]...[,value_11]

name 부분은 커널에 관련되어 사용되는 유일한 키워드이다. 멀티 부트 인자 들은 위의 형태를 가지며 스페이스로 구분된다. 이들이 11개로 제한되어 있 다는 것을 주의 하라. 이들은 키워드당 콤마로 분리된 11개의 parameter들 만을 허용한다. (어떻든 당신은 setup 함수가 그것을 지원한다는 가정하에 매우 복잡한 상황에서 같은 키워드를 가지고 11개의 parameter들을 재 사용 할 수 있다.) 또한 커널은 리스트를 최대 열개의 정수 인자와 이어지는 스트링 으로 나눈다. 그래서 당신은 실제로 드라이버 그 자체에서 11개의 인자들을 문자열에서 정수로 변환시키지 않고는 공급할 수 없다.

대부분 인자들은 linux/init/main.c에 있다. 첫째로, 커널은 인자가 `root=', `ro', `rw', or `debug'와 같은 특별한 인자인가를 검사한다. 이런 특별한 인자들은 이 문서 저 뒤에서 서술한다.

특별한 인자 문자열(`foo' 같이)이 setup function(foo_setup())에 연결되 어 있는지를 보기 위하여 이후 장치나 커널의 일부분으로 구분된 setup finctions (bootsetups 배열을 포함하는)들의 목록들로 제어를 옮긴다. 커널에게 foo=3,4,5,6,bar 이라는 라인을 전송했다면 커널은 `foo' 가 등록되 어 있는지를 보기 위하여 bootsetups 배열을 검색한다. 있다면 `foo'(foo_setup())에 연결되어 있는 setup function을 실행 시키고 여기에 커널 명령행에 주어진 것처럼 정수인자 3, 4, 5그리고 6 을 전달하고 또한 문자열 인자인 bar도 건네 줄 것이다.

2.5 Setting Environment Variables.

위에서 말한 setup function으로 하여금 허용되지 않는 `foo=bar'과 같은 형태는 어느 것이든 값을 가진 환경변수로 변환된다. `TERM=vt100'와 같은 부트 인자가 그 한 예이다.

2.6 Passing Arguments to the `init' program

커널에서도 설정되지 않고 환경변수로도 인터프리터 되지 않은 남은 인자들 은 일반적으로 init라고 부르는 process에 전달된다. 대부분의 일반적인 인자들 즉, init process에 전달된 대부분의 일반적인 인자는 단일 사용자 모드로 컴퓨터를 부팅하는 것을 가리키는 하나의 단어이며 이것은 평상시의 모든 데몬을 작동시키지는 않는다. 어떤 인자들이 허용되는 가를 보기 위해서 시스템에 설치된 init버젼의 메뉴얼 페이지를 점검하라.


다음 이전 차례