QEMU i.MX6 (Sabre Lite) で TOPPERS/FMP を動かす

QEMU の開発リポジトリでは i.MX6 のエミュレーションがマージされていて、以外にも(?)サクッと動いたので、その手順を記録しておく。 ゲストはTOPPERS/FMPカーネル。 ホスト環境 Ubuntu 14.04 QEMU ビルド % cd /tmp % sudo apt-get build-dep qemu % git c…

ZYNQ に GPIO 回路を接続し Linux 上で割込みを受け付けてみる(後編)

前編で作成した回路を確認するためのソフトウェア環境(Linux)を作成する。 尚、今回はVivado に含まれる hsi (Hardware Software Interface)という CUI ツールを使用し、一環してコマンドラインによる手順をとってみた。 準備 確認した環境は Ubuntu の 64 b…

ZYNQ に GPIO 回路を接続し Linux 上で割込みを受け付けてみる(前編)

最近、ZYNQ 搭載の評価ボードである ZYBO を購入し、遊んでいる。 http://www.digilentinc.com/Products/Detail.cfm?Prod=ZYBO FPGA の評価ボードに初めて触れるため色々と試行錯誤があるが、ZYNQと、その開発ツールである Vivado に関する情報がWEB 上に多…

Linux カーネル の /dev/random について

UNIX 系 OS では、疑似乱数を生成するためのデバイスとして、 /dev/random が提供されている。 /dev/random から生成される疑似乱数の元ネタは予測不可能な値である必要がある。 ハードウェアによる疑似乱数生成器が存在しない場合、ソフトウェアで何とかし…

SystemTap メモ

今日、初めて SystemTap を触ってみて感動したためメモを残す。 SystemTap の概要は下記のページで掴んだ Linux のイントロスペクションと SystemTap 手元の Ubuntu 14.04 環境での下準備 % codename=$(lsb_release -c | awk '{print [}') % sudo tee /etc/a…

LTP (Linux Test Project)

最近、LTP というプロジェクトを知りました。https://github.com/linux-test-project/ltpLTP は、Linux カーネルにおけるシステムコール等の各種インターフェイス用テストプログラム/スクリプト郡です。このプロジェクトを知ったきっかけは、process_vm_rea…

意訳 - Linux ate my RAM!

Linux に触り始めのころに陥りがち話を、以下のサイトが軽快に解説しているので意訳してみた。 Linux ate my RAM! (尚、連絡先が不明で作者さんに未承諾) Linux がメモリを食い尽くしてしまう! 落ち着け!メモリは問題ない! なんでさ? Linux は未使用のメ…

QEMU に LPC1768 を追加してみた

NXP の Cortex-M3 搭載マイコンである、LPC1768 のエミュレーションを QEMU に追加してみました。ゲストバイナリとして、TOPPERS ASP for LPC1768 のサンプルプログラム(sample1)が動作することを目標にしており、LPC1768 の周辺デバイスとしては、現状、シ…

QEMU に Armadillo-800 EVA を追加してみた

アットマークテクノさんの新しいArmadilloである Armadillo-800 EVAのエミュレーションを QEMU に追加してみました。 但し、扱えるデバイスはシリアルとタイマのみで Linux カーネルが起動する程度となっています。 また、動作確認した環境は、Debian 6.0、U…

Cortex-M3 まとめ

少し前にCortex-M3のエミュレータを作った際にメモしておいたことを以下にまとめてみる。 コードアドレスのLSBについて 例外ベクタのLSBは例外が Thumb で実行されるかどうかを示すため、例外ベクタのLSBは1とする必要がある PCを変更するときは、上記の理由…

バイナリのロード

前回のエントリでプロセスを起動できるようになりました。 が、その動作確認には、Kernel内部のローダに対して、Kernel内部に定義したテスト関数のエントリを指定しているだけでした。 次のステップとしてはサーバプロセスの起動になりますが、そのためにはK…

Kernel完了

