반응형

Onion Omega2+ 보드는 13$ 의 저렴한 개발보드이다. 사양은 다음과 같고 OpenWRT 기반의 리눅스가 올라가 있다. (사양 출처: https://onion.io/store/omega2p/ )


Technical Details

  • 580MHz MIPS CPU
  • 128MB Memory
  • 32MB Storage
  • USB2.0 support
  • 2.4GHz b/g/n WiFi
  • 3.3V Operating Voltage
  • 18 GPIOs
  • Support for UART, I2C, SPI
  • MicroSD slot

CPU 성능등으로 어떤 라이브러리를 빌드할때, 보드 자체에서 빌드는 거의 불가능하고 Cross-Compile 환경이 구성 되어 있어야 한다. 이번 포스팅에서는 Onion Omega2+ 의 라이브러리 빌드를 위한 Cross-Compile 환경 구축에 대해서 설명한다. (참고 사이트: https://docs.onion.io/omega2-docs/cross-compiling.html )


1. Host 환경 설정

 Host 는 ubuntu 18.04 desktop 이고 다음과 같이 필요한 라이브러리들을 설치한다.


$ sudo apt-get install -y git wget subversion build-essential libncurses5-dev zlib1g-dev gawk flex quilt git-core unzip libssl-dev python-dev python-pip libxml-parser-perl


2. LEDE Build system 다운로드

Onion Omega2를 위해 커스터마이징 된 Build System을 다운로드 한다.


$ git clone https://github.com/OnionIoT/source.git


3. Build 환경 설정

source 폴더로 진입해서 make menuconfig 로 빌드 환경을 설정한다.

  - Target System은 MediaTek Ralink MIPS를 선택

  - Subtarget은 MT7688 based boards 선택

  - Target Profile 을 선택하고 Multiple devices 선택

 -  Target Device에서 대상 디바이스 선택(onion omega2+)

 -  Save 하고 종료


console에서 $make 로 빌드한다. 빌드하다가 다음과 같이 오류가 발생할 수 있는데,

./../misc/create_inode.c:395:18: error: conflicting types for 'copy_file_range'

 static errcode_t copy_file_range(ext2_filsys fs, int fd, ext2_file_t e2_file,

                  ^~~~~~~~~~~~~~~

In file included from ./../misc/create_inode.c:19:0:

/usr/include/unistd.h:1110:9: note: previous declaration of 'copy_file_range' was here

 ssize_t copy_file_range (int __infd, __off64_t *__pinoff,

 


다음의 소스에서 /usr/include/unistd.h 를 include하는 부분을 주석처리한다.


source/build_dir/host/e2fsprogs-1.43.3/misc/create_inode.c


빌드하게 되면 다음의 폴더에 툴체인이 존재한다.


source/staging_dir/toolchain-mipsel_24kc_gcc-5.4.0_musl-1.1.16


이 폴더의 bin 에 compile tool이, include에 C standard library, lib에 C standard library shared object가 존재한다.


4. Cross-Compile 환경 구성

Cross Compile 환경은 다음과 같이 구성한다.

export STAGING_DIR=[staging_dir경로]/toolchain-mipsel_24kc_gcc-5.4.0_musl-1.1.16

export PATH=$PATH:$STAGING_DIR/bin

export CROSS=mipsel-openwrt-linux

export TARGETMACH=mipsel-openwrt-linux

export CC=${CROSS}-gcc

export LD=${CROSS}-ld

export AS=${CROSS}-as

export AR=${CROSS}-ar

export CXX=${CROSS}-g++

export RANLIB=${CROSS}-ranlib




반응형
Posted by alias
,