저번의 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 포팅과 함께 포팅해 보도록 하겠습니다. )