STM32F429I-Discovery です。詳細は ST Micro のページとか、ねむいさんのぶろぐとか見てください。と、これだけじゃ、あまりにアレですから、簡単に試せるネタをいくつか紹介します。
ご存知、pacman です。オリジナルはドイツ語ですが、google 英語翻訳のリンクもついているのでなんとかなります。ビルドには Windows で CooCox IDE (CoIDE) を使います。この解説も
Installation der Toolchain und erstes Projekt にあります。ツールチェイン自体は arm-noneeabi な gcc ですが、ビルドスクリプトが CoIDE 用のものなので、他の環境でビルドするには Makefile を作成するとかの手間がかかります。CoIDE では Makefile の import/export をサポートしていないため、自前で Makefile を書くことになります。
写真ではシリアル端末をつないでいますが、タッチパネルでも操作できるので必須ではありません。
こちらのサイトには、他にも多くの STM32 向けプロジェクトが紹介されています。全て CooCox IDE のプロジェクトのようでした。
このボードには MCU 内蔵のメモリの他に、64Mbit の SDRAM が搭載されているので、uClinux も楽々動きます。ビルドとプログラムの書き込みは Linux 上で記載の通りにするだけです。私は Lubuntu 14.04 を使いました。uClinux 本体のビルドの前に openocd のビルドも必要です。.bootstrap とか configure でアレがない、コレがないと文句を言われたら適当にインストールしましょう。lilbusb-1.0-0h-dev とか libhidapi-dev も要るみたいです。ツールチェインは noneeabi ではなくて uclinuxeabi な gcc を使います。リンク先の Lefinnois さんのプロジェクトは jserv さんのものからのフォークで、i2c や spi デバイスのサポートなどが追加されていて、mmc を追加のファイルシステムとして使用でき、ここに置いたユーザアプリケーションが実行できるため、フラッシュの書き換えが不要です。mmc は接続しなくても最低限、シリアル端末だけ用意すれば試すことができます。
ユーザランドのプログラムは localpgm ディレクトリにオンボード spi デバイスの ST L3GD20 ジャイロスコープ用のものがありますから、hello world とか試すには、この Makefile を流用すれば簡単です。
ひとつおまけとして、この uClinux 用の mruby を作って見ました。uClinux をビルドした Linux 機で mruby のソースコードを取得(git clone https://github.com/mruby/mruby.git)して、mruby をクロスビルドします。STM32F429I Discovery 用の記述を追加したビルドスクリプトがこれ(build_config.rb)です。 uClinux 用の gcc ツールチェインと uClinux のソースコードのパスは適当に調整してください。コンパイルオプション等には uClinux のユーザプログラム用のものを使います。これで make を実行すれば build/STM32F429I-UCLINUX ディレクトリ以下にターゲット用の mruby ができます。当初、コンパイルオプションに -D_GNU_SOURCE (-D_ISOC99_SOURCE でも可)を入れていなくて手間取りました。これがないと src/numeric.c で使用されている math ライブラリのマクロが見つからず、結果としてリンク時にエラーになります。リンカオプション -lm も付けます。
Build summary:
================================================
Config Name: STM32F429I-UCLINUX
Output Directory: build/STM32F429I-UCLINUX
Binaries: mrbc
Included Gems:
mruby-sprintf - standard Kernel#sprintf method
mruby-print - standard print/puts/p
mruby-math - standard Math module
mruby-time - standard Time class
mruby-struct - standard Struct class
mruby-enum-ext - extensional Enumerable module
mruby-string-ext - extensional String class
mruby-numeric-ext - extensional Numeric class
mruby-array-ext - extensional Array class
mruby-hash-ext - extensional Hash class
mruby-range-ext - extensional Range class
mruby-proc-ext - extensional Proc class
mruby-symbol-ext - extensional Symbol class
mruby-random - Random class
mruby-object-ext - extensional Object class
mruby-objectspace - ObjectSpace class
mruby-fiber - Fiber class
mruby-enumerator - Enumerator class
mruby-enum-lazy - Enumerable::Lazy class
mruby-toplevel-ext - extended toplevel object (main) methods
mruby-bin-mirb - mirb command
- Binaries: mirb
mruby-bin-mruby - mruby command
- Binaries: mruby
mruby-bin-strip - irep dump debug section remover command
- Binaries: mruby-strip
mruby-kernel-ext - extensional Kernel module
================================================
こんな風にできあがります(ホストのほうは省略)。libmruby.a を使って実行プログラムを作るも良し、mruby や mirb を直接叩くも良し。具体的にこれで何するとかは考えてません、スミマセン。
ども、いつもお世話になっております。
STM32F429で uclinuxを走らせようとしたのですが、
root=/dev/mmcblk0p1 で SD Cardをmountできないで、挫折しています。
kernel 起動時
root=/dev/mmcblk0p1 だけではピクリともせず
root=/dev/mmcblk0p1 rootdelay=5 でなんとか、認識しようとするも、とん挫している模様。
SD Cardを使っておられますでしょうか?
LED さん、こんにちは。SD カードは使っていますが、root デバイスにはしておらず、起動後に手動でマウントしています。
https://www.flickr.com/photos/n24bass/14019050478
私はまだ試していませんが、まずはオリジナルの fstab をいじってマウントさせるところから攻めて行くのが良いかと思います。
レスありがとうございます。
arch/arm/mach-stm32/iomux.c を見直したら
---
mmc_spi spi3.0: can't change chip-select polarity
mmc0: host does not support reading read-only switch. assuming write-enable.
mmc0: new SDHC card on SPI
mmcblk0: mmc0:0000 SU08G 7.40 GiB
mmcblk0:
p1 p2
EXT2-fs (mmcblk0p1): warning: mounting unchecked fs, running e2fsck is recommended
VFS: Mounted root (ext2 filesystem) on device 179:1.
---
なんとか、mmcblk0p1が見えました。
LED さん、うまく行って良かったですね。
すみません、私のほうはずれたコメントしているくらいで何も進んでません。