ジャンル別」カテゴリーアーカイブ

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カードの読み書きが、まだできてない

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 セキュリティリリース

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

自作プラグインに追加した wp-cli コマンドの出力結果を整形しよう ( WP-CLI Advent Calendar 2014 18日目 )

WP-CLIアドベントカレンダーの18日目です。
昨日は @tecking さんの「ひっくり返るくらい超絶便利な wp media regenerate」でした。
今回は前回の続きです。

前回 wp-cli 対応させる方法について説明しましたが、一点出力フォーマットについて触れていませんでした。
てことで、今回はそのへんについて

続きを読む

自作のプラグインに wp-cli コマンドを追加しよう ( WP-CLI Advent Calendar 2014 11日目 )

WP-CLIアドベントカレンダーの11日目です。
昨日は @tecking さんの「bashかわいいよbash-さくらのレンタルサーバでも『WP-CLI』の入力補完機能を」でした。
今回は、自作のプラグインに wp-cli 用のコマンドを追加する方法についてです。
最近、Theme Check プラグインを wp-cli 対応させるコードを書いてプルリクした(まだ、マージされてない)ので、それを元に解説します。
wokamoto/theme-check

実際に追加したのは theme-check.php の下3行と、wp-cli.php です。
続きを読む

Chef で wp-cli を管理するためのレシピ ( WP-CLI Advent Calendar 2014 4日目 )

WP-CLIアドベントカレンダーの4日目です。
昨日は @tecking さんの「レンタルサーバに『WP-CLI』をサクっと入れるシェルスクリプト作ってみたよ」でした。
てわけで、今回の僕の記事はインフラ自動化フレームワーク Chef用の wp-cli レシピについて解説します。
Chef ってなんなの?って人はおググりください。
要するにインフラの構成管理を自動化するためのツールです。

wp-cli のインストールは通常公式サイトにもあるように github で公開されているリポジトリから wp-cli.phar を取ってきて実行権限を与え、パスが通っているところに置いてあげます。

$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
$ chmod +x wp-cli.phar
$ sudo mv wp-cli.phar /usr/local/bin/wp

ただ、これだと wp-cli のアップデートがあった時に再度手動でダウンロードして置き換えてあげないといけません。
めんどくせーですよね。
そんなわけで Chef の登場です。この github リポジトリを clone して適切にアップデートできるようにレシピを書いてあげましょう。
続きを読む