기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
안녕하세요
udev를 Cross Compile하려고 하는데 생각보다 어렵네요...
* configure 생성
# CC=arm-none-linux-gnueabi-gcc ./configure --host=arm-none-linux-gnueabi prefix=/root/udev./c/install/175
--with-usb-ids-path=no --with-pci-ids-path=no.
* glib는 Arm용으로 CrossCompile해두었고, PKG_CONFIG_PATH에 Arm용 glib을 등록해 놓은 상태입니다.
* CrossCompile은 Sourcery CodeBench Lite 2011.09-70이고, Cobuntu 11.10에서 작업중입니다.
컴파일러는 이전버전을 사용하면 컴파일할때 변수 define이 없다고 뜨면서 컴파일이 안됩니다.
두가지 버젼으로 시도하고 있습니다.
1) u-dev 182
일단 u-dev 176이상버젼은 configure을 실행하면
configure: error: Package requirements (blkid >= 2.20) were not met:
Requested 'blkid >= 2.20' but version of blkid is 2.19.0
오류가 발생합니다. blkid 버젼이 낮다는의미인데
도대체 Ubuntu에서 blkid는 2.19가 최신버젼인데 2.20 이상으로 어떻게 업데이트 하는지를 모르겠네요..
2)u-dev 175
./configure까지는 실행이 잘됩니다.
컴파일하면
GEN extras/gudev/gudevmarshal.h
GEN extras/gudev/gudevmarshal.c
GEN extras/gudev/gudevenumtypes.h
GEN extras/gudev/gudevenumtypes.c
GEN extras/keymap/keys.txt
GEN extras/keymap/keys-from-name.gperf
GEN extras/keymap/keys-from-name.h
GEN extras/keymap/keys-to-name.h
make --no-print-directory all-recursive
Making all in .
CC libudev/libudev.lo
CC libudev/libudev-list.lo
CC libudev/libudev-util.lo
CC libudev/libudev-device.lo
CC libudev/libudev-enumerate.lo
CC libudev/libudev-monitor.lo
CC libudev/libudev-queue.lo
CCLD libudev/libudev.la
CC extras/gudev/extras_gudev_libgudev_1_0_la-gudevclient.lo
CC extras/gudev/extras_gudev_libgudev_1_0_la-gudevdevice.lo
CC extras/gudev/extras_gudev_libgudev_1_0_la-gudevenumerator.lo
CC extras/gudev/extras_gudev_libgudev_1_0_la-gudevmarshal.lo
CC extras/gudev/extras_gudev_libgudev_1_0_la-gudevenumtypes.lo
CCLD extras/gudev/libgudev-1.0.la
CC libudev/libudev-util-private.lo
CC libudev/libudev-device-private.lo
CC libudev/libudev-queue-private.lo
CCLD libudev/libudev-private.la
CC udev/udev-event.o
CC udev/udev-watch.o
CC udev/udev-node.o
CC udev/udev-rules.o
CC udev/udev-ctrl.o
CC udev/udev-builtin.o
CC udev/udev-builtin-path_id.o
CC udev/udev-builtin-usb_id.o
CC udev/udev-builtin-input_id.o
CC udev/udevd.o
CC udev/sd-daemon.o
CCLD udev/udevd
CC extras/firmware/extras_firmware_firmware-firmware.o
CCLD extras/firmware/firmware
CC extras/ata_id/ata_id.o
CCLD extras/ata_id/ata_id
CC extras/cdrom_id/cdrom_id.o
CCLD extras/cdrom_id/cdrom_id
CC extras/collect/collect.o
CCLD extras/collect/collect
CC extras/scsi_id/scsi_id.o
CC extras/scsi_id/scsi_serial.o
CCLD extras/scsi_id/scsi_id
CC extras/v4l_id/v4l_id.o
CCLD extras/v4l_id/v4l_id
CC extras/accelerometer/accelerometer.o
CCLD extras/accelerometer/accelerometer
CC extras/usb-db/extras_usb_db_usb_db-usb-db.o
CCLD extras/usb-db/usb-db
CC extras/usb-db/extras_usb_db_pci_db-usb-db.o
CCLD extras/usb-db/pci-db
CC extras/keymap/extras_keymap_keymap-keymap.o
CCLD extras/keymap/keymap
CC extras/mtd_probe/extras_mtd_probe_mtd_probe-mtd_probe.o
CC extras/mtd_probe/extras_mtd_probe_mtd_probe-probe_smartmedia.o
CCLD extras/mtd_probe/mtd_probe
CC udev/udevadm.o
CC udev/udevadm-info.o
CC udev/udevadm-control.o
CC udev/udevadm-monitor.o
CC udev/udevadm-settle.o
CC udev/udevadm-trigger.o
CC udev/udevadm-test.o
CC udev/udevadm-test-builtin.o
CCLD udev/udevadm
GEN extras/gudev/GUdev-1.0.gir
extras/gudev/gudev.h:24: Warning: GUdev: symbol='_GUDEV_INSIDE_GUDEV_H': Unknown namespace for symbol 'GUDEV_INSIDE_GUDEV_H'
g-ir-scanner: compile: gcc -Wall -pthread -I/usr/local/glib_arm/include/glib-2.0 -I/usr/local/glib_arm/lib/glib-2.0/include -I./extras -I./extras -I/usr/local/glib_arm/include/glib-2.0 -I/usr/local/glib_arm/lib/glib-2.0/include -c -o /root/udev/source/udev-175/tmp-introspectNBLZ1J/GUdev-1.0.o /root/udev/source/udev-175/tmp-introspectNBLZ1J/GUdev-1.0.c
g-ir-scanner: link: libtool --mode=link --tag=CC gcc -o /root/udev/source/udev-175/tmp-introspectNBLZ1J/GUdev-1.0 -export-dynamic -L. -lgudev-1.0 -L./libudev -L./extras/gudev -pthread -L/usr/local/glib_arm/lib -lgio-2.0 -lgmodule-2.0 -lgobject-2.0 -lgthread-2.0 -lglib-2.0 /root/udev/source/udev-175/tmp-introspectNBLZ1J/GUdev-1.0.o
libtool: link: gcc -o /root/udev/source/udev-175/tmp-introspectNBLZ1J/.libs/GUdev-1.0 -pthread /root/udev/source/udev-175/tmp-introspectNBLZ1J/GUdev-1.0.o -Wl,--export-dynamic -L. /root/udev/source/udev-175/extras/gudev/.libs/libgudev-1.0.so -L./libudev -L./extras/gudev -L/usr/local/glib_arm/lib /usr/local/glib_arm/lib/libgio-2.0.so /usr/local/glib_arm/lib/libgmodule-2.0.so /usr/local/glib_arm/lib/libgobject-2.0.so /usr/local/glib_arm/lib/libgthread-2.0.so /usr/local/glib_arm/lib/libglib-2.0.so -pthread -Wl,-rpath -Wl,/root/udev./c/install/175/lib -Wl,-rpath -Wl,/usr/local/glib_arm/lib
/root/udev/source/udev-175/extras/gudev/.libs/libgudev-1.0.so: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
linking of temporary binary failed: Command '['libtool', '--mode=link', '--tag=CC', 'gcc', '-o', '/root/udev/source/udev-175/tmp-introspectNBLZ1J/GUdev-1.0', '-export-dynamic', '-L.', '-lgudev-1.0', '-L./libudev', '-L./extras/gudev', '-pthread', '-L/usr/local/glib_arm/lib', '-lgio-2.0', '-lgmodule-2.0', '-lgobject-2.0', '-lgthread-2.0', '-lglib-2.0', '/root/udev/source/udev-175/tmp-introspectNBLZ1J/GUdev-1.0.o']' returned non-zero exit status 1
make[2]: *** [extras/gudev/GUdev-1.0.gir] 오류 1
make[1]: *** [all-recursive] 오류 1
make: *** [all] 오류 2
식으로 libgudev-1.0.so의 Symbol을 읽을수가 없다는데...
왜이러는지 모르겠네요.
libgudev-1.0은 udev source에 포함되있는 라이브러리인데
Cross Compile이 안되서 저러 오류가 나타나느걸가요?
조언 부탁드립니다.
제가 175 버전으로 다음과 같이 configure option 주고 실행했었습니다.
잘 되실지는 모르겠지만, 참고가 되시길 바랍니다.
사용한 Ubuntu 버전은 정확하게 기억나지는 않지만, 10.04 아니면 11.10 입니다.
그리고, CROSS_COMPILER_PREFIX는 설정해 주셔야 합니다.
./configure \
--host=$CROSS_COMPILER_PREFIX \
--prefix=/usr \
--sysconfdir=/etc \
--sbindir=/sbin \
--libdir=/usr/lib \
--with-rootlibdir=/lib \
--libexecdir=/lib/udev \
--disable-keymap \
--disable-gudev \
--disable-introspection \
--without-pci-ids-path \
--without-usb-ids-path
로그 내용을 보니 extras/gudev/GUdev-1.0.gir 이거 컴파일 할 때 그냥 gcc가 호출 되었군요. corss-compiler가 아닌 그러니 이미 cross-compiler로 compile된 libgudev-1.0.so 을 link 못하는 것으로 보입니다.
그런데 최신 버전를 사용하셔야 하는 지 의문입니다. 저의 경우 udev140를 사용하고 있습니다. arm board 에서 udev145나 udev150으로 업그레이드 하려다고 부팅도 안되고 실패한 경험이 있어서 udev 버전업에는 현재 신경 쓰지 않고 있습니다.
최신 device가 있는 것도 아니고 새로운 기능이 필요한 것도 아니라서... 순전히 개인의 경험입니다.