みつきんのメモ

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

risc-v

Longan nanoをUbuntu 18.04のPlatformIOでハロワ

はじめに Lチカが動いたのでシリアルでHello worldしてみる。 このハロワは失業と関係ない 今時の人たちはHello worldを「ハロワ」と略すらしい。 当時在籍した会社が潰れてハローワークにお世話になった経験がある筆者は、このワードからは悲壮感しか無い。…

Longan nanoをUbuntu 18.04のPlatformIOでLチカ

はじめに 安価なRISC-Vボードとして国内でも比較的入手が簡単なLongan nanoを入手した。 開発環境としては当ブログでもおなじみのPlatformIOに対応している。 国内で入手が容易なせいか日本語の情報も多いが、Windows環境での動作報告記事が多いので、ここで…

ベアメタルのHiFIve1 Rev.BでHello world

はじめに 前回ベアメタルでLチカは動いたので、今度はシリアルを動かす。 ホストPCの環境はUbuntu 18.04 UARTのポート HiFive1 Rev.BをPCに接続すると/dev/ttyACM0と/dev/ttyACM1が見えるようになる。 この内/dev/ttyACM0はデバッグコンソールとして使える。…

ベアメタルでHiFIve1 Rev.Bを動かす

はじめに PlatformIOでHiFive1 Rev.Bを動かすで下記のように書いたので ベアメタルで動かしてみる。 標準のライブラリやヘッダは使っていないので、リンカスクリプトとスタートアップを書けば、 ベアメタルでもこのまま動くはず。 リンカスクリプト リンカス…

PlatformIOでHiFive1 Rev.Bをデバッグする

はじめに 前回はPlatformIOでLチカの実行までしたので、デバッグ方法調べる。 pio debug 特にplatform.iniを書き換えたりする必要もなく次のコマンドでデバッグを開始できる。 $ pio debug --interface=gdb Warning! Please install `99-platformio-udev.rul…

PlatformIOでHiFive1 Rev.Bを動かす

はじめに HiFive Rev.Bを入手したのでまずはPlatformIOでLチカする。 プロジェクトの作成 次のコマンドを実行し、PlatformIOのプロジェクトを作成する。 $ platformio init --board hifive1-revb 無印とはブートアドレスが異なるので、ボードもhifive1-revb…

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

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

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

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

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…