|
문제의 파일은 커널빌드루트/drivers/char/eagle_uart123.c 파일인데, menuconfig 시 Character Device 의 EAGLE LowLevel UART 1,2,3 Support 의 소스이다. ADChips 쪽에 문의하여 답변을 받았는데 이 드라이버는 리눅스에서 UART 를 OS 의 제어가 아닌 firmware 에서 다루는 것 처럼 직접 제어하여 사용하기 위한 드라이버라고 한다. 즉, 평소에는 별로 쓸 일이 없는 드라이버. 지금 ADChips(www.adc.co.kr) 홈페이지에 올라와있는 커널 소스가 업데이트 되어있는지는 모르겠지만, 혹시 모르니 eagle_uart123.c 파일 상단부 적당한 위치에 아래 코드를 추가한다. #define BASE_BAUD (BUS_CLOCK / 16) 이 한줄로 위 에러를 해결할 수 있다. |
|
ADChips EAGLE 에서 사용할 uClinux 빌드 중 나온 오류 메세지이다. arch/ae32000cnommu/kernel/kernel.o(.text+0x154): In function `doublefault_interrupt': : undefined reference to `printascii' arch/ae32000cnommu/kernel/kernel.o(.text+0x178): In function `buserror_interrupt': : undefined reference to `printascii' arch/ae32000cnommu/kernel/kernel.o(.text+0x3c70): In function `do_breakpoint_instr': : undefined reference to `printascii' drivers/usb/usbdrv.o(.text+0xc93e): In function `.L1103': : undefined reference to `printascii' printascii 라는게 뭔가 찾아보니 Kernel Debug Message 를 출력하기 위한 함수란다. (printch, printascii 두가지가 존재한다.) 즉... menuconfig 에서 보았을 때 커널 해킹(Kernel Hacking) 메뉴에 커널 디버깅(Kernel Degugging) 에서 커널 로우레벨 디버깅 함수(Kernel low-level debugging functions) 를 빌드 패키지에 포함시키면 해결 된다. 필요하다면 커널 로우레벨 디버깅 함수(Kernel low-level debugging functions) 체크 시 추가로 나오는 커널 로우레벨 디버깅 메세지를 UART0 에 함께 출력(Kernel low-level debugging messages via UART0) 도 추가하면 UART0 를 통해 디버깅 메세지를 받아볼 수 있다. 제길... 잉베디드 리눅스 쪽 프로젝트 하면서 삽질을 하루도 쉴 날이 없는 것 같다. |
| 일단 환경은 ubuntu(우분투) 리눅스이며, 크로스 컴파일 환경이 모두 세팅되어있는 상태이다. 또 uClinux 소스코드는 2008 년 12 월 23 일 현재 ADChips(www.adc.co.kr)홈페이지에 나와있는 최신 버전이다. uClinux 커널 config 를 마치고 dep 명령으로 의존성 검사를 하고 make 를 하면 빌드중 오류가 발생한다. /include/linux/complie.h 에 오류 2 라고 나오는데 Makefile 의 430 번째 라인에서 발생하는 오류였다. 내가 찾은 소스포지의 uClinux(http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/uclinux-h8/uClinux-2.4.x/Makefile?rev=1.14&view=markup) 와 Makefile 내용에 있어서 이 오류가 나는 줄이 약간 틀린데, 이 코드가 ADChips 에서 배포하는 EISC 용 uClinux 이고, 430: @echo \#define LINUX_COMPILE_HOST \"`hostname | $(uts_truncate) | $(uts_nodomain)`\" >> .ver 이 코드가 위의 소스포지에서 찾은 원본 코드이다. 430: @echo \#define LINUX_COMPILE_HOST \"`hostname | $(uts_truncate)`\" >> .ver 소스포지의 원본코드로 바꾸니 걍 빌드가 완료되어버렸다. |



