2019年01月18日

前回の記事では、Xilinx QEMU の Zynq UltraScale+ MPSoC ZCU102(ZynqMP)ターゲットの APU(AArch64 Cortex-A53 4 コア)上で Toppers fmp を動かしました。

今回は RPU(ARM Cortex-R5 2 コア)上で Toppers fmp を動かして見ます。
環境は前回の準備を前提としますが、今度は ARM のツールチェーンの準備が別途必要です。

続きを読む

2018年12月27日

以前の記事で Xilinx QEMU を Ubuntu 18.04 上でビルドしましたが、その QEMU を使って、Zynq UltraScale+ MPSoC(以後 ZynqMP) の APU パート、AArch64 (a53) 4 コアターゲットの Toppers FMP を動かして見ました。

Toppers も、QEMU と同じ Ubuntu Linux 環境でクロスビルドします。
何か所かハマったので、正解ルートだけではなく、あえてハマったポイントと回避策も記録として残しますので、少々冗長になります。

続きを読む

2018年12月14日

GNU ld には wrap という機能があります。これはリンク時に、未定義(Undefined)のシンボル foo を __wrap_foo として解決し、元のシンボルを __real_foo として解決するという機能です。これを利用すると、バイナリ提供のライブラリ関数を差し替えることが可能になります。

C での使用例はネット上にたくさん存在しますが、C++ の例がほとんど見つからなかったのでメモしておきます。

続きを読む

2018年12月04日

QEMU の Windows 版のビルド方法は、このブログでも何度も取り上げていますが、QEMU が要求する GLib ライブラリのバージョンが上がり続けているなどの理由により、正常動作する QEMU をビルドできる環境を構築し、QEMU のバージョンアップに追従し続けることが、現状かなり難しくなっています。(少なくとも現在の MSYS2 の GCC 8.2.0 環境でビルドした QEMU は正常動作しません。)

そこで本記事では、QEMU のメンテナの一人であり、長年 Windows 版を開発、バイナリの配布をし続けている Stefan Weil さんがメンテナンスしているビルド環境をお借りして、Ubuntu 18.04 上で Windows 64-bit 版 QEMU をクロスビルドする方法を解説します。

続きを読む

2018年11月08日

GCC 5 以降の C++ ライブラリ、libstdc++ はデフォルトの ABI が変更されているため、それ以前の g++ でコンパイルしたバイナリとは(デフォルトでは)リンク互換性がありません。ただし、旧 ABI もサポートしているので、Dual ABI サポートのライブラリとなっています。

これについてまとまった日本語情報が見当たらなかったのでまとめてみます。

続きを読む

2018年11月07日

LLVM/Clang/compiler-rt は 3 つがセットになって初めて動作します。LLVM/Clang はマルチアーキテクチャ(例:ARM/AArch64/X86)、マルチターゲット(例:arm-eabi、arm-linux-gnueabi、arm-linux-gnueabihf、aarch64-elf、aarch64-linux-gnu)のコード生成が可能なのですが、ライブラリの compiler-rt だけは、3 つを 1 度にビルドしようとした場合に、1 ターゲットぶんしかビルドできないという問題があります。

そこでこの記事では、先に Ubuntu Linux 上で AArch64 ターゲットのクロス LLVM/Clang コンパイラをビルドした後、それを使用して AArch64 Linux ターゲットの compiler-rt をビルドする手順を説明します。他のターゲットも同様の手順で可能と思われます。

続きを読む

2018年09月20日

タイトルが本記事の内容のほぼ全てです。自分で libgcc をビルドするという奇特(誤用)な人以外には関係無い話ですが(※)、まあこんなこともあるんだなと。

おそらく Linux (aarch64-linux-gnu) ターゲット等でも共通だと思うのですが、現象を確認したのはベアメタル (aarch64-elf) ターゲットで、GCC 5.1/6.3 です。7.2 では発生しませんでした。(4 系でも発生すると思いますが、そもそも AArch64 のサポートが 4.8 からなので、枯れてるとは言い難い 4 系の使用自体が現在では非推奨だと思います。)

続きを読む

2018年09月12日

ARM の AAPCS の仕様では、enum のサイズは可変長と固定長の 2 パターン許されています。

異なるバイナリをリンクすると当然、正常動作は期待できないため、これは重要な違いとなります。
続きを読む

2018年02月15日

Depending on the PC environment, "Application hang while the debugger startup", "LoadError" or "Rebase Error" may occur. To avoid this problem, add "-rebase ADDRESS" to the start option of PARTNER in the following steps.
  1. Start PARTNER-Jet2 Configuration (JetSet)
  2. Select a target project and move to "Startup options" tab.
  3. Add "-rebase" option to the text box on the bottom right in the Startup Options tab.
