dfu-util을 임베디드 리눅스용으로 크로스 컴파일하기
- 개발/임베디드 리눅스
- 2020. 1. 30.
반응형
본 글에서는 dfu-util을 리눅스 환경에서 임베디드 리눅스용으로 크로스 컴파일하는 방법을 설명한다.
본 글에서 사용된 크로스 컴파일 환경은 다음과 같다.
- dfu-util v0.9-101 버전
- 호스트 PC : 우분투 리눅스 (14.04 이후 버전)
- 타겟 장치 : ARM 기반 하드웨어 플랫폼
- 크로스 컴파일러 : arm-linux-gnueabihf-
다른 플랫폼 및 크로스컴파일러를 사용할 경우, 상황에 맞게 변경 적용 가능하다.
dfu-util 의 공식 홈페이지는 아래와 같다.
사전 필요 사항
호스트 PC에 크로스 컴파일러를 설치한다.
$ sudo apt update -y && sudo apt upgrade -y
$ sudo apt install build-essential gcc-arm-linux-gnueabihf libstdc++6-armhf-cross libc6-armhf-cross libc6-dev-armhf-cross binutils-arm-linux-gnueabihf linux-libc-dev-armhf-cross
dfu-util 다운로드
다음 dfu-util v0.9-101 버전 파일을 호스트 PC에 다운로드하고 압축 해제한다.
$ tar zxf dfu-utils-cross-0.9-101.tar.gz
$ cd dfu-utils-cross-0.9-101
빌드 스크립트 수정
compile_linux.sh 파일을 다음과 같이 수정한다. "수정" 주석 부분 참조.
#!/bin/bash -xe
# Copyright (c) 2016 Arduino LLC
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
mkdir -p distrib/linux64
cd libusb-1.0.20
export LIBUSB_DIR=`pwd`
./configure --enable-static --disable-shared --disable-udev
make clean
make
cd ..
cd dfu-util-0.9
USB_CFLAGS="-I$LIBUSB_DIR/libusb/" USB_LIBS="-L$LIBUSB_DIR/libusb/.libs/ -lusb-1.0 -lpthread" ./configure
make clean
CFLAGS=-static make
cp src/dfu-suffix src/dfu-prefix src/dfu-util ../distrib/linux64/
cd ..
mkdir -p distrib/linux32
cd libusb-1.0.20
export LIBUSB_DIR=`pwd`
CFLAGS=-m32 ./configure --enable-static --disable-shared --disable-udev
make clean
make
cd ..
cd dfu-util-0.9
CFLAGS=-m32 USB_CFLAGS="-I$LIBUSB_DIR/libusb/" USB_LIBS="-L$LIBUSB_DIR/libusb/.libs/ -lusb-1.0 -lpthread" ./configure
make clean
CFLAGS=-static make
cp src/dfu-suffix src/dfu-prefix src/dfu-util ../distrib/linux32
cd ..
mkdir -p distrib/arm
cd libusb-1.0.20
export LIBUSB_DIR=`pwd`
#./configure --enable-static --disable-shared --disable-udev --host=arm-linux-gnueabihf
# 수정
./configure --enable-static --disable-shared --disable-udev --host=arm-linux-gnueabihf
#./configure --enable-static --disable-shared --disable-udev CC=arm-linux-gnueabihf-gcc LD=arm-linux-gnueabihf-ld AR=arm-linux-gnueabihf-ar NM=arm-linux-gnueabihf-nm OBJDUMP=arm-linux-gnueabihf-objdump RANLIB=arm-linux-gnueabihf-ranlib STRIP=arm-linux-gnueabi-strip --host=arm-linux-gnueabihf
make clean
make
cd ..
cd dfu-util-0.9
#USB_CFLAGS="-I$LIBUSB_DIR/libusb/" USB_LIBS="-L$LIBUSB_DIR/libusb/.libs/ -lusb-1.0 -lpthread" ./configure --host=arm-linux-gnueabihf
# 수정
USB_CFLAGS="-I$LIBUSB_DIR/libusb/" USB_LIBS="-L$LIBUSB_DIR/libusb/.libs/ -lusb-1.0 -lpthread -lrt" ./configure --host=arm-linux-gnueabihf
#USB_CFLAGS="-I$LIBUSB_DIR/libusb/" USB_LIBS="-L$LIBUSB_DIR/libusb/.libs/ -lusb-1.0 -lpthread -lrt" ./configure CC=arm-linux-gnueabihf-gcc LD=arm-linux-gnueabihf-ld AR=arm-linux-gnueabihf-ar NM=arm-linux-gnueabihf-nm OBJDUMP=arm-linux-gnueabihf-objdump RANLIB=arm-linux-gnueabihf-ranlib STRIP=arm-linux-gnueabihf-strip --host=arm-linux-gnueabihf
make clean
CFLAGS=-static make
cp src/dfu-suffix src/dfu-prefix src/dfu-util ../distrib/arm/
빌드
스크립트 수정 후 다음 명령을 통해 빌드하면 distrib/arm/ 디렉터리에 dfu-util 바이너리가 생성된다.
$ sh compile_linux.sh
...
...
$ cd distrib/arm/
$ ls
dfu-prefix dfu-suffix dfu-util
타겟보드 다운로드
타겟보드의 /usr/bin 디렉터리에 dfu-util 바이너리를 다운로드한 후 사용 가능하다.
'개발 > 임베디드 리눅스' 카테고리의 다른 글
ffmpeg 사용법 - 임베디드 플랫폼용으로 빌드하기 (0) | 2021.03.21 |
---|---|
JSMN(JSON parse library) 사용법 - 임베디드 플랫폼용으로 빌드하기 (0) | 2021.03.15 |
pps-tools 빌드하기 (0) | 2021.02.15 |
임베디드 리눅스 플랫폼에 DHCP 서버 구축하기 - udhcp (0) | 2020.04.09 |
OpenSSL 을 임베디드 리눅스용으로 크로스 컴파일하기 (0) | 2020.01.31 |
임베디드 리눅스 장치에 GPS 모듈을 USB 로 연결하기 (0) | 2020.01.30 |
GPS 모듈을 이용하여 시스템시각을 UTC 시간에 동기화하는 임베디드 장치 구성하기 (0) | 2020.01.30 |
libpcap/tcpdump 를 이용한 네트워크 패킷 수집 (0) | 2019.04.20 |