Bootloader 에서, kernel image를 이름으로 검색할 수 있는지요.
안녕하십니까. 주말 잘 보내고 계신지요. 제목 그대로의 질문입니다.
아래는 스토리....
다른 사람이 [CF카드에 있는 Kernel image를 다운로드해서 업데이트할 수 있냐] 고 물어봐서,
[부트 로더가 복사를 시작하는 CF의 메모리 번지를 알려면, 부트로더를 뜯어봐야 하기 때문에, 단순히 커널 이미지만 다운로드해서는 알 수 없을 겁니다.]
라고 대답했습니다.
그런데.... 그 사람이, 될거라고 해서, 이런저런 실갱이를 하다가, 직접 해봤죠.
CF카드 데이터를 모두 지운 다음 재부팅 해서, 1M미안의 자잘한 파일들로 CF카드를 다 채우고, 그다음 Ramdisk랑 Kernel의 복사에 필요한 공간만 확보(기존 파일을 지워서) 했습니다.
다음....HDD에 복사해놨던 kernel이랑 Ramdisk 이미지를 CF에 복사하고
타겟 보드에 꼽았더니....
웬걸.
부팅 잘되네요.
이런 황당한.... -_-;
부트로더는, 저장장치에서 커널 이미지를 복사해 메모리로 올릴 때, 필요한 데이터가 저장되어 있는 주소를 알고 있는 것이 아닌가요?
그냥 파일 이름으로 복사하는 건가요?
Kernel이 실행되기 전에는 파일시스템도 없을 테니, 커널 이미지를 이름으로 찾는 것은 불가능하지 않습니까? 어떻게 되는 걸까요?
참고로, Bootloader는 busybox구요. 커널은 2.6 버전입니다.
이 우매한 자에게 깨달음을 주실 고수님들의 답변을 기달리겠습니다... -_-;
lilo의 경우에는 안되지만 grub의 경우에는 됩니다.부트로더에
lilo의 경우에는 안되지만 grub의 경우에는 됩니다.
부트로더에서 간단한 파일 읽기 기능을 지원할 경우에는 된다고 봐도 되겠죠..
타겟보드를 말씀하시는걸 보니 x86계열은 아닌듯 싶습니다. ARM이나 M
타겟보드를 말씀하시는걸 보니 x86계열은 아닌듯 싶습니다. ARM이나 MIPS 계열쪽으로 말씀드리자면(위에서 x86은 이미 말씀하셨으니까요)..
우선 Busybox는 부트로더가 아닙니다. busybox는 루트파일 시스템을 만들 경우 시스템에서 자주 사용되는 실행파일들(예를들면, ls insmod rmmod 등등등 설정하기 나름입니다)을 통합해서 사용되어지는 프로그램입니다.
http://www.busybox.net/about.html
부트로더가 파일시스템을 모른다는것도 아닙니다. FAT,ext, ISO9660 등의 파일시스템을 지원하는 부트로더들도 많이 있습니다. 간단히 uboot가 그렇습니다.
http://u-boot.sourceforge.net/
요즘엔 usb keyboard, mouse, usb host, UMS 등등을 지원하기도 하더군요.
결론은 파일이름으로 커널을 로드할 수 있다! 가 정답입니다.
----
훌륭한녀석!!
댓글 달기