[Example]
-B01000000,32 -rebase 0x40000000
The recommended value of the address to be specified for "-rebase" option is different depending on the Windows version and type of the PARTNER Application (32-bit or 64-bit). The following table shows recommended values in the different environments.
PARTNERWin7Win8/Win10
32-bit version0x40000000 0x40000000
64-bit version0x070000000000x70000000000


2018年02月15日

使用するPCの環境によっては、『PARTNERの起動の途中でロック』したり 『LoadError』 や 『Rebase Error』 が発生する場合があります。 この現象を回避するためには、次の手順でPARTNERの起動オプションに "-rebase アドレス" を追加します。
  1. PARTNER-Jet2 環境設定を起動します。
  2. プロジェクトを選択して、[起動オプション設定]タブを開きます。
  3. [起動オプション設定]タブ内の右下のテキストボックスに -rebase オプションを追加します。
[例]
 -B01000000,32 -rebase 0x40000000
-rebase に指定するアドレスの推奨値はPARTNERの32bit版/64bit版のEXE種別とWindowsのバージョンにより以下の様になります。
PARTNERWin7Win8/Win10
32bit版EXE0x40000000 0x40000000
64bit版EXE 0x070000000000x70000000000


2018年01月30日

glibc のテストスイートを確認していた所、string/test-string.h にて以下のようなシンボルが使われていたのですが、このシンボルの出所が全くわからなくてしばらく悩んだので、その正体をメモしておきます。
extern impl_t __start_impls[], __stop_impls[];
続きを読む

2017年12月18日

QEMU の Windows 版は、標準(エラー)出力が exe のあるフォルダ内の stdout.txt/stderr.txt というファイルに出力されてしまうので、コマンドラインから使う際には不便だと長年思っていましたが、これは SDL ライブラリのバージョン 1.2 の仕様だったようです。最近の QEMU はバージョン 2.0 に対応しているので、コンソールに出力されます。MSYS2 上でビルドする際などに、SDL 1.2 と 2.0 が両方インストールされていると 1.2 が優先されてしまう場合があるので、configure 時に --with-sdlabi=2.0 を指定しておくと確実です。

2017年12月11日

Windows 10 Fall Creators Update から WSL (Windows Subsystem for Linux) が使用できるようになり、Windows で Ubuntu 等の Linux バイナリが実行できるようになり、非常に便利です。
諸事情により、MSYS2 上から WSL 内の実行ファイルを実行したい場合に、MSYS2 はコマンドライン文字列中のファイルパスを勝手に変換してしまうため、正しく wsl コマンド経由で WSL 内部のファイルにアクセスすることができなくて悩んだので、その解決策のメモです。
続きを読む

2017年03月01日

SOLID紹介記事の第二回目として、今回はSOLIDの特徴である「開発環境と実行環境一体化のメリット」と一体化により実現できた「アドレスサニタイザ」について、その機能や仕組みの解説も交えて紹介いたします。

開発環境と実行環境一体化のメリットとは?
iPhoneアプリは”Mac PCと統合開発環境であるXcode”が、Windowsアプリは”Windows PCとVisual Studio” さえあれば、ソフトのコーディング、コンパイルからデバッグまで一連の作業が行える、シンプルで応用的な開発環境になっていると思います。
一方で組込ソフト開発現場では、統合開発環境、コンパイラ、OS,デバッガといったツール類は、各々高機能化が進んでいるものの、その豊富な(複雑な!)機能を使いこなすためには単にツールを揃えただけでは不十分です。むしろ高機能になりすぎて、ツールの組み合わせに制約が生じてしまう等、シンプル化とは反対方向に進んでいるのかもしれません。

「組込開発向けでもシンプルで気の利いた開発環境が作れないか?」続きを読む

2017年02月15日

昨年に発表したソフトウェア開発プラットフォーム”SOLID”、2017年前半に提供予定で開発が進んでいます。最初に提供するものは、出来るだけ多くの皆さまに"SOLID"を体験して頂けるよう、ボードとRTOS/BSP、そして開発環境をセットにし、低価格パッケージとして用意を進めています。提供が近づいてきた"SOLID"、この KMC Staff Blogを通じて、これから順に紹介していきたいと思います。 ということで、今回はまずSOLIDというプラットフォーム全体を眺めてみることにしましょう。

SOLIDとは、
コンパイラ、デバッガを含んだIDEと、ARMで動作するRTOSベースの実行環境がセットになった新しい開発プラットフォームです。
続きを読む

記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード