도와주세요!!
안녕하세요. 포럼에서 늘 도움 받는 사람중에 한명입니다.
포팅 작업을 진행하다 막히는 부분이 있어서 이렇게 질문 드립니다.
지금 하고 있는게 BCM5358(브로드컴, MIPS계열) 칩에 리눅스 커널 3.5.7.16 을 포팅하는 작업을 진행중인데요.
부팅이 정상적으로 되지 않습니다.
이 칩에 2.6.22 커널 버전은 정상적으로 포팅되어 있고, 부팅도 정상적으로 되어 있습니다.
동일한 칩에 3.5.7.16으로 업그레이드를 진행중인데...
브로드컴에서 제공해준 SDK를 그대로 커널소스에 추가하였고, 2.6.22 버전에 추가하였던걸 그대로 진행하였으나,
커널 이미지를 로딩하는 부분.. 즉 Starting program at 0x80001000 부분에서 멈춰버립니다.
물론 커널 버전이 많이 차이가 있고, 업데이트 된 부분이 많은데, 사실 저 상태에서 어디를 포인트를 잡아야 될지 전혀
알수가 없네요. 추측으로는 SoC칩 초기화 부분에서 뭔가 문제가 있는거 같은데, printk로 찍어볼려고 하니 전혀 찍히지
않고(커널에서 각 디바이스 초기화 부분 자체가 안되는걸로 추측됨...), Trace32로 추척해볼려고 했지만, break point를
찍기가 쉽지 않네요. break를 걸면 멈추긴 하지만, Go를 누르면 수행이 안되버리는 문제가 발생합니다.
Head.S를 분석하여 2.6.22와 비교 분석을 해볼려고 하는데, 이것도 참 판단하기가 어렵네요. (처음 보는 부분이라서..)
칩 벤더에서는 더이상 지원을 하지 않는다는 방침을 내려, 맨땅에 헤딩을 하고 있는 상태입니다.
벤더에서 가이드 문서를 제공하여 주지도 않는 상태라...
init/main.c의 각 함수중에 초기화 부분쪽을 보려고 하니 어떤게 문제인지 사실 현 상황에선 알기 어려운 상태입니다.
그래서 유영창님께서 작성하신 TRACE_LINE 매크로를 사용하여 디버깅을 해볼려고 하는데, 이게 칩이 MIPS라 명령어가 틀려서
어떻게 해야 할지 감이 잘 안잡히네요. 이 부분에 있어서 도움을 약간 주시면 감사하겠습니다.
MIPS계열은 자료가 많지도 않고, 사례도 찾기 어렵네요.
마냥 main.c의 각 초기화 함수를 팔수도 없는 노릇이고.. 고수님들의 많이 의견 부탁드립니다.^^
3.5 버전대라면 디바이스 트리를 사용하나요?
부팅이 안될대 제가 사용하는 방법은 로우레벨 디버깅을 활성화하고 확인하는 겁니다.
무조건 로우레벨 프린트 하는 부분을 맨 앞단에 추가하고 나오는 것을 확인후
점점 뒤로 가면서 어느 부분에서 문제가 생기는지 확인하는 겁니다.
물론 이 작업 자체가 거의 노가다 수준이지만 별다른 방법이 없을대는.... 하셔야죠 ㅠㅠ