2024年のGCCでH8300-elfの開発環境を整える on FreeBSD

とある件でAVRからMMCカードに書き込みしたくなったので、AmazonでマイクロSDカード用のモジュールを買ったのですが、動作確認のためにH8を使おうと思い立ったのがドツボでした。gccのビルドでハマり、gdbのビルドでハマり、まともに動くようになるまでかなり時間を使いました。無駄にした時間は帰ってきませんが、記事にして消化することにしました。

その昔(15年ぐらい前?)AKI-H8/3069FのLAN付きのものを買って持ってまして、その当時はGCC4.2とか、gdb6.8とかビルドして使ってました。H8300はまだメジャーな石で雑誌などにも色々取り上げられて需要があったようです。私の仕事でもH8Sを使ってましたし。portsにh8用のgccもあったような。野良ビルドする人は当時からあんまりいないですね。

時は過ぎ去り2024年、AVRやARM、RISCVが花盛りな今、すでにディスコンなH8ですよ。野良ビルドしたのは以下のものです。ちなみにFreeBSD-14.0R上です。

  • binutils-2.42
  • gcc-13.2.0
  • gdb-14.2
  • newlib.4.4.0-20231231

gccのビルドに必要なgmp, mpfr, mpc, texinfo, gnu makeはpkgで入れます。また、新し目のNative gccも入れといてください。私はgcc12を使いました。

すでに複数gccが入っている場合は名前でソートしたときに一番前に来るものを使ったほうが良いです。ビルドするgdbがlibstdc++.so.6を要求するのですが、それぞれのgccが自分のlibstdc++.so.6を入れてくれているので、使ったgccとリンクされるlibstdc++.so.6の組み合わせが壊れて動かない、という現象が発生します(ハマりポイント)。ld.soが共有ライブラリを探す順番に影響されるのでldconfig -r で一覧を見て、一番最初にlibstdc++.so.6を提供しているgccを使う、というのが正しいです。

binutilsのconfigureです。お作法として展開したフォルダ内にビルド用のフォルダを掘ってそこでconfigureを動かします。インストール先はhomeのdev/h8300になります。

../configure --disable-nls \
 --target=h8300-elf --prefix=$HOME/dev/h8300

次にgccのconfigure。対象の言語はCのみです。CCとCXXは自身の環境のgccを入れてください。

../configure \
 --target=h8300-elf --prefix=$HOME/dev/h8300 --with-newlib \
 --disable-nls --enable-languages=c \
 --with-gmp=/usr/local --with-mpfr=/usr/local --with-mpc=/usr/local \
 --disable-gcov --disable-bootstrap --disable-libsanitizer --disable-libssp \
 --disable-libgomp --disable-libvtv \
 CC=gcc12 CXX=g++12