Kernelディレクトリ以下の移植が一通り完了しました。 変更を加えた箇所を清書してないのでソースが汚いですが、区切りがいいのでまとめたいと思います(リビジョン7)。 前回から今回の更新にかけて行った事は以下になります: これまで一部無効にしていた箇…

C/C++コメント抜き出し

C/C++のソースファイルからコメントアウトを除去するとか、xxコマンド(or スクリプト)ならone lineでできるよ、yyエディタならzz操作でできるよ、とかありそうですが、昔お世話になったlexで。 せっかくなので、メモしておきます。 %{ #include <stdio.h> static int </stdio.h>…

割り込み処理〜コンテキストスイッチ

かなり簡単な方法ですが、コンテキストスイッチに成功しました。(リビジョン6) 深い部分に手を入れたため、知識不足による大いなる勘違いや、確認方法の間違いなどで根本的におかしいかもしれません…。 今回移植したモジュールは、 KObject Process Schedule…

ページング開始

startKernel関数のページング開始処理(PageManager::setup)まで移植が進みました(リビジョン5)。 新たに移植したモジュールは、 IDManager PageManager Segment Messenger です。 Paging開始処理に重点をおいたために、一部不完全で以下のようになっています…

割り込みコントローラ初期化

割り込みコントローラ初期化(pic_init)とインターバルタイマ設定(10ms)の移植が完了しました(リビジョン4)。 ただし、割り込みハンドラの移植が済んでいないため、タイマとしては機能しません(テストコード上で動作確認)。 メモ セグメント機構はx86固有でAR…

MMUオン

とりあえずですが、MMUを有効にしてみました(リビジョン3)。 変換を行ったのは以下のページ(kernel領域)で、それ以外のページはストレートにマッピングしました。 マッピングサイズ セクション(1MB) 仮想アドレス 物理アドレス 0x30000000(SDRAM) 変換テーブ…

Monarm

MonaOSをARM上に移植してみます。 同OSはx86べったりだと思いますが、なるべくオリジナルの設計を崩さないように考慮したいと思います。環境等はARMの擬似環境構築時のものを使用します。 MonaOSは 0.3.0alpha9 です。 とりあえずKernel開始(cstart関数)に到…

ゴリ押しでgccにてMakeを通す

id:higepon氏が発足し今尚開発が行われている、自作OS界隈では云わずと知れたMonaOS - Free Operating Systemですが、そのLinux上におけるtoolchainにはMINGWが使用されています。 そこで、GNU toolchainによってMakeを無理やり通してみた結果、何とか起動し…

超初歩的なmakeまとめ

これまでGNU環境で、プログラムを作成するに当たってMakefileが必要になったとき、公開されている既存のものを参考にして、必要な部分のみの修正で事が足りていました。 しかし、1からMakefileを作成するとなると、やはりその基本を抑えておく必要があります…

割り込みを体験する #3(完)

ARM

これまでで当初の目標であった割り込み確認のための処理は全て取り上げました。 今回は、動作確認まで行いたいと思います。

割り込みを体験する #1

ARM

前回のかなり質素なプログラムから少しステップアップを図るべく、今回は、割り込みを確認するプログラムを作成してみます。割り込み処理は、組込みソフト開発の特徴を挙げる際、他の分野のソフトウェア開発と異なる点としてよく引き合いに出されると思いま…

割り込みを体験する #2

ARM

1つ前の記事では、タイマを使用しての割り込みのための事前処理、及び、割り込み処理ルーチンに関して取り上げました。今回は、CPUリセットから初期化関数の実行と割り込みベクタから割り込み処理ルーチンまでに関して触れたいきたいと思います。

ARMはじめました

ARM

QEMUのARMであそぼうと思い、1から環境を構築すべく参考サイトを探していると、 BishopエミュレータBeta2リリースという、何ともうってつけの記事を発見したので、参考にさせていただきました。 Goal あくまでもARMであそぶ事が目的なので、自前のバイナリが…