성공했다~ T-T
어젠 마저 안 썼지만…
2.6.9 는 디버깅 모드에서도 암것도 안 찍어 줬지만…
우리의 2.6.8-rc3는~~~
Error: a
를 찍어 주었더랬다!!!
빠밤…. 그럼 도대체.. Error: a는 무엇이냐
커널에 디버깅 옵션이 켜져 있을 때만 찍어주는 메시지 인데…
부트로더(이 경우에는 u-boo)는 커널(이 경우에는 linux)을 시작 시킬 때, 정보를 넘겨 주게 되어 있다.
이게 arm 계열의 경우가 스트럭쳐 였던가… ppc 가 그랬던가는 기억이 잘 안나지만…
암튼 그래서…
그 정보중에는 아키텍쳐 번호(architecture number)라는 것이 있어서…
이 넘이 커널이 알고 있는 것과 맞아야만 부팅이 진행되는 것이다.(아마 보드 종류인거 같다)
Error: a 라는 것은 바로 이 아키텍쳐 번호가 커널이 알고 있는 거 중에 없다는것.
그럼 봐야 할 곳은 u-boot에 설정된 아키텍처 번호와 리눅스 커널에 설정된 아키텍처 번호이다.
(당근 omap5912osk의 아키텍처 번호)
일단 u-boot에서 아키텍처 번호를 알수 있는 메뉴를 찾아보았다.
그때 눈에 띈 것이 bdinfo! 역시나 이 명령은 보드의 정보를 보여주는 것으로
제일 첫 줄에 아키텍처 번호가 나왔다.
?OMAP5912 OSK # bdinfo
arch_number = 0x000000EA
env_t = 0x00000000
boot_params = 0x10000100
DRAM bank = 0x00000000
-> start = 0x10000000
-> size = 0x02000000
ethaddr = 00:00:00:00:00:00
ip_addr = 100.101.1.2
baudrate = 115200 bps
0x000000EA 라… 십진수로 바꿔보면 234. u-boot 소스 중에 board/omap5912/omap5912osk.c의
65 번째 줄에서 arch_number라는 것을 설정하는 것을 찾을 수 있었다.
/* arch number of OMAP 1510-Board */
/* to be changed for OMAP 1610 Board */
gd->bd->bi_arch_number = 234
흠.. 주석에 OMAP 1510-Board 라고 되어 있는 것이 수상쩍다.
이번에서 리눅스 커널 소스에서 아키텍처 번호를 찾아 보자…
여기 저기 뒤적이다가 발견한 것이 arch/arm/tools/march-types.
파일을 열어 보니.. 오오~ 아키텍처 번호로 보이는 것들이 주욱 쓰여져 있다.
omap_innovator MACH_OMAP_INNOVATOR OMAP_INNOVATOR 234
예상대로… 234는 ?OMAP1510 을 쓰는 omap innovator의 것이었다.
그럼 ?OMAP5912 OSK는?
omap_osk MACH_OMAP_OSK OMAP_OSK 515
원래는 515였군… 으.. 썩을 u-boot 같으니… 어쩌면 2.4에는 osk가 따로 없었는지도 모르니
일단은 참기로 하고…
u-boot 쪽과 리눅스 커널 쪽의 아키텍처 번호가 다르니 한쪽을 고쳐 줘야 되는데…
u-boot를 고치는게 맞겠지만.. 그렇게 할려면 u-boot를 새로 올려야 되니…
일단 리눅스 커널쪽을 고쳐서 재컴파일….
커널을 올리고… 두근 거리는 맘으로 bootm.
Starting kernel …
Uncompressing Linux………………………………………………………
이까지 나왔을 때 얼마나 조마조마 하던지……
다음 순간…
주루륵 올라가는 글자들!
순간 만세를 부르면 뛰쳐… 나가지는 않고 뒤로 발라당 넘어져 버렸다~
(집에서 컴퓨터를 쓸때는 침대에 걸터 앉아있음)
아… 이렇게 기쁠 수가.. 장장 2~3주간 끌어오던 문제가 해결되는 순간 이었다.
이 기쁜 소식을 빨리 누군가에게 전하고 싶어 당장 msn을 켜고 한승훈에게 말해줬지.
음하하~
아… 물론 부팅에 완전히 성공한 것은 아니다. 부트 파라메터를 잘못줘서 rootfs를 마운트 하지 못했다.
흐.. 하지만 이런건 좀 손보면 되는 문제니까
오늘은 발뻗고 잘 수 있겠다.
아…
한가지 더 덧붙이자면…
리눅스 커널이 처음 부팅될때, 아키텍처 번호를 검사하기에 앞서 프로세서 타입(Processor Type)을 검사한다.
이 때도 역시 맞지 않으면, p 라는 에러 메시지를 출력한다.(물론 디버깅 옵션이 켜져있으면)
이 정보는 리눅스에서는 arch/arm/mm/proc-arm926.S에 __arm926_proc_info에 나오는 듯 하고,
u-boot에서는 잘 모르겠다-_-;
암튼… 오늘은 요까이~