次にnewlibのconfigure。ここ( https://blueeyes.sakura.ne.jp/2019/05/22/2363/ )を参考にしました。非常にためになりました。

../configure \
 --target=h8300-elf --prefix=$HOME/dev/h8300 \      
 --disable-nls --disable-werror --disable-bootstrap \
 --disable-newlib-supplied-syscalls \  
 --enable-newlib-reent-small --disable-newlib-wide-orient \
 --enable-newlib-nano-malloc --enable-lite-exit \
 --enable-newlib-global-atexit  --enable-target-optspace

次にgdbの configure。MONIX用にgdb/h8300-tdep.c内にある h8300_break_insn[] をSleep命令からTRAPA #3 { 0x57, 0x30 } に書き換えてます。

../configure --disable-nls \
 --target=h8300-elf --prefix=$HOME/dev/h8300 \
 --disable-werror --disable-bootstrap \
 CC=gcc12 CXX=g++12 

無事にgmake; gmake installが完了すると自分のhomeの下、dev/h8300/bin/h8300-elf-gccが動くと思います。あ、gdbのsimはうまく動きませんでした。

動かしてる環境ですが、MONIX ( http://kuwa.s256.xrea.com/monix/index.html )のgdb-stub(udp)でデバッグ出来てます。break張って止めるだけですが。MMCカードからの読み込み、書き込みにも成功しました。AKI-H8/3069F LAN付きは16MbitのDRAMが乗ってて、書き込み回数を気にせず Try & Errorが出来るのでお試しには重宝します。

ただ、当初の目的であるところのAVRでSDカードの読み書きが、まだできてない

Shifter Static に標準で同梱されているプラグインについて ( Shifter Advent Calendar 2020 23日目 )

Shifter Advent Calendar 2020 の23日目です。
なんか Advent Calendar しか書いてませんね。
いかんなぁ、来年は他にも何か書こうと思ったり、思わなかったりしてます。

さて Shifter Static で WordPress を起動すると、プラグインの Must-Use って所にいくつかすでにプラグインが入っていることに気づいている方もいるかと思われます。
この Must-Use というのは、/wp-content/mu-plugins/ ディレクトリ以下に入ってるプラグインは必ず有効化されるという WordPress の機能を利用しています。
詳細については Must Use Plugins を参照してください。
Shifter Static で Must Use Plugins としてインストールされているプラグインは以下の9つです。

  • EVA
  • Redis Object Cache
  • S3 Uploads
  • Shifter
  • Shifter – Incompatible Plugins
  • Shifter GitHub Plugin/Theme Installer
  • Shifter tips
  • Shifter WP Webhook
  • Shifter – Artifact Helper

これらについて解説した公式文書がなかった気がするので、解説しますね。
続きを読む

Shifter meetup とビール ( Shifter Advent Calendar 2019 21日目 )

Shifter Advent Calendar 2019 の21日目です。
昨日は、立花さんの「Shifterでなかなか実装されないアレを勝手に実装してみた」でした。
久しぶりのブログ更新ですね、なんかすでに前回投稿から2年半も経ってる
この2年間何をやってたかというと、Instagram を見てもらえばわかるんですが、だいたいビールを飲んでた気がします。
もちろん、仕事もしてましたよ。
主に AMIMOTO マネージドShifter の運用です。

さて Shifter では、昨年末からユーザーミートアップを行なっております。
東京では、Stripe さんのオフィスを借りて2ヶ月に1度くらいのペースで実施しているのですが、このときにビールを持っていくのが通例となっております。
Advent Calendar には AWS re:Invent 参加中にラスベガスのホテルでどん兵衛食べながら、Shifter ダッシュボードに組み込むための Stripe API を叩く Lambda を描いてた話でも書こうかと思ってたんですが、そういえば愛すべきビール達のフォローアップをしてなかったなーと思いまして、今回はそんな話など。
なお、アイキャッチ画像は今年私の地元で行われた初の WordCamp "WordCamp Niigata 2019" でビールスポンサーとして参加した Shifter がビールを提供していた際の写真になります。
続きを読む

WordPress サイトを CloudFront で配信すると compress オプションを設定していても圧縮転送されない…

タイトルで言い切ってますが

CloudFront の「Compress Objects Automatically」ってオプションを有効にすると、対応しているブラウザに対しては圧縮転送をしてくれるはずなんですが、オリジンサーバが WordPress の場合、これが有効になりません。
css とか js なんかの静的ファイルはちゃんと圧縮してくれてるんですが

調べたところ、CloudFront で compress オプションが有効になるには、以下の条件があるようです。

  • The file must be of a type that CloudFront compresses.
  • The file size must be between 1,000 and 10,000,000 bytes.
  • The response must include a Content-Length header so CloudFront can determine whether the size of the file is in the range that CloudFront compresses. If the Content-Length header is missing, CloudFront won't compress the file.
  • The response must not include a Content-Encoding header.

Serving Compressed Files – Amazon CloudFront

これの「The response must include a Content-Length header so CloudFront can determine」が引っかかってるんですね
続きを読む

WordPress にバックドア仕掛けられないように…

いくら気をつけていても、不幸にして WordPress にバックドアを仕掛けられることは往々にしてあるものです。
重要なのは日々のアップデートと監視なのですが、間に合わずにやられちゃってバックドア仕掛けられることもあるでしょう。
先日リリースされた WordPress 4.5.2 でも結構重めの XSS 脆弱性の報告と修正が行われましたね。
WordPress 4.5.2 セキュリティリリース

そんなわけで、ひさ~しぶりのブログはバックドア仕掛けられないようにする防衛策とソースが改変された時の対応策です。
続きを読む

New Relic で AMIMOTO を監視する ( AMIMOTO Advent Calendar 2015 23日目 )

IMG_1656AMIMOTO Advent Calendar の23日目です。
監視大好きストーカー気質な皆様であれば、おそらく知っているであろう New Relic
NewRelic ではスマートフォン用のアプリとかも提供されてるので、いつでもどこでもサーバを監視できます。安心ですね。

あと、各種グラフは簡単な設定でログインしていないユーザにも公開することが可能です。
このサイトが動いているインスタンスの CPU Usage は、以下のURLで公開してます。
CPU Usage | dogmap.jp

AMIMOTO AMI HTTP/2版のデモサイトでも公開してますので、見てみてください。
Server Overview | HTTP2 AMIMOTO Demo

今日は、この New Relic を AMIMOTO AMI にインストールする手順を紹介します。

続きを読む