버추얼박스에서 리눅스 커널 컴파일하고 돌리려고 하는데....
우선 실험중인 환경을 쓰자면 아래와 같습니다. 또, 제가 리눅스에 관해선 완벽한 뉴비라는 점도 밝힙니다 ㅠ.ㅠ
-------------------------------------------
가상머신: VirtualBox 3.2.8 r64453
플랫폼: Ubuntu 8.04 Hardy Heron
컴파일하는 커널 버전: Vanilla Kernel 2.6.26
-------------------------------------------
실험의 목적은 간단한 옵션을 변경해서 컴파일 해 본 후 변화점을 찾는 것입니다. (사실 학교 과제입니다)
그리고 제가 변경한 옵션들은 CONFIG_LOCALVERSION, CONFIG_USB 등 지금 제가 겪는 오류와는 별로 상관이 없는것 같습니다. (제 생각에는요 -_-;)
제가 밟았던 컴파일 단계는 다음과 같습니다.
1. kernel 2.6.26을 www.kernel.org에서 다운받는다.
2. /downloads/kernel에 압축을 푼 후, make defconfig
로 디폴트 설정을 로드한 후, vi .config
명령어로 원하는 옵션을 변경한다.
3. make로 커널 컴파일
4. make modules로 모듈 컴파일
5. sudo make modules_install로 모듈 설치
6. sudo make install로 커널 설치
이렇게 하니 다음과 같은 에러가 발생하면서 해당 커널로는 부팅이 되지 않더군요.
Decompressing Linux... Parsing ELF... done. Booting theh kernel. ide_generic: I/O resource 0x1F0-0x1F7 not free. ide_generic: I/O resource 0x170-0x177 not free. Root-NFS: No NFS server available, giving up. VFS: Unable to mount root fs via NFS, trying floppy. ^[Kernel panic - not syncing: VFS: Unable to mount root fs on unkown-block(2,0)]
이 설정으로 몇번이고 재컴파일 해보다가 결국 실패, 원인을 찾다 보니 알게된 것이 적절한 부트 디바이스 드라이버를 찾지 못할 경우 해당 오류가 발생할 수 있다는 것이었습니다.
더 검색한 결과 버추얼박스에선 SATA인터페이스를 사용하며, 리눅스 기본 설정에서는 Off 되어 있다는 것 역시 알게 되었습니다.
따라서 이번에는 기존의 컴파일 단계에서 make defconfig
하던 부분을 cp /boot/config-`uname -r` .config
로 변경했습니다. 우분투와 함께 설치한 커널은 잘 돌아가고 있기 때문에 그 설정을 베이스로 사용해 볼 생각이었습니다. 그리고 CONFIG_ATA_PIIX (인텔의 SATA 인터페이스, 버추얼박스에서 사용되는듯 하더군요), 및 각종 SATA 설정 및 SCSI 설정을 활성화 시킨 후, 다시 컴파일을 하였습니다.
이번 경우엔 조금 다른 오류가 나오더군요.
Decompressing Linux.. Parsing ELF... done. Booting the kernel. [1.016534] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
Kernel panic 문장에서 unknown-block(2,0)이 (0,0)으로 바뀌었습니다 -_-;
그래서 더 찾아본 결과, SATA 모듈 등 부트 디바이스를 로드하는데 필요한 모듈이 있을 경우, initrd 이미지가 필수라는 사실을 알게 되었습니다. 그리고 사실은 initrd 이미지는 make install 단계에서 자동 생성된다는 것도 말이죠.
그런데 문제는, 저의 경우는 단 한번도 initrd 이미지가 자동 생성된 적이 없다는 것입니다.
mkinitrd를 사용하려고 하니 아무래도 찾기가 힘들고 대신 yaird를 사용하기 위해 공부중입니다.
우선 드리고 싶은 질문들은 다음과 같습니다.
1. 해당 오류의 원인이 제가 생각하고 있는 것이 맞는지 궁금합니다.
즉, 에러의 원인이 SATA 모듈을 부팅 단계에서 사용하기 위한 initrd 이미지가 없어서인지, 혹은 애초에 SATA 드라이버가 필요한 것이 맞는지 알고자 합니다.
2. initrd 이미지가 자동 생성되지 않은 이유는 무엇인지?
3. 위에서 언급한대로 커널 컴파일 과정을 밟을 경우 sudo grub-update
를 사용하면 부팅 시 커널 리스트에는 제가 컴파일한 커널이 표시됩니다. 하지만 시냅틱 관리자 등에서는 확인할 수 없었는데요, 그 이유는 무엇인지 궁금합니다. 혹은 제 커널 설치 방법이 아예 틀렸는지도 궁금합니다 ㅠ.ㅠ
질문이 상당히 길었네요..... 하지만 부디 답변 부탁드립니다. 추석 전까진 끝내야 하는 과제라서요 ㅠ.ㅠ 부탁드립니다!!!
p.s. 첨부한 첫번째 이미지는 SATA드라이버를 포함 안하고 컴파일 했을때의 오류 메세지, 두번째는 SATA를 첨부한 상태에서 나온 메세지입니다.
p.s2 yaird 사용법이 생각보다는 어렵네요..... 혹시 이것 역시 가르쳐주실분 안계신가요 ㅠ.ㅠ
첨부 | 파일 크기 |
---|---|
![]() | 12.87 KB |
![]() | 26.86 KB |
1. initrd를 만들고
1. initrd를 만들고 싶지 않으시면 커널에 포함시키는(옵션에서 y 선택) 방법도 있습니다.
3. 커널을 패키지로 설치하지 않았기 때문입니다. 따라서 지우려면 패키지 관리자에서가 아닌 수동으로 지워야 합니다. https://help.ubuntu.com/community/Kernel/Compile 여기를 참고하세요.
---- 절취선 ----
http://blog.peremen.name
@peremen
1. 예.. 그런데 SATA PIIX 드라이버는 커널에 포함을 시킬 수 없다는 메세지가 뜨면서 모듈로 선택이 되더군요.. 제가 잘못 알고있는건지도 모르겠습니다만...
2. 음... 패키지로 설치하지 않으면 목록에 뜨지 않는 거였군요. 설명 감사드립니다 ㅎ
댓글 달기