Raspberry Pi ターゲット依存部 for TOPPERS/FMP
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
fmp
LICENSE
README.md

README.md

Raspberry Pi ターゲット依存部 for TOPPERS/FMP

概要

Raspberry Pi ターゲット依存部は,
ARM をベースとした Raspberry Pi 2/3 システムをサポートしている.

カーネルの使用リソース

カーネルは以下のリソースを使用する.

  • RAM
    1GByte RAM にコードとデータを配置する.

  • Local Timer
    Tickタイマに用いる.

  • Core Timer
    性能評価用タイマに用いる.

  • mini UART
    コンソールの入出力に使用.

  • 割り込みコントローラ
    割り込み優先度実装に使用.
    割り込みレベルはソフトウェアで実装.

実行環境

動作確認を行った実行環境は,
Ubuntu 16.04 LTS 64bit である.

開発環境

Eclipse+OpenOCD+JTAG,arm-non-eabi-gdb
を用いて開発・デバッグを行った.

コンフィギュレータ

コンフィギュレータ は,1.9.6 を用いた.

Linux での使用にあたり,
文字コードをUTF-8に,改行コードをLFに変換した.
Boost は,1.64.0 を用いた.

コンパイラ

動作確認した GCC は,
4.9.3 20150529 (prerelease) (15:4.9.3+svn231177-1)
である.

ビルドと実行

TOPPERS/FMPカーネル 簡易版
https://www.toppers.jp/fmp-e-download.html

「Zynq7000(Xilinx社)簡易パッケージ」を取得し、
(例:fmp_zynq_gcc-20170523.zip)
本ソース差分を上書きする。

「コンフィギュレータ Release 1.9.6」を取得し、 cfg ディレクトリに配置し,ビルドしておく.

user.txtに従ってビルド環境を作成する.
<ターゲット略称> は,rp2_gcc または rp3_gcc となる.

sample の,Makefile を改変しているので,
kernel7.img が生成される.

FAT32でフォーマットしたSDカードに,
bootcode.bin, start.elf (Raspbianのfirmwareより取得) と,
下記を記載した config.txt と,
ビルドにて生成された kernel7.img の3つのファイルを入れる.

Raspbian firmware
https://github.com/raspberrypi/firmware/tree/master/boot

config.txt 内容

kernel_old=1
disable_commandline_tags=1

SDカードをRaspberry Piの本体に挿入して,電源を入れる.

シリアル接続は,Raspberry PiのGPIOピンの,
TXD・RXD・GNDのUART線をPCに接続する.
(6pin:GND・8pin:TXD・10pin:RXD)
115200 8N1である.

Sample1のシステムログの出力

通常のままビルド・実行しても何も出力されないので、
ビルド前にSample1を変更して、ログ出力を有効にすると良い。

  • syssvc/logtask.c

[変更前] logtask_main()内

syslog_msk_log(LOG_UPTO(LOG_NOTICE), LOG_UPTO(LOG_EMERG));
syslog_1(LOG_NOTICE, "System logging task is started on port %d.",

[変更後]

//syslog_msk_log(LOG_UPTO(LOG_NOTICE), LOG_UPTO(LOG_EMERG));
syslog_msk_log(LOG_UPTO(LOG_DEBUG), LOG_UPTO(LOG_DEBUG));
syslog_1(LOG_NOTICE, "System logging task is started on port %d.",
  • sample/sample1.c

[変更前] main_task()内

SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG)));
syslog(LOG_NOTICE, "Sample program starts (exinf = %d).", (int_t) exinf);

[変更後]

//SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG)));
syslog(LOG_NOTICE, "Sample program starts (exinf = %d).", (int_t) exinf);