LoginSignup
0
0

More than 5 years have passed since last update.

CentOS5.11/32bit で Arduino IDE 1.6.7を動作させる。

Last updated at Posted at 2016-02-03

1.はじめに
CentOS5.11/32bit で バイナリ配布版のArduino IDE 1.6.7 を実行してコンパイル作業をすると以下のエラーが出てコンパイルできません。

Linux 32bit

/var/tmp/arduino-1.6.7/hardware/tools/avr/bin/avr-g++: /lib/libc.so.6: version `GLIBC_2.11' not found (required by /var/tmp/arduino-1.6.7/hardware/tools/avr/bin/avr-g++)
exit status 1
コンパイル時にエラーが発生しました.

Arduino IDEに内蔵されている Arduino用のg++コンパイラが要求しているGLIBCをCentOS5が持ってないんですね。

CentOS5はまだセキュリティサポートなどがされているOSですが少々古いLinuxなので新しいライブラリが入っていません。今回都合でOSの更新が出来ないため、CentOS5用で実行できるよう思考錯誤しまして成功しました。

作業の流れですが、 Arduino用のクロスコンパイルのgccを構築、関連ツールを構築、関連ライブラリを構築します。

その後、バイナリ配布のArduino IDEの環境変数を書き換えて、新たに構築した上記ライブラリを使うように設定する。

という流れになります。

補足: 本作業ですが、一見、こちらの方法でIDEを再コンパイルすれば良いように見えますが、

上記URLの手順でGitでソースコードをダウンロードしたところ、ソースコードの中にバイナリのArduino用のgcc/g++がそのまま入っていました。そのバイナリ版のgcc/g++が使われるArduino IDEが再構築されただけでした。つまりバイナリ配布版のArduino IDEをダウンロードするのとほとんど変わりません。

2.準備

CentOS5の環境
gcc/g++とか開発環境入れてください。実際に必要なライブラリなどは細かく確認していません。

$ uname -a
Linux example.jp 2.6.18-408.el5PAE #1 SMP Tue Jan 19 09:54:24 EST 2016 i686 i686 i386 GNU/Linux

Oracleが配布している最新版のJDKを導入して下さい。
https://java.com/ja/download/help/linux_install.xml

update-alternativesを使って標準のJavaを置き換えています。

$ which java
/usr/bin/java

$ java -version
java version "1.8.0_72"
Java(TM) SE Runtime Environment (build 1.8.0_72-b15)
Java HotSpot(TM) Server VM (build 25.72-b15, mixed mode)

インストール先を決めて下さい。今回は標準のPATHではなく独自の場所(/usr/local/avr)に入れています。

$ sudo mkdir /usr/local/avr
$ sudo chown あなたのログインID /usr/local/avr

Arduino IDEを /usr/local/avr/arduino-ideに展開.

からdownloadして ~/SRC に置いてください。

独自の場所に展開。

cd /usr/local/avr
tar xvf ~/SRC/arduino-1.6.7-linux32.tar
mv arduino-1.6.7 arduino-ide

独自の場所にPATHを通すため、~/.bash_profileに以下を追加

PATH=$PATH:/usr/local/avr/bin:/usr/local/avr/arduino-ide

CentOS5からログアウトしてログインするとPATHが有効になります。

3.gccのコンパイル

参考: http://flakrat.blogspot.jp/2013/06/building-gcc-481-on-centos-59.html

Building GCC 4.8.1 on CentOS 5.9

https://ftp.gnu.org/gnu/
から以下のファイルをdownload
binutils-2.26.tar.gz
gcc-4.8.5.tar.gz

http://gcc.gnu.org/install/prerequisites.html
を参考にして以下のファイルをdownload
gmp-5.1.3.tar.bz2
mpfr-3.1.3.tar.gz
mpc-1.0.3.tar.gz
isl-0.14.tar.bz2 (補足: 0.15はgcc-4.8.5で不可)

上記のファイルを ~/SRC に保存して下さい。

続いてコンパイル&インストール。

cd /var/tmp
bzip2 -dc ~/SRC/gmp-5.1.3.tar.bz2 | tar xvf -
cd gmp-5.1.3/
./configure --prefix=/usr/local/avr
make
make check
make install
cd /var/tmp
gtar xvfz ~/SRC/mpfr-3.1.3.tar.gz
cd mpfr-3.1.3
./configure --prefix=/usr/local/avr --with-gmp=/usr/local/avr
make
make check
make install
cd /var/tmp
gtar xvfz ~/SRC/mpc-1.0.3.tar.gz
cd mpc-1.0.3/
./configure --prefix=/usr/local/avr --with-gmp=/usr/local/avr --with-mpfr=/usr/local/avr
make
make check
make install
cd /var/tmp
tar xvfj ~/SRC/isl-0.14.tar.bz2
cd isl-0.14
./configure --prefix=/usr/local/avr --with-gmp-prefix=/usr/local/avr
make
make check
make install
cd /var/tmp
tar xvfz ~/SRC/gcc-4.8.5.tar.gz
cd gcc-4.8.5/
mkdir AVR
cd AVR
export LD_RUN_PATH=/usr/local/avr/lib
../configure --prefix=/usr/local/avr --target=avr \
 --enable-languages="c,c++" --with-gmp=/usr/local/avr \
 --with-mpfr=/usr/local/avr --with-isl=/usr/local/avr \
  --enable-multilib --disable-nls

make
make install
unset LD_RUN_PATH

上記でArduino用のgccのコンパイルは完了です。

4.Arduino用のライブラリのコンパイル

AVR Libc Home Page

上記より
avr-libc-1.8.1.tar.bz2
をダウンロードしてコンパイル&インストール。

cd /var/tmp
tar xvfj ~/SRC/avr-libc-1.8.1.tar.bz2
cd avr-libc-1.8.1/
./configure --prefix=/usr/local/avr --host=avr --target=avr
make
make install

5.ctagのコンパイル

5.8-arduino6: c++: Properly parse C++11 override and final members

上記から「Source code (tar.gz)」 をクリックして、ctag-5.8-arduini6.tar.gzという名前で保存して下さい。そしてコンパイル&インストール。

cd /var/tmp
tar xvfz ~/SRC/ctag-5.8-arduini6.tar.gz
cd  ctags-5.8-arduino6/
 ./configure --prefix=/usr/local/avr
make
make install

6.avrdudeのコンパイル

AVRDUDE - AVR Downloader/UploaDEr

最新は6.2ですが、動きませんでした。6.1を採用しました。ファイルavrdude-6.1.tar.gzをダウンロードして下さい。

ちなみに6.2だと以下のようにArduinoに書き込み時にエラーになりました。

-Arduino UNOに書き込んだ時のエラー
avrdude: Cannot get serial port settings. ioctl returned -1
avrdude: ser_open(): can't set attributes for device "/dev/ttyACM0": Invalid argument

-Arduino Duemilanoveに書き込んだ時のエラー
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00

そのため6.1を採用しましたが、6.1もそのままではコンパイルできません。

cd /var/tmp
tar xvfz ~/SRC/avrdude-6.1.tar.gz
cd avrdude-6.1/
./configure --prefix=/usr/local/avr

(configure途中こんな感じのエラーが多数)
configure: WARNING: pthread.h: accepted by the compiler, rejected by the preprocessor!
configure: WARNING: pthread.h: proceeding with the compiler's result

(configureの最終結果)

DON'T HAVE libelf
DO HAVE    libusb
DON'T HAVE libusb_1_0
DON'T HAVE libftdi1
DON'T HAVE libftdi
DON'T HAVE libhid
DO HAVE    pthread
DISABLED   doc
ENABLED    parport
DISABLED   linuxgpio

おそらくconfigureのライブラリ検出に問題があると思います。あと、最終結果の部分が異なる場合は私の環境とインストールされているライブラリなどに差異があると思いますので以降の作業でうまくいかない場合はライブラリなど追加して下さい。(詳細は調べてません。)

続いてコンパイルすると

make
(省略)
gcc -DHAVE_CONFIG_H -I.  -DCONFIG_DIR=\"/usr/local/avr/etc\"  -Wall -Wno-pointer-sign -g -O2 -MT libavrdude_a-flip1.o -MD -MP -MF .deps/libavrdude_a-flip1.Tpo -c -o libavrd\
ude_a-flip1.o `test -f 'flip1.c' || echo './'`flip1.c
flip1.c:171: error: expected declaration specifiers or ‘...’ before ‘uint32_t’
flip1.c:173: error: expected declaration specifiers or ‘...’ before ‘uint32_t’
(省略)

上記エラーが出てとまります。これはuint32_tが定義されてないからです。下記の修正を行ってください。

cp ac_cfg.h ac_cfg.h.ORG
vi ac_cfg.h
diff    -u  ac_cfg.h.ORG    ac_cfg.h
--- ac_cfg.h.ORG    2016-02-03  13:27:18.000000000  +0900
+++ ac_cfg.h    2016-02-03  13:27:35.000000000  +0900
@@  -12,6   +12,7   @@

/*  Define  to  1   if  you have    the <inttypes.h>    header  file.   */
/*  #undef  HAVE_INTTYPES_H */
+#define    HAVE_INTTYPES_H 1

/*  Define  if  ELF support is  enabled via libelf  */
/*  #undef  HAVE_LIBELF */

そして再コンパイルとインストール。

make    clean
make
make install

以上で必要なライブラリおよびツールのコンパイルは完了です。

7.Arduino IDEの環境の書き換え。
Arudino IDEの環境設定ファイルを書き換えて、新たにコンパイルしたライブラリおよびツールにPATHを通して下さい。

cd /usr/local/avr/arduino-ide/
cp -p hardware/arduino/avr/platform.txt hardware/arduino/avr/platform.txt.ORG
vi hardware/arduino/avr/platform.txt
diff  hardware/arduino/avr/platform.txt.ORG hardware/arduino/avr/platform.txt
------------
21c21
< compiler.path={runtime.tools.avr-gcc.path}/bin/
---
> compiler.path=/usr/local/avr/bin/
94c94
< tools.avrdude.path={runtime.tools.avrdude.path}
---
> tools.avrdude.path=/usr/local/avr
------------

cp -p hardware/platform.txt  hardware/platform.txt.ORG
vi hardware/platform.txt

diff  hardware/platform.txt.ORG   hardware/platform.txt
3c3
< tools.ctags.path={runtime.tools.ctags.path}
---
> tools.ctags.path=/usr/local/avr/bin

8.おわりに
以上で設定は終わりです。

作業用に/var/tmpを使ってますので、展開したソースコードなどは消しておいてください。

軽く試した感じでは特に問題なくCentOS5/32itで動作するようになりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0