みつきんのメモ

組み込みエンジニアです。Interface誌で「Yocto Projectではじめる 組み込みLinux開発入門」連載中

2019-01-01から1年間の記事一覧

Ubuntu 18.04でllvm-7系パッケージを削除する方法

はじめに 地味にデスクトップ環境が依存しているので引っこ抜くのが大変 削除方法 gvfs-daemonsがlibllvm7に依存しているらしいのでちょっと大変 まずは消せるだけ消す。 $ sudo apt purge -y clang-7 lldb-7 lld-7 $ sudo apt purge -y libllvm-7-ocaml-dev…

Ubuntu 18.04にtinygoをインストールする(2019/04編)(4/7追記)

はじめに Ubuntu18.04でtinygoをインストールしようとしたらハマったのでメモっておく。 基本はここの手順。 Requirement Go 1.11+ LLVM 7 (for example, from apt.llvm.org あとは、ターゲットのツールチェイン。 ARM Cortex-M AVR(Arduino) WebAssembly 詳…

Yocto gdbserverでリモートデバッグ

はじめに gdbserverによるリモートデバッグ環境を今まで真面目に作ったことがなかったので調べてみた。 詳細な手順はここで紹介されている。 ターゲットはラズベリーパイ3。 この方法は、ターゲットにインストールされている既存のアプリケーションのデバッ…

pandoc + reveal.jsの使い方

はじめに 2年ほど前にインターフェースオフ会の発表資料を作成した時にpandoc + reveal.jsを使ったが、使い方をまとめていなかったので思い出しがてらまとめる。 ただ、この時の発表では会場でノートPCが壊れて起動しないという散々な状況だったので、私とし…

GNU Global(gtags)の対応言語を増やしてみる

はじめに 最近、仕事でgoのコードを読む必要が出てきた。 コードを読む時はemacs+gtagsを使用しているが、デフォルトではgoは対応していない。 ここにPygmentsとexuberant-ctagsを使ってgtagsの対応言語を増やす方法が紹介されてたので試してみる。 作業環境…

RISC-Vのベアメタル入門(自分用) 割り込み(CLINT)編 その2

はじめに 追記しました(3/28) 題名がもうなんだかわからなくなってきたが、とりあえずCLINT編の続き。 前回、michaeljclark/riscv-probeの割り込みベクタとハンドラの部分を調査した。 実際にこの部分を動かしているサンプルであるprobe.cを実行してみたとこ…

NuttX ビルトインアプリケーションを作成する

はじめに NuttXにビルトインアプリケーションを追加する方法を調査した。 ここが日本語でよくまとまっていた。 プログラムを作成する場所 プログラムをどこに追加するかと言うのが一つ考えどころだが、apps/README.txtによると、 Use of the name ''apps/ext…

RISC-Vのベアメタル入門(自分用) 割り込み(CLINT)編

はじめに RISC-VというかFE310の割り込み周りについて勉強する。 取っ掛かりとしてはここが分かりやすかった。 割り込みの種類 RISC-V ISAではグローバル割り込み(global interrupt)とローカル割り込み(local interrupt)が定義されている。 HART(HARdware Th…

meta-raspberrypyの環境でlinux5.0のdevice-tree-overlaysがビルドできない問題の調査(3/15追記)

はじめに ただしこっちのカーネルでもoverlaysがビルドエラーを起こすので、それは調査する必要がある。 ので調査した。 ログを観察する タスクごとのログファイルはtmp/work/raspberrypi3-poky-linux-gnueabi/linux-raspberrypi/1_5.0.0+gitAUTOINC+00794df…

raspberrypi3 yoctoでLinuxカーネル5.0を試す(ラズパイカーネル編)

はじめに RPiのカーネルはこっちで管理されているが、まだ5.0-rc8なのでバニラカーネルを試すことにした。 もう-rc8が取れてたので、こっちも動かしてみる。 基本的な方針は前回と変わらずに下記のようにする。 meta-raspberrypiのカーネルとはバージョンが…

yocto SSH越しでbitbake virtual/kernel -c menuconfigが失敗する場合の対処

はじめに ubuntuを使っていて、SSH越しにbitbake virtual/kernel -c menuconfigや-c devshellをすると、次のエラーが出て失敗する事がある。 ERROR: linux-raspberrypi-1_5.0.0+gitAUTOINC+00794df915-r0 do_menuconfig: Unable to spawn terminal auto: Exe…

raspberrypi3 yoctoでLinuxカーネル5.0を試す(バニラカーネル編)

はじめに Linuxカーネル5.0がリリースされたのでmeta-raspberrypiの環境で試そうと思ったら、いろいろと罠があって4日も経ってしまった。 RPiのカーネルはこっちで管理されているが、まだ5.0-rc8なのでバニラカーネルを試すことにした。 meta-raspberrypiの…

RISC-Vのベアメタル入門(自分用) UART編

はじめに 前回動かした環境でUARTを動かしてみる。 具体的には、またdwelch67/sifive_samplesを写経する。 UARTのレジスタ構成 SiFive FE310-G000 Manual v2p3から抜粋する。 UARTレジスタ 必要なレジスタは7つ。 注意する点としては、txdataのところにこん…

RISC-Vのベアメタル入門(自分用)

はじめに PlatformIOなどを使用すれば、なんちゃってベアメタルプログラミングは簡単に始められるが、 そこに至るまでの知識が全く足りていないため少しだけ掘り下げてみる。 今回のターゲットはSiFiveのHiFive1(のエミュレータ)。 ツールチェイン HiFive1に…

RISC-V QEMU

はじめに RISC-VのQEMUを動かしてみる。 依存パッケージのインストール $ sudo apt-get install gcc libc6-dev pkg-config bridge-utils uml-utilities zlib1g-dev libglib2.0-dev autoconf automake libtool libsdl1.2-dev ビルド ここを参考にビルド $ git…

STM32F4Discovery NuttXでC++(libc++)をためす

はじめに make menuconfigで見てみると、NuttXでもlibc++やuClibc++などが使えるようになっているらしい。 ただ、ライブラリのソースはカーネルやアプリからは分離されているようで、別途取得する必要がある。 具体的なやり方はAlan C. Assisさんが紹介して…

AndroidStudioでTensorflowデモを動かす。

はじめに TensorflowのAndroidのデモを動かそうとしたところ、 いろいろハマった上にまとまった情報がなかったのでメモっておく。 ソースの取得 まず--recurse-submodules忘れた。これは完全に自分のミス。 $ git clone --recurse-submodules https://github…

Yoctoターゲットのセルフコンパイル環境でカーネルモジュールをビルド

はじめに Yoctoのセルフコンパイル環境でout-of-treeのカーネルモジュールをビルドする。 普通にビルドしようとエラーが発生するのでその回避方法をメモしておく。 hello-mod 今回はrecipe-skeleton/recipes-kernelにあるhello-modをラズベリーパイ3上でビル…

PlatformIOでSTM32F4Discoveryのプログラムを書く

はじめに 組み込み向けの開発環境を構築する手段としてPlatformIOというものがある。 PlatformIOはPythonのスクリプトで、必要に応じてクロスコンパイル用のツールチェインなどダウンロードしてくれたり、 それぞれのボード向けのスタートアップコードなんか…

raspberypi3 B+ EthernetのLEDについて

はじめに ラズベリーパイ3 Model B+ではLANケーブルを接続した時に点滅するLEDのうち、 なぜか1つしか光らないという話題になったので、これについて調べた。 EthernetのLED LANケーブルのコネクタには緑と黄色のLEDが1つずつ付いている。 ケーブルを接続す…

NuttX STM32F4Discovery+RNDISでEthernet(ついでにMQTT)

はじめに NuttXはRNDISドライバを持っている。 STM32F4DiscoveryはRNDISドライバを使用すると、USBでEthernetデバイスとして通信できるようになる。 意外なほど簡単に使用することができる。 コンフィグレーション $ tools/configure.sh -l configs/stm32f4d…

NuttX STM32F4Discovery+ENC28J60でMQTT

はじめに STM32F4DiscoveryでEthernetが使えるようになったのでMQTTを動かしてみる。 既にNuttXでMQTTを動作させた例がないかWebで調べたところ、こんなものを見つけた。 リンク先では、MQTT-Cを動かそうとしていて問題が発生したというissueで、最終的には…

NuttX STM32F4Discovery+ENC28J60でEthernet

はじめに Amazonで購入したEthernetコントローラ基板をSTM32F4Discovery + NuttXで使用できるようにする。 このコントローラ基板はENC28J60が載っている。ENC28J60はMACとPHYの機能を持っているため、ホストとなるボードはSPIで通信できればEthernetが使える…

NuttXでRAMLOG(dmesg)を使用する

はじめに NuttXではデバッグログをRAMに出力することができる。 RAMに出力されたログデータはLinuxなどでおなじみのdmesgコマンドで表示することができる。 BluePillのようなRAMの少ない環境では活用は難しそうだが、STM32F4Discoveryくらい余裕のある環境で…

NuttXをSTM32F4Discoveryで動かす(NSH編)

STM32F4Discovery + NuttXの続き。 NuttXをSTM32F4Discoveryで動かす はじめに STM32F4DiscoveryでのNSHの使用方法を紹介する。 コンフィグレーション 次のようにコンフィグレーションを実行する。 $ cd nuttx $ tools/configure.sh -l stm32f4discovery/nsh…

NuttXをSTM32F4Discoveryで動かす

はじめに これまでBluePillで遊んできたNuttXをSTM32F4Discoveryで動かす。 STM32F4DiscoveryはSTM32F407VGT6が載っている。 メモリ サイズ フラッシュ 1MiB RAM 192KiB BluePillと比較するとかなりリッチなリソースを持っている。 NuttXの作成 基本的なとこ…

sigrok PulseViewのビルド

はじめに アマゾンで買ったロジアナを使用するためにPulseViewインストールする。 このロジアナはSaleae社の製品のコピー品らしい。ソフトウェアはSaleae社のものが使用できるらしいが、それはそれで問題があるし。 環境はUbuntu 18.04。 apt Ubuntuではapt…

STM32F103 minimum(BluePill)上のNuttXをOpenOCD(とブラウザ)でデバッグ

BluePill + NuttXの続き。 NuttXをSTM32F103 minimum(BluePill)で動かす NuttXのSTM32F103 minimum(BluePill)で128Kのフラッシュを使う NuttXをSTM32F103 minimum(BluePill)で動かす(NSH編) OpenOCDでデバッグ フラッシュを128K使うために、OpenOCDを使用し…

NuttXをSTM32F103 minimum(BluePill)で動かす(NSH編)

NuttX + BluePillの続き。 NuttXをSTM32F103 minimum(BluePill)で動かす NuttXのSTM32F103 minimum(BluePill)で128Kのフラッシュを使う UARTでシェル 前回まではBluePillとPCをUSBケーブルで接続しUSB経由でシェルを使用していたが、 今回はUSB-TTL変換ケー…

NuttXのSTM32F103 minimum(BluePill)で128Kのフラッシュを使う

はじめに 前回はSTM32F103C8T6のフラッシュは64KiBだと書いた。 しかし、NuttXのconfigs/stm32f103-minimum/scripts/ld.scriptを参照すると、次のように書いてある。 * * NOTE: While the STM32F103C8T6 states that the part has 64Kb of FLASH, * all part…