강좌 & 팁
요즘은 많이 쓰이지 않지만 이더넷이나 mmc 같은 별다른 전송 수단이 없을 때
RS232 시리얼 콘솔에서 바로 xmodem이나 zmodem으로 파일을 송수신할 때 쓰이는
lrzsz라는 유틸리티를 크로스컴파일하는 방법을 소개합니다.
사실 이 유틸은 x86용으로는 쉽게 구할 수 있지만 임베디드에서 실행하기 위해서는 따로 빌드가 필요할 수 있습니다.
먼저 아래 사이트에서 소스를 다운 받습니다. 현재까지 최신 버전은 lrzsz-0.12.20.tar.gz 입니다.
https://ohse.de/uwe/software/lrzsz.html
그리고 압축을 해제합니다.
아래와 같이 빌드를 수행합니다. 크로스 컴파일이라 옵션이 조금 많습니다.
$ CC=arm-none-linux-gnueabi-gcc RANLIB=arm-none-linux-gnueabi-ranlib ./configure --host=arm-none-linux-gnueabi --build=i686-pc-linux-gnu --prefix=/usr/arm-none-linux-gnueabi
--prefix는 설치될 장소를 기본 경로가 아닌 별도의 경로를 지정해 줄 경우 넣습니다. 크로스 컴파일의 경우 꼭 넣어줍니다.
그렇지 않으면 기존 호스트에 설치된 유틸과 꼬일 수 있습니다.
빌드를 위해 make를 수행합니다.
$ make
그리고 설치합니다.
$ make install
설치가 끝나면 조금전 configure할 때 --prefix로 넣은 디렉토리에 빌드한 바이너리가 생성 됩니다.
$ cd /usr/arm-none-linux-gnueabi
$ cd bin/
bin$ ls
lrb lrx lrz lsb lsx lsz
생성된 바이너리만 임베디드 보드의 파일시스템으로 복사해서 사용하면 됩니다.
$CC=arm-poky-linux-gnueabi-gcc RANLIB=arm-poky-linux-gnueabi-ranlib
$./configure --host=arm-poky-linux-gnueabi-gcc --prefix=/usr/arm-poky-linux-gnueabi
위와 같이 실행했을 때,
loading cache ./config.cache
checking for a BSD compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking whether make sets ${MAKE}... yes
checking for working aclocal... found
checking for working autoconf... found
checking for working automake... found
checking for working autoheader... found
checking for working makeinfo... found
checking for gcc... arm-poky-linux-gnueabi-gcc
checking whether the C compiler (arm-poky-linux-gnueabi-gcc ) works... no
configure: error: installation or configuration problem: C compiler cannot create executables
C Compiler가 동작되지 않는다고 출력되는데.... 무엇이 문제일지 도움을 부탁드립니다.
$arm-poky-linux-gnueabi-gcc -v 를 실행했을 때는 다음과 같이 출력되는것으로 보아 C compiler가 정상인것으로 생각되어집니다.
Thread model: posix
gcc version 4.9.1 (GCC)