aslog

電子工作からAndroidまで様々なことを試したときの記録

Ubuntu16.04LTS上にSTM32 開発環境構築

STM32F401 Nucleo-64ボードを購入した。

www.st.com

Linux上に開発環境を構築する。

開発環境の選択肢はいくつかあるようだが、主に以下の3つを使用する。

1. mbed Compiler

  1. すでにアカウント作成済みだったので、ログインしてWorkspace Management画面の右上からボード名のボタン(mbed LPC1768 etcと書かれている)をクリック。

  2. すると現在Addされているボード一覧とともに"Add platform"というボタンがあるのでクリック。

  3. NUCLEO-F401REを追加。

  4. New->New Programでプロジェクトを新規作成して、PlatformドロップダウンからNUCLEO-F401REを選択すると、Templateとしていくつかのサンプルコードが表示される。

  5. Templateの中から1つ選択してサンプルプログラムをCompile

  6. Nucleo F401REをUSB接続するとマスストレージとして認識されるのでコンパイルで生成されるバイナリを格納してリセットボタン押下により、プログラムが実行されることを確認。

2. SW4STM32

eclipseベースのIDE

  1. Java JRE/JDKのインストールをしておく。

  2. 以下のサイトからソフトウェアをダウンロード。要ユーザ登録 www.st.com

  3. install_sw4stm32_linux_64bits-v2.1.runを実行。

3. STM32CubeMX

CPUのピン設定、レジスタ設定などを簡易的に行うツール。こちらもJava JRE/JDKが必要。

  1. 64bit のUbuntu上で32bit executableを実行するために以下のソフトウェアのインストールが必要。 $ sudo dpkg –add-architecture i386

$ sudo apt-get update

$ sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

  1. CubeMXをインストー

$ ./SetupSTM32CubeMX-4.22.0.linux

minicomの設定

minicomでシリアル接続する時の注意について書く。

(過去にも同じ経験をしたのに、また同じことで悩んでしまったので備忘録)

 

シリアル経由でデータの受信はできるのに、キーボードから入力した文字が送信されない場合

以下を試してみる。

 

1) Ctrl-A Oからconfigurationを開いて、serial port setupを選択

2) Hardware Flow ControlがYESになっていたらNOにする

IPマスカレード

IPマスカレードについて詳しく分かっていなかったので調査


http://safe-linux.homeip.net/network/

Gateway_Server-03.html


NATではネットワーク層での送出元または

送出先IPアドレス変換のみを行う。

このとき、1つのグローバルIPで同時に

通信できるのは1つのクライアントだけ。

IPマスカレードではトランスポート層

ポート番号も動的に変換することで

1つのグローバルIPでも同時に複数の

クライアントが通信できる。

IPマスカレードというのはLinuxカーネルでの用語。

一般的にはNAT+とか呼ばれる。


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

------------------------------------------------------------------------