■ 빌드 전 준비사항
1. 필요한 리눅스 패키지 설치
yum -y install git gcc gcc-c++ avr-gcc-c++ PyQt4 fox-devel avr-libc python-argparse
2. 툴체인 다운로드
https://launchpad.net/gcc-arm-embedded
에서 gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2 파일을 다운로드 받는다.
압축 해제 후 디렉토리 명을 단순하게 변경한다.
mv gcc-arm-none-eabi-4_9-2015q3 gcc-arm-none-eabi
3. opentx 소스코드 다운로드
git clone https://github.com/opentx/opentx
git checkout master
■ radio/util/taranisicons.py 오류 수정 (공통)
Qt 버전이 4.8이하이기 때문에 생기는 오류로…
10번째 라인을 아래처럼 수정한다.
#image.fill(QtGui.QColor(255, 255, 255))
↓ 아래와 같이 (QtGui.QColor(255, 255, 255))→(3)으로 변경한다.
image.fill(3)
——————————————————————————
▶ USB 고장을 파워버튼에 USB상태를 무시하도록 수정-1 (opentx)
radio/src/targets/taranis/pwr_driver.c
가장 아래에 있는 uint32_t pwrCheck() 함수의 아래 부분을 수정한다.
#if defined(SIMU)
return e_power_on;
#else
if (GPIO_ReadInputDataBit(PWR_GPIO, PWR_GPIO_PIN_SWITCH) == Bit_RESET)
return e_power_on;
else if (usbPlugged())
return e_power_usb;
else
return e_power_off;
↓ 아래처럼 USB 플러그 체크인을 위한 2줄을 주석처리한다.
#if defined(SIMU)
return e_power_on;
#else
if (GPIO_ReadInputDataBit(PWR_GPIO, PWR_GPIO_PIN_SWITCH) == Bit_RESET)
return e_power_on;
// else if (usbPlugged())
// return e_power_usb;
else
return e_power_off;
로 수정한다.
▶ USB 고장을 파워버튼에 USB상태를 무시하도록 수정-1 (bootloader)
radio/src/targets/taranis/bootloader/boot.cpp
가장 아래에 있는 main 함수의 아래 부분을 수정한다.
if (state != ST_FLASHING && state != ST_USB) {
#if defined(REV9E)
if (pwrPressed()) {
#else
if (pwrCheck() == e_power_off) {
#endif
lcdOff(); // this drains LCD caps
pwrOff();
↓아래처럼 첫 if문에서 ST_USB 비교부분을 제거한다.
// if (state != ST_FLASHING && state != ST_USB) {
if (state != ST_FLASHING) {
#if defined(REV9E)
if (pwrPressed()) {
#else
if (pwrCheck() == e_power_off) {
#endif
lcdOff(); // this drains LCD caps
pwrOff();
——————————————————————————
▶ USB를 인식하지 못하도록 수정-1 (opentx)
radio/src/targets/taranis/usb_driver.c
int usbPlugged(void)를 사용하지 않도록 아래처럼 수정한다.
int usbPlugged(void)
{
// debounce
static uint8_t debounced_state = 0;
static uint8_t last_state = 0;
return 0;
…
▶ bootloader는 USB를 인식하도록 수정-2 (bootloader)
radio/src/targets/taranis/usb_driver.c에서 정상적인 int usbPlugged(void) 함수를
radio/src/targets/taranis/bootloader/boot.cpp
맨 윗 부분에 추가하고 이름을 변경 후 radio/src/targets/taranis/bootloader/boot.cpp
안에 모든 함수를 교체한 함수명으로 변경한다.
에디터에서 "usbPlugged(" → "usbPlugged_hasu0707("로 문자열 치환 실행
int usbPlugged_hasu0707(void)
{
// debounce
static uint8_t debounced_state = 0;
static uint8_t last_state = 0;
…
■ 빌드
build.sh를 아래와 같이 작성하여 작업 루트 디렉토리에서 ./scripts/build.sh로 실행한다.
#!/bin/sh
######################################################################
#
# Taranis Plus 빌드 스크립트
# (TARANISPLUS_OPENTX_BASE_PATH에서 실행한다.)
#
######################################################################
export OPENTX_VERSION=2.1.5
export TARANISPLUS_OPENTX_BASE_PATH=/opt/taranisplus_opentx
export ARCH=arm
export PATH=${TARANISPLUS_OPENTX_BASE_PATH}/gcc-arm-none-eabi/bin:${PATH}
export CROSS_COMPILE=arm-none-eabi-
######################################################################
#
# 소스코드 압축풀기 #1
#
######################################################################
cd ${TARANISPLUS_OPENTX_BASE_PATH}
rm -rf opentx-${OPENTX_VERSION}
tar xzf opentx-${OPENTX_VERSION}.tar.gz
######################################################################
#
# USB 계속 연결되어 있는 버그 패치 (USB가 인식되지 않게-안정적)
# diff -urN opentx-2.1.5-orig opentx-2.1.5 > script/hasu0707_nousb.patch
#
######################################################################
patch -p0 < ./script/hasu0707_nousb.patch
#echo "hasu0707_nousb.patch complete. press enter to continue…"
#read
######################################################################
#
# 빌드 #1
#
######################################################################
cd ${TARANISPLUS_OPENTX_BASE_PATH}/opentx-${OPENTX_VERSION}/radio/src && make clean
cd ${TARANISPLUS_OPENTX_BASE_PATH}/opentx-${OPENTX_VERSION}/radio/src && make \
OPENTX_VERSION_SUFFIX=-nousb \
PCB=TARANIS PCBREV=REVPLUS \
HELI=NO \
LUA=YES \
MIXERS_MONITOR=YES \
SHUTDOWN_CONFIRMATION=YES \
USB=JOYSTICK \
all
sync
######################################################################
#
# 빌드된 펌웨어 현재 디렉토리로 이동 #1
#
######################################################################
rm -f ${TARANISPLUS_OPENTX_BASE_PATH}/opentx-${OPENTX_VERSION}_nousb.bin
mv -f ${TARANISPLUS_OPENTX_BASE_PATH}/opentx-${OPENTX_VERSION}/radio/src/opentx.bin ${TARANISPLUS_OPENTX_BASE_PATH}/opentx-${OPENTX_VERSION}_nousb.bin
######################################################################
#
# 소스코드 압축풀기 #2
#
######################################################################
cd ${TARANISPLUS_OPENTX_BASE_PATH}
rm -rf opentx-${OPENTX_VERSION}
tar xzf opentx-${OPENTX_VERSION}.tar.gz
######################################################################
#
# USB 계속 연결되어 있는 버그 패치 (파워OFF 시 USB를 무시하게-불안정)
# diff -urN opentx-2.1.5-orig opentx-2.1.5 > script/hasu0707_ignoreusb.patch
#
######################################################################
patch -p0 < ./script/hasu0707_ignoreusb.patch
#echo "hasu0707_ignoreusb.patch complete. press enter to continue…"
#read
######################################################################
#
# 빌드 #2
#
######################################################################
cd ${TARANISPLUS_OPENTX_BASE_PATH}/opentx-${OPENTX_VERSION}/radio/src && make clean
cd ${TARANISPLUS_OPENTX_BASE_PATH}/opentx-${OPENTX_VERSION}/radio/src && make \
OPENTX_VERSION_SUFFIX=-ignoreusb \
PCB=TARANIS PCBREV=REVPLUS \
HELI=NO \
LUA=YES \
MIXERS_MONITOR=YES \
SHUTDOWN_CONFIRMATION=YES \
USB=JOYSTICK \
all
sync
######################################################################
#
# 빌드된 펌웨어 현재 디렉토리로 이동 #2
#
######################################################################
rm -f ${TARANISPLUS_OPENTX_BASE_PATH}/opentx-${OPENTX_VERSION}_ignoreusb.bin
mv -f ${TARANISPLUS_OPENTX_BASE_PATH}/opentx-${OPENTX_VERSION}/radio/src/opentx.bin ${TARANISPLUS_OPENTX_BASE_PATH}/opentx-${OPENTX_VERSION}_ignoreusb.bin
■ 빌드 완료
빌드 후 펌웨어 파일이 작업 루트 디렉토리에 opentx-x.x.x-hasu0707.bin 으로 생성되어 있다면 정상적으로 빌드가 된 것이다.
※ 각 기종별 빌드
cd radio/src
# OpenTX on 9X stock
make clean
make PCB=9X EXT=FRSKY HELI=YES
make simu PCB=9X EXT=FRSKY HELI=YES
make gtests EXT=FRSKY HELI=YES
./gtests
# OpenTX on Taranis Plus
make clean
make PCB=TARANIS PCBREV=REVPLUS HELI=YES LUA=YES
make simu PCB=TARANIS PCBREV=REVPLUS HELI=YES LUA=YES
make gtests PCB=TARANIS PCBREV=REVPLUS HELI=YES LUA=YES
./gtests
# OpenTX on Taranis
make clean
make PCB=TARANIS HELI=YES LUA=YES
make simu PCB=TARANIS HELI=YES LUA=YES
make gtests PCB=TARANIS HELI=YES LUA=YES
./gtests
# OpenTX on Sky9x
make clean
make PCB=SKY9X EXT=FRSKY HELI=YES
make simu PCB=SKY9X EXT=FRSKY HELI=YES
make gtests PCB=SKY9X EXT=FRSKY HELI=YES
./gtests
# OpenTX on Gruvin9x
make clean
make PCB=GRUVIN9X EXT=FRSKY SDCARD=YES
make simu PCB=GRUVIN9X EXT=FRSKY SDCARD=YES
# OpenTX on MEGA2560
make clean
make PCB=MEGA2560
# Companion
cd ../../buildir/
make