강좌 & 팁
저번의 libusb-0.1.12 arm 포팅에 이어서 usbutils 를 arm 포팅을 하도록 하겠습니다.
1. 다운로드 사이트
http://www.kernel.org/pub/linux/utils/usb/usbutils/usbutils-0,91.tar.gz
현재 최신 버젼은 usbutils-002.tar.gz 입니다. 하지만 이 버젼은 libusb-1.0.8 라이브러리를 요구합니다.
libusb-1.0.8 라이브러리를 arm으로 컴파일하고, usbutils-002를 컴파일하면 또 다른 에러가 발생합니다.
따라서 arm 에서 정상적으로 컴파일이 가능한 버젼은 libusb-0.1.12 라이브러리에 usbutils-0.91 을 사용하시면 됩니다.
2. 압축 풀기
# tar -zxvf usbutils-0.91.tar.gz
# cd usbutils-0.91
3. 컴파일 하기
# ./configure --host=arm-generic-linux-gnueabi --prefix=/project/usbutils-0.91/_install
# make
# make install
4. 컴파일이 정상적으로 되었다면 _install 디렉토리에 관련 파일들이 생성됩니다. 이 파일들을 타겟보드의 파일시스템에 복사하여
다운로드 하시면 됩니다. 여기서 핵심 파일은 /sbin/lsusb 파일입니다.
usb 장치를 꽂은 후 이 유틸리티를 사용하면 usb 장치의 vendors 와 prducts 값을 알려 줍니다.
5. 에러 관련
만약 컴파일시 아래와 같은 에러가 발생할 경우
make all-am
make[1]: Entering directory `/staff/E11-0010_장형기/trunk/project/udev/ramdisk/src/usbutils-0.73'
if arm-generic-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I. -DUSBIDS_DIR='"/staff/E11-0010_장형기/trunk/project
/udev/ramdisk/src /usbutils-0.73/_install/share"' -Wall -W -Wunused -g -O2 -MT lsusb.o -MD -MP -MF
".deps/lsusb.Tpo" -c -o lsusb.o lsusb.c; \
then mv -f ".deps/lsusb.Tpo" ".deps/lsusb.Po"; else rm -f ".deps/lsusb.Tpo"; exit 1; fi
lsusb.c: In function 'do_wireless':
lsusb.c:2637: warning: unused parameter 'fd'
/tmp/ccGp3uAD.s: Assembler messages:
/tmp/ccGp3uAD.s:4039: rdhi, rdlo and rm must all be different
if arm-generic-linux-gnueabi-gcc -DHAVE_CONFIG_H -I. -I. -I. -DUSBIDS_DIR='"/staff/E11-0010_장형기/trunk/project
/udev/ramdisk/src /usbutils-0.73/_install/share"' -Wall -W -Wunused -g -O2 -MT names.o -MD -MP -MF
".deps/names.Tpo" -c -o names.o names.c; \
then mv -f ".deps/names.Tpo" ".deps/names.Po"; else rm -f ".deps/names.Tpo"; exit 1; fi
names.c:42:18: error: zlib.h: No such file or directory
names.c: In function 'new_vendor':
names.c:281: warning: implicit declaration of function 'rpl_malloc'
names.c:281: warning: assignment makes pointer from integer without a cast
names.c: In function 'new_product':
names.c:300: warning: assignment makes pointer from integer without a cast
names.c: In function 'new_class':
names.c:320: warning: assignment makes pointer from integer without a cast
names.c: In function 'new_subclass':
names.c:339: warning: assignment makes pointer from integer without a cast
names.c: In function 'new_protocol':
names.c:359: warning: assignment makes pointer from integer without a cast
names.c: In function 'new_audioterminal':
names.c:380: warning: assignment makes pointer from integer without a cast
names.c: In function 'new_videoterminal':
names.c:399: warning: assignment makes pointer from integer without a cast
names.c: In function 'new_genericstrtable':
names.c:417: warning: assignment makes pointer from integer without a cast
names.c: At top level:
names.c:470: error: expected ')' before 'f'
names.c: In function 'names_init':
names.c:801: error: 'gzFile' undeclared (first use in this function)
names.c:801: error: (Each undeclared identifier is reported only once
names.c:801: error: for each function it appears in.)
names.c:801: error: expected ';' before 'f'
names.c:803: error: 'f' undeclared (first use in this function)
names.c:803: warning: implicit declaration of function 'gzopen'
names.c:806: warning: implicit declaration of function 'parse'
names.c:807: warning: implicit declaration of function 'gzclose'
make[1]: *** [names.o] 오류 1
make[1]: Leaving directory `/staff/E11-0010_장형기/trunk/project/udev/ramdisk/src/usbutils-0.73'
make: *** [all] 오류 2
위의 빨간색 부분으로 인한 에러는 zlib 라이브러리 및 헤더파일이 toolchain에 제공되지 않고 있기 때문입니다.
즉, zlib 라이브러리 및 헤더파일이 arm용으로 컴파일 되어 있지 않다는 것입니다.
이 경우 zlib-1.2.3.tar.gz 을 다운 받아서 arm으로 컴파일하시면 됩니다.
( 혹시라고 모르시는 분들을 위해서 다음 주에 hotplug 포팅과 함께 포팅해 보도록 하겠습니다. )