그리 필요하진 않지만 아무생각 없이 넣었다가 컴파일 단계에서 에러가 나서 확인해 보니 BASE_BAUD 가 선언되지 않았다는 오류가 나타났다.

문제의 파일은 커널빌드루트/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)

이 한줄로 위 에러를 해결할 수 있다.
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/12/24 14:39 2008/12/24 14:39
Posted by TylorSTYLE™
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 를 통해 디버깅 메세지를 받아볼 수 있다.

제길... 잉베디드 리눅스 쪽 프로젝트 하면서 삽질을 하루도 쉴 날이 없는 것 같다.
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/12/24 14:29 2008/12/24 14:29
Posted by TylorSTYLE™

일단 LIBUSB 만든분 천재 라고 찬양한번 하고 가자!


LIBUSB 는 정말 잘 만들어진 라이브러리임이 틀림없다.


또 윈도우, Mac OS, Linux, Embedded Linux 등 이식성도 좋다는 것.


물론 전용 USB 장치 드라이버를 사용할 때 보다는 USB의 다양한 전송모드를 사용하는데는 제약이 따르지만 Bulk 전송에는 전혀 문제가 없다. (Control, Interrupt 도 지원은 한다.)


필자는 LIBUSB 로 SmartCard Reader 제어 라이브러리를 개발하면서 사용자들이 만들어낼 수 있는 여러가지 액션에 대해서 생각하면서 제어 라이브러리를 만들다 보니 오류처리에 대해 대단히 궁금했다.

소프트웨어 사용 중 사용자가 USB Device 를 포트에서 강제 제거했다고 가정해보자.

LIBUSB 는 함수 호출 시 리턴 값으로 오류를 알려주게 된다.

usb_bulk_read() 함수를 호출 했을 때, 수신된 데이터 바이트 수를 0 이상의 값으로 리턴하도록 되어있다.

오류 발생시에는 0 미만의 오류코드를 리턴하게 되어있고, 이 오류코드는 errno.h 라는 헤더에 모두 정의되어있다.

물론 errno.h 헤더는 컴파일러에 기본 포함되어있는 오류코드가 Define 되어있다.

또 오류 메세지에 대한 문자열 값을 usb_strerror() 함수로 얻을 수도 있다.

errno.h 헤더에 보면 에러코드 19(ENODEV) 가 장치를 찾을 수 없다는 오류코드인데 LIBUSB 는 -19 를 리턴한다.

또 흔히 나타나는 코드로 110(ETIMEDOUT) 코드 또한 errno.h 에 있다.


LIBUSB 라이브러리... 정말 쓰기 쉽고, 강력하며, 플랫폼에 관계없이 이식성 좋은 라이브러리는 정말 오랜만에 만나보는 것 같다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/12/08 23:12 2008/12/08 23:12
Posted by TylorSTYLE™
일단....

아!!!!!!!!!!!!!!!!!!!!!! 이 씨.... 어ㅣㅓㄴㅁㅇ리ㅏㅓㅁㄷ재ㅑ롬ㄴㅇ;ㅣ라ㅓㅁㄴ이라ㅓㅣㅏㅇ너ㅣㅓ

지금 임베디드 리눅스 개발환경에 포팅하면서 개발하기가 귀찮아서 리눅스 상에서 테스트 후 최종만 리눅스에서 돌리고 있다. (물론 전 부분이 아닌 LIBUSB 파트만이다.)

이게... 우분투 만의 문제 같은데...

보안이 강력한 덕분에 개발할 때 짜증을 유발한다.

지금 개발중인 제품에 LIBUSB 처리 부를 3 번 째 갈아 엎으면서 퍼미션 문제에 3 번 당해 몇시간 삽질을 해버렸다.

위에처럼 욕이 나올 수 밖에...

이 짜증나는 상황에 대한 해결 방법은 간단하다.

테스트용 실행파일을 sudo 로 실행하는 방법과 매법 이렇게 하기 짜증나니 아예 USB 포트에 대한 Root 실행권한을 적나라하게 해제해버리는 것이다.

일단 해체 방법은

/usr/share/doc/libusb-0.?-?/README.Debian (? 는 자신이 사용하는 LIBUSB 버전이다.)

에 영어로 친절하게 소게되어있다.

제길슨... 진작에 알았으면.....
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/12/08 22:04 2008/12/08 22:04
Posted by TylorSTYLE™
오늘 설치하다가 그래픽 메모리 64 MB 이하인 PC 에서 텍스트 모드로 진입하는 것을 발견하였다.

잠깐 삽질을 하긴 했는데.. (뭐... 삽질은 내 생활이니까..)

BIOS 에서 AGP 공유 메모리를 128 로 늘려주면 제대로 된다.

뭐... 이게 모든 텍스트 모드로 진입하는 문제에 대한 해결 방법은 아니고, 일부 문제에 대한 해결 방법이므로 이걸로 해결 안되면 구글링 하시길~
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/10/10 00:26 2008/10/10 00:26
Posted by TylorSTYLE™

BLOG main image

카테고리

전체 (119)
Freeware (2)
SAMSUNG MCU (14)
Embedded Linux (10)
AE32000(EAGLE) (2)
Mac OS X (5)
신변잡기 (48)
디지털 회로 (1)
Programming (12)
무선 네트워크 (15)
Computer (5)
사용기 (5)

글 보관함

124

87

-35 days

today : 17

Daum 블로거뉴스
믹시