dfu-util을 임베디드 리눅스용으로 크로스 컴파일하기

반응형

본 글에서는 dfu-util을 리눅스 환경에서 임베디드 리눅스용으로 크로스 컴파일하는 방법을 설명한다.

 

본 글에서 사용된 크로스 컴파일 환경은 다음과 같다.

  • dfu-util v0.9-101 버전
  • 호스트 PC : 우분투 리눅스 (14.04 이후 버전)
  • 타겟 장치 : ARM 기반 하드웨어 플랫폼
  • 크로스 컴파일러 : arm-linux-gnueabihf-
다른 플랫폼 및 크로스컴파일러를 사용할 경우, 상황에 맞게 변경 적용 가능하다.

 

dfu-util 의 공식 홈페이지는 아래와 같다.

 

dfu-util Homepage

dfu-util - Device Firmware Upgrade Utilities Description dfu-util is a host side implementation of the DFU 1.0 and DFU 1.1 specifications of the USB forum. DFU is intended to download and upload firmware to/from devices connected over USB. It ranges from s

dfu-util.sourceforge.net

 

사전 필요 사항

호스트 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에 다운로드하고 압축 해제한다.

dfu-utils-cross-0.9-101.tar.gz
3.71MB

$ 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 바이너리를 다운로드한 후 사용 가능하다.

 

댓글

Designed by JB FACTORY