蟹さんも3.0
FreeBSDで開発していた蟹さんをCeleron Dな2005年くらいのPCにDebian 10/i386をインストールしてビルドを試してみました。Debianは最初GUI有りでインストールしてみたのですが、インストールはできましたが、重くて使い物にならず、GUI無しで再インストールしました。
まずは普通にホストでmrubyがビルドできるようにgccやruby,bisonなどのパッケージをapt-getでインストールします。あとmakeも使うのでインストールしておきます。
以前使っていたsourcefogeにあるアーカイブがダウンロードに失敗するので、githubにあるtoolchainを使うことにします。
% git clone https://github.com/frederic/rtl819x-toolchain.git
rtl819x-toolchain/toolchain/rsdk-1.5.5-5281-EB-2.6.30-0.9.30.3-110714/mips-linux/binにあるar,as,cc,ld,objcopy,objdump,ranlibをmips-付のシンボリックリンクを作ります。
% ls -l
total 9600
-rwxr-xr-x 1 hiroki hiroki 813318 Nov 21 14:32 ar
-rwxr-xr-x 1 hiroki hiroki 1222247 Nov 21 14:32 as
-rwxr-xr-x 1 hiroki hiroki 243605 Nov 21 14:32 c++
-rwxr-xr-x 1 hiroki hiroki 243605 Nov 21 14:32 g++
-rwxr-xr-x 1 hiroki hiroki 240947 Nov 21 14:32 gcc
-rwxr-xr-x 1 hiroki hiroki 1761824 Nov 21 14:32 ld
lrwxrwxrwx 1 hiroki hiroki 2 Nov 21 15:29 mips-ar -> ar
lrwxrwxrwx 1 hiroki hiroki 2 Nov 21 15:29 mips-as -> as
lrwxrwxrwx 1 hiroki hiroki 3 Nov 21 15:29 mips-cc -> gcc
lrwxrwxrwx 1 hiroki hiroki 2 Nov 24 06:48 mips-ld -> ld
lrwxrwxrwx 1 hiroki hiroki 7 Nov 24 07:01 mips-objcopy -> objcopy
lrwxrwxrwx 1 hiroki hiroki 7 Nov 24 07:00 mips-objdump -> objdump
lrwxrwxrwx 1 hiroki hiroki 6 Dec 2 09:46 mips-ranlib -> ranlib
-rwxr-xr-x 1 hiroki hiroki 798017 Nov 21 14:32 nm
-rwxr-xr-x 1 hiroki hiroki 961563 Nov 21 14:32 objcopy
-rwxr-xr-x 1 hiroki hiroki 1049819 Nov 21 14:32 objdump
-rwxr-xr-x 1 hiroki hiroki 813349 Nov 21 14:32 ranlib
lrwxrwxrwx 1 hiroki hiroki 14 Nov 21 14:32 rlxisa.bin -> rlxisa-rlx.bin
-rw-r--r-- 1 hiroki hiroki 176664 Nov 21 14:32 rlxisa-jupiter.bin
-rw-r--r-- 1 hiroki hiroki 182964 Nov 21 14:32 rlxisa-mars.bin
-rw-r--r-- 1 hiroki hiroki 161880 Nov 21 14:32 rlxisa-rlx.bin
-rw-r--r-- 1 hiroki hiroki 169272 Nov 21 14:32 rlxisa-venus.bin
-rwxr-xr-x 1 hiroki hiroki 961562 Nov 21 14:32 strip
% ./mips-cc -v
Using built-in specs.
Target: mips-linux
Configured with: RSDK Builder release 1.5
Thread model: posix
gcc version 4.4.5-1.5.5p4 (GCC)
必要なソースを用意します。
% git clone --recursive https://github.com/yamori813/rtlbm-mruby.git
% wget ftp://sourceware.org/pub/newlib/newlib-2.5.0.20171222.tar.gz
% wget http://download.savannah.nongnu.org/releases/lwip/lwip-2.1.2.zip
% cd rtlbm-mruby
% git clone https://www.bearssl.org/git/BearSSL
% tar zxf ../newlib-2.5.0.20171222.tar.gz
% tar zxf ../lwip-2.1.2.zip
まずnewlibですが、4.0も先日リリースされていましたが、とりあえず以前使っていた2.5をビルドします。
#!/bin/bash
NEWLIB=newlib-2.5.0.20171222
sed -i -e '/__deprecated__/d' ${NEWLIB}/newlib/libc/include/stdlib.h
sed -i -e '/Unable to determine/d' ${NEWLIB}/newlib/libc/include/sys/_intsup.h
TOOLPATH=$HOME/rtl819x-toolchain/toolchain/rsdk-1.5.5-5281-EB-2.6.30-0.9.30.3-110714
PATH=$PATH:${TOOLPATH}/mips-linux/bin:${TOOLPATH}/libexec/gcc/mips-linux/4.4.5-1.5.5p4
cd ${NEWLIB};./configure --target=mips;make
次はlwip 2.1.2です。以前書いたMakefileがgmakeで動かなかったので、修正しました。
#!/bin/bash
LWIP=lwip-2.1.2
rm -rf ${LWIP}/realtek
cp -r build/lwip ${LWIP}/realtek
TOOLPATH=$HOME/rtl819x-toolchain/toolchain/rsdk-1.5.5-5281-EB-2.6.30-0.9.30.3-110714
PATH=$PATH:${TOOLPATH}/mips-linux/bin:${TOOLPATH}/libexec/gcc/mips-linux/4.4.5-1.5.5p4
cd ${LWIP}/realtek;make
BearSSLをビルドします。
#!/bin/bash
rm -rf BearSSL/build
cp build/BearSSL/RTL.mk BearSSL/conf/
TOOLPATH=$HOME/rtl819x-toolchain/toolchain/rsdk-1.5.5-5281-EB-2.6.30-0.9.30.3-110714
PATH=$PATH:${TOOLPATH}/mips-linux/bin:${TOOLPATH}/libexec/gcc/mips-linux/4.4.5-1.5.5p4
cd BearSSL;make CONF=RTL
BearSSLは乱数のパッチが必要なんですが、とりあえず後回しにします。
mrubyをビルドします。
#!/bin/bash
TOOLPATH=$HOME/rtl819x-toolchain/toolchain/rsdk-1.5.5-5281-EB-2.6.30-0.9.30.3-110714
PATH=$PATH:${TOOLPATH}/mips-linux/bin:${TOOLPATH}/libexec/gcc/mips-linux/4.4.5-1.5.5p4
cd mruby;rake MRUBY_CONFIG=/home/hiroki/rtlbm-mruby/build/mruby/build_config.rb
コミットしてないですが、build_config.rbはclangになっているところをgccに代えてます。
最後にvmをビルドします。
#!/bin/bash
TOOLPATH=$HOME/rtl819x-toolchain/toolchain/rsdk-1.5.5-5281-EB-2.6.30-0.9.30.3-110714
PATH=$PATH:${TOOLPATH}/mips-linux/bin:${TOOLPATH}/libexec/gcc/mips-linux/4.4.5-1.5.5p4
make
Debianはtftpコマンドが入っていないのでインストールします。
% sudo apt-get install tftp-hpa
インターフェースに蟹さんのサブネットのIPアドレスを設定します。
% sudo ip a add 192.168.1.1/24 dev enp0s14
パーマネントに設定しておく場合にはDebian 10の場合/etc/network/interfaceに以下を追加するだけでよいようです。
iface enp0s14 inet static
address 192.168.1.1
netmask 255.255.255.0
スクリプトのmrbイメージを作ります。
% ./mkmrb.rb samples/morse_hsc.rb
リセットを押しながら蟹さんに電源を入れて、ファーム焼きこみ受付状態にします。
% ./flash.sh samples/morse_hsc.img
% ./flash.sh main.rtl
vmのmain.rtlを焼くとリブートするので、先にスクリプトのバイナリを焼いています。
チカチカしました。
最近のマシンに比べればずいぶん遅いマシンですが、フルビルドしても1時間くらいでできます。
今のところsimplehttpが使えない状態です。事情があり自宅ではないところにいるためデバッグが極めて困難な状態です。誰かデバッグ手伝ってください。(2020/12/11)直りました(2021/01/03)
Author And Source
この問題について(蟹さんも3.0), 我々は、より多くの情報をここで見つけました https://qiita.com/yamori813/items/2070538f5a95c2d31893著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .