Ubuntu16.04LTS上にSTM32 開発環境構築
STM32F401 Nucleo-64ボードを購入した。
Linux上に開発環境を構築する。
開発環境の選択肢はいくつかあるようだが、主に以下の3つを使用する。
1. mbed Compiler
すでにアカウント作成済みだったので、ログインしてWorkspace Management画面の右上からボード名のボタン(mbed LPC1768 etcと書かれている)をクリック。
すると現在Addされているボード一覧とともに"Add platform"というボタンがあるのでクリック。
NUCLEO-F401REを追加。
New->New Programでプロジェクトを新規作成して、PlatformドロップダウンからNUCLEO-F401REを選択すると、Templateとしていくつかのサンプルコードが表示される。
Templateの中から1つ選択してサンプルプログラムをCompile
Nucleo F401REをUSB接続するとマスストレージとして認識されるのでコンパイルで生成されるバイナリを格納してリセットボタン押下により、プログラムが実行されることを確認。
2. SW4STM32
以下のサイトからソフトウェアをダウンロード。要ユーザ登録 www.st.com
- install_sw4stm32_linux_64bits-v2.1.runを実行。
3. STM32CubeMX
CPUのピン設定、レジスタ設定などを簡易的に行うツール。こちらもJava JRE/JDKが必要。
$ sudo apt-get update
$ sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
- CubeMXをインストール
$ ./SetupSTM32CubeMX-4.22.0.linux
Eclipseで覚えのないエラーが大量に出力された
前回の作業時にはエラーなんて出てなかったのに。
先週末以来eclipseを立ち上げて作業を再会しようとすると大量のエラーが出力された。
Project->Cleanをすると解消した。
なんだったんだろう。。。
ARMのNEON命令
ARMのNEON命令にインタリーブのロード命令があることを知った。
早速試してみたい。
http://blogs.arm.com/software-enablement/161-coding-for-neon-part-1-load-and-stores/
ARM NEON Basic Tutorial
http://cv4mar.blogspot.jp/2011/06/arm-neon-basic-tutorials.html
minicomの設定
minicomでシリアル接続する時の注意について書く。
(過去にも同じ経験をしたのに、また同じことで悩んでしまったので備忘録)
シリアル経由でデータの受信はできるのに、キーボードから入力した文字が送信されない場合
以下を試してみる。
1) Ctrl-A Oからconfigurationを開いて、serial port setupを選択
2) Hardware Flow ControlがYESになっていたらNOにする
Androidのimgファイルの展開
boot.imgの展開
1) split_bootimgを以下から入手
$ git clone https://gist.github.com/1832541.git
2) boot.imgを展開
split_bootimg boot.img
$ boot.img-kernelとboot.img-ramdisk.gzが生成される。
自分がビルドしたカーネルとboot.img-kernelのdiffをとり、自分のビルドしたカーネルがboot.imgにまとめられていることを確認した。
system.imgの展開
1) simg2img でsystem.imgをループバックマウントで展開できる形式のimgファイルへ変換
$ simg2img system.img system.ext4.img
$ sudo mount -o loop system.ext4.img /<<Mount point>>
2) <<Mount point>>へ移動する
$ cd <<Mount point>>
Ubuntu12.04LTS(64bit版)をインストール後、カーネルが正常にロードできないときの対策
Ubuntu 12.04 LTS (64bit)をインストール終了後に再起動すると、Grubでエラーが出力されてカーネルがロードできない。
------------------------------------------------------------------------
error: file '/boot/grub/i386-pc/normal.mod' not found
grub rescue>
------------------------------------------------------------------------
以下を参考にして解決。
http://lifepluslinux.blogspot.in/2012/12/recover-grub-using-ubuntu-live-cd.html
------------------------------------------------------------------------
# 必要なファイルシステムをすべてbind mountする。
$ sudo mount /dev/sda1 /mnt
$ sudo mount --bind /proc /mnt/proc
$ sudo mount --bind /sys /mnt/sys
$ sudo mount --bind /dev /mnt/dev
$ sudo mount --bind /usr /mnt/usr
# chrootでルートディレクトリを変更
$ sudo chroot /mnt
# ブートローダをインストール
$ grub-install
# grub設定ファイルを生成(stage1, stage2)
$ update-grub or $ update-grub2