みつきんのメモ

組み込みエンジニアです。Interface誌で「My オリジナルLinuxの作り方」連載中

Zigを試す

はじめに 最近のマイブーム(死語)はマイナー環境へのトライなのか、海外ではじわじわ来てそうなZigを試してみる。 インストール Ubuntuなのでsnapでインストールできる。 $ sudo snap install zig --classic --edge emacsのモード M-x package-installでzig-…

tinygoでnRF52840-DK(PCA10056)を動かす

はじめに nRF52840 Development Kitを入手したのでtinygoで動かしてみる。 tinygoのインストール Ubuntu 18.04にtinygo-0.5.0をインストールするの手順でインストール済みであることを想定。 ツールのダウンロード nrfjprogコマンドが必要なので、下記からコ…

Ubuntu 18.04にtinygo-0.5.0をインストールする

はじめに つい先日、Ubuntu 18.04でtinygoをインストールする手順を書いたが、 この短期間でLLVMが8になったようで、前回の記事の内容はほぼ使えなくなったので書き直す。 ここの手順が更新されており、 Ubuntuではビルド済みのdebパッケージが提供されてい…

NuttXでmbedTLSを動かす

はじめに NuttXでmbed TLSを動かす。 3年ほど前にMarceloさんが一度移植したらしいので、ここを参考にする。 ただし情報が古くその間にNuttXも新しくなっているのでこのままではうまく行かない。 今回使用するターゲットはSTM32F4Discovery。 NuttX まずはNu…

npm install -g mermaid-filterでエラー

はじめに pandocの環境を再構築するために、mermaid-filterをインストールしようとしたら次のエラーが出てハマった。 $ sudo npm install -g mermaid-filter /usr/local/bin/mermaid-filter -> /usr/local/lib/node_modules/mermaid-filter/index.js > puppe…

yoctoでjetson nanoを動かす

はじめに meta-tegraがjetson nanoに対応したので、yoctoで動かしてみる。 いくつか注意点 readmeに重要な注意点がいくつか書いてある。 jetpackは必要 cuda10を使用する関係でgccは7系固定 Jetson-TX1についても書いてあるけど関係ないので無視。 そして最…

TinyGoをSTM32F4Dicoveryで動かす

はじめに TinyGoの勉強を兼ねてSTM32F4Dicoveryへ移植してみる。 LチカとHelloWorldを動かせれば良いので、次のペリフェラルのみ動かす。 GPIO UART(USART2) 実際に動かしたサンプル。 examples/brinky1(Lチカ) examples/brinky2(gofuncの並列Lチカ) example…

tinygoでBluePill

はじめに tinygoを作ったので、BluePillで動かしてみる。 ここの手順を参考にする。 テストを実行 このコマンドはどこのディレクトリでも実行可能。 $ tinygo run examples/test デバイスターゲットの生成 これは最初にやっておく必要があるらしい。 $ cd $G…

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で、最終的には…