도와주세요!!
제가 사용하고 있는 보드는 AT91SAM9M10G45-EK보드로 공부중에 있는데요... 제가 만든 커널이 부팅 도중에 멈추는 이상한 현상이 있어서 ㅠㅠ 정리 해봤습니다. 고수님들의 친절한 답변 부탁드립니다.
1) 리눅스 커널 2.6.30과 exp Patch 그리고 마지막으로 defconfig 파일을 보드에 맞춰서 받아서 아래와 같이
Linux 폴더에 압축을 해제하여 넣어 놨습니다.
2) 아래 그림과 같이 PATCH를 하였습니다. (for p in 2.6.30-at91-exp.4/*; do patch -p1 < $p ; done)
3) defconfig 파일을 .config파일로 복사를 했습니다.
4) make menuconfig 명령을 통해 아래와 같이 configuration이 적용이 잘 되었는지 확인을 했습니다.
5) 아래와 같이 리눅스 Compile을 했습니다.
6) 윗 부분에서 했던 패치가 완벽하게 되지 않았기 때문에 아래와 같이 에러가 발생했습니다.
(패치 로고는 메일에 첨부함)
7) 에러가 난 부분을 해결하기 위해서 패치시에 제대로 되지 않았기 때문에 *.rej 파일을 찾아서 매뉴얼로 패치를 하였습니다. 패치한 파일은 at91_pmc.h와 clock.c파일의 rej파일을 찾아서 비교하며 수정하였습니다.
----- clock.c 파일에서는 아래 빨간줄로 표시한 cpu_is_at572d940hf()함수를 제거하였습니다. 이 함수의 선언이 되어 있지 않기 때문에 위와 같이 에러가 발생했기
때문에 제거하였습니다.
8) 모든 에러를 수정하여 커널을 컴파일 했습니다. 아래와 같이 커널 컴파일이 완료되어 zImage가 생성 된 것을 볼 수 있습니다.
9) Mkimage 명령어를 통해 uImage를 아래와 같이 만들어었습니다.
10) SAM-BA를 이용하여 DATA FLASH 리눅스 영역에 다운로드 했습니다.
밑에 보시는 그림처럼 DATA FLASH의 0x42000 번지에 다운로드를 했습니다.
여기서 제가 uImage를 그냥 Writing한 것이 아니라 기존 Atmel에서는 리눅스 커널을 binary형태의 파일로 배포했기 때문에
제가 uImage에 단지 확장자 bin만 붙여서 아래와 같이 uImage.bin 파일을 writing하였는데, (이 부분이 좀 의심스럽습니다.)
제가 이렇게 한 이유는 atmel에서 제공하는 빌드된 커널 옆에 설명으로 uImage라고 되어있었으며 리눅스 file명령어를 통해 비교해 보니
Atmel에서 제공된 빌드 된 커널이 uImage와 같은 구조로 되어 있는 것을 확인 했기 때문입니다.
11) 부팅을 하면 u-boot화면이 나오고 정상적으로 되다가 아래와 같이 “Uncompressing Linux ……………….. “ 이상한 값이 출력된 후 멈추게 됩니다.
고수님들의 친절한 답변 부탁드립니다.
일단 그림이 제대로 나오지 않네요.
마지막에 하신 말씀 보면 file 명령어로 기존 커널과 새롭게 작성하신 커널이 같은 구조로 되어있다고 하셨는데
file 명령으로는 arm용 바이너리인지 x86인지 txt 파일과 같은 단순한 파일 형식만 나옵니다.
때문에 제공된 커널과 새롭게 만드신 커널이 같다고는 볼 수 없습니다.