久々に確認したらllvmがバージョン 7になっていた。
手持ちのARM clang クロスコンパイラはバージョン3.8ベース。
大分最新から古くなっているので再度作成することにする。
■作成対象
自作OSのビルドが目的なので
target-triple が arm-none-eabi のbaremetal ARMクロスコンパイラ
■インストール先
/opt/arm-none-eabi-clang
■ソースコード一式展開
Getting startedに従ってllvm本体とclang, lldそれぞれのソースコードを展開する。
libcxxはOSのライブラリ依存だが、独自OSにはそれがまだ無いのでこの時点では導入しない。
compiler-rtはLLVM/Clangのビルドとは別に独立して行うのでllvmソースツリー内に展開しない。
■ビルド
(clang+llvm)
cmake
<llvm-7.0.0.src path> -DCMAKE_CROSSCOMPILING=True
-DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD=ARM
-DCMAKE_INSTALL_PREFIX=/opt/arm-none-eabi-clang -DLLVM_TARGET_ARCH=ARM
-DLLVM_DEFAULT_TARGET_TRIPLE=arm-none-eabi -DCLANG_DEFAULT_LINKER=lld
-DCLANG_DEFAULT_RTLIB=compiler-rt
-DDEFAULT_SYSROOT=/opt/arm-none-eabi-clang
Thieves of BeagleBoard
BeagleBoard, BeagleBoneに自作OSを組み込むための実装実験記録
2018年9月20日木曜日
2018年3月27日火曜日
Zynqberry FPGA開発
開発環境構築からの続き
■参考サイト
ZynqBerryチュートリアル
■プロジェクトの作成
リファレンスデザインソースに生成されたvivado_create_project_guimode.cmdを実行する。いろいろとログが出力された後に下記のVivado開発環境が立ち上がる。
■IP編集
左メニューの[Flow Navigator]-[IP INTEGRATOR]-[Open Block Design]を選択する。
下記のように初期設定のブロック図が表示される。
自作IPの作成方針として理解したのは2通り。1つはAXI4対応IPとする方法、もう1つは汎用IPとして作成しAXI4-GPIOと接続する方法。
いずれにしてもAXI4と接続しないとARMのアドレス空間経由で操作できない。
①AXI4対応IP作成方法
上部メニューの[Tools]-[Create And Package New IP]を選択する。
下記ダイアログにおいて「Create a new AXI4 peripheral」を選択しNext。
Peripheral Detail画面が表示されるのでIPの名前や保存場所を指定する。
別ウィンドウでIPのサブプロジェクトが開けば成功
成功するとAXI I/Fドライバのひな型とC言語のドライバスタブが生成される。
Sourcesウィンドウの[Design Sources]-[IP名]を選択するとVHDLのコードが生成されているのがわかる。
エディタで開いて最下部に「Add user logic here」と記載されているところに自分のロジックを組み込めばOK。
②自作汎用IPの組み込み
[PROJECT MANAGER]-[Add Sources]し、ダイアログから[Add or create design sources]を選択する。
下部の[Create File]ボタンを押して作成するHDLソースファイルを指定する。
File TypeにHDLの種類(VHDL, Verilog, SystemVerilogなど)、File nameにソースファイル名を指定する。
次の画面で入出力ポートを設定すると自動でソースファイルのひな型が生成される。
■プロジェクト設定
自作IP毎のサブプロジェクト作成について
デフォルトでは編集時にサブプロジェクトを作成し、編集後に自動で削除されるようになっている。
毎回サブプロジェクトを作成、削除するのが手間であれば自動削除しないように設定できる。
左メニュー[Flow Navigator]-[PROJECT MANAGER]-[Setting]から[Project Setting]-[IP]-[Packager]を選択する。
設定画面の[Delete project after packaging]のチェックを外すと自動削除を無効にできる。
■参考サイト
ZynqBerryチュートリアル
■プロジェクトの作成
リファレンスデザインソースに生成されたvivado_create_project_guimode.cmdを実行する。いろいろとログが出力された後に下記のVivado開発環境が立ち上がる。
■IP編集
左メニューの[Flow Navigator]-[IP INTEGRATOR]-[Open Block Design]を選択する。
下記のように初期設定のブロック図が表示される。
自作IPの作成方針として理解したのは2通り。1つはAXI4対応IPとする方法、もう1つは汎用IPとして作成しAXI4-GPIOと接続する方法。
いずれにしてもAXI4と接続しないとARMのアドレス空間経由で操作できない。
①AXI4対応IP作成方法
上部メニューの[Tools]-[Create And Package New IP]を選択する。
下記ダイアログにおいて「Create a new AXI4 peripheral」を選択しNext。
Peripheral Detail画面が表示されるのでIPの名前や保存場所を指定する。
別ウィンドウでIPのサブプロジェクトが開けば成功
成功するとAXI I/Fドライバのひな型とC言語のドライバスタブが生成される。
Sourcesウィンドウの[Design Sources]-[IP名]を選択するとVHDLのコードが生成されているのがわかる。
エディタで開いて最下部に「Add user logic here」と記載されているところに自分のロジックを組み込めばOK。
②自作汎用IPの組み込み
[PROJECT MANAGER]-[Add Sources]し、ダイアログから[Add or create design sources]を選択する。
下部の[Create File]ボタンを押して作成するHDLソースファイルを指定する。
File TypeにHDLの種類(VHDL, Verilog, SystemVerilogなど)、File nameにソースファイル名を指定する。
次の画面で入出力ポートを設定すると自動でソースファイルのひな型が生成される。
■プロジェクト設定
自作IP毎のサブプロジェクト作成について
デフォルトでは編集時にサブプロジェクトを作成し、編集後に自動で削除されるようになっている。
毎回サブプロジェクトを作成、削除するのが手間であれば自動削除しないように設定できる。
左メニュー[Flow Navigator]-[PROJECT MANAGER]-[Setting]から[Project Setting]-[IP]-[Packager]を選択する。
設定画面の[Delete project after packaging]のチェックを外すと自動削除を無効にできる。
2018年3月19日月曜日
Zynqberry FPGA開発環境構築
■手順概要
■リファレンスデザインのダウンロード
Trenz electronic Zynqberryダウンロードサイト
ここからリファレンスデザインをダウンロードする
2018/3時点で最新バージョンは2017.4
te0726-test_board-vivado_2017.4-build_06_20180216205357.zip
これを適当なフォルダに展開する。
空白を含まないフォルダパスが望ましい。
■Xilinx Vivadoのインストール
リファレンスデザインの対象バージョンが2017.4なのでVivadoも同じバージョンをダウンロード、インストールする。
バージョンが合っていないと論理合成できないことがある
またインストールするフォルダはデフォルトのC:\Xilinxが望ましい。
リファレンスデザインのプロジェクト作成batファイルがC:\Xilinxにインストールされているのを前提にしているため
■リファレンスデザインの展開
ダウンロードしたリファレンスデザインを解凍すると直下に_create_win_setup.cmdというスクリプトがある。
これをコマンドプロンプトから実行
-------------------------TE Reference Design---------------------------
--------------------------------------------------------------------
-- (c) Go to CMD-File Generation (Manual setup)
-- (d) Go to Documentation (Web Documentation)
-- (x) Exit Batch (nothing is done!)
-- (0) Create minimum setup of CMD-Files and exit Batch
-- (1) Create maximum setup of CMD-Files and exit Batch
----
Select (ex.:'0' for min setup):
このような選択が表示されるので1を選択する。
するとプロジェクト作成に必要なスクリプト群が生成される。
■プロジェクト対象ボードの選択
生成されたスクリプト群にあるdesign_basic_setting.cmdを編集する。
(編集箇所)
@set PARTNUMBER=LAST_ID
LAST_IDを手持ちのボードに合わせる。選択できるボードの種類はboard_filesディレクトリのTE0726_board_files.csvに記載されている。
ここでは手元にあるte0726-03mを選択しておく。
LAST_IDのままにしておくと自動的にte0726-03-07s-1cが選択されたことになる。
@set SWAPP=NA
NAを作成するプロジェクト名に変える
■プロジェクトの作成
生成されたスクリプト群の中からvivado_create_project_guimode.cmdを実行する。
するとzynqberryのハード設定で初期化された状態でVivadoアプリケーションが立ち上がる。
立ち上がったらメニューのFile->Save Project Asで好きな場所に保存する。
以降はこのプロジェクトを編集して回路設計と合成を行う
- リファレンスデザインのダウンロード
- Xilinx Vivadoのインストール
- プロジェクトの作成
■リファレンスデザインのダウンロード
Trenz electronic Zynqberryダウンロードサイト
ここからリファレンスデザインをダウンロードする
2018/3時点で最新バージョンは2017.4
te0726-test_board-vivado_2017.4-build_06_20180216205357.zip
これを適当なフォルダに展開する。
空白を含まないフォルダパスが望ましい。
■Xilinx Vivadoのインストール
リファレンスデザインの対象バージョンが2017.4なのでVivadoも同じバージョンをダウンロード、インストールする。
バージョンが合っていないと論理合成できないことがある
またインストールするフォルダはデフォルトのC:\Xilinxが望ましい。
リファレンスデザインのプロジェクト作成batファイルがC:\Xilinxにインストールされているのを前提にしているため
■リファレンスデザインの展開
ダウンロードしたリファレンスデザインを解凍すると直下に_create_win_setup.cmdというスクリプトがある。
これをコマンドプロンプトから実行
-------------------------TE Reference Design---------------------------
--------------------------------------------------------------------
-- (c) Go to CMD-File Generation (Manual setup)
-- (d) Go to Documentation (Web Documentation)
-- (x) Exit Batch (nothing is done!)
-- (0) Create minimum setup of CMD-Files and exit Batch
-- (1) Create maximum setup of CMD-Files and exit Batch
----
Select (ex.:'0' for min setup):
このような選択が表示されるので1を選択する。
するとプロジェクト作成に必要なスクリプト群が生成される。
■プロジェクト対象ボードの選択
生成されたスクリプト群にあるdesign_basic_setting.cmdを編集する。
(編集箇所)
@set PARTNUMBER=LAST_ID
LAST_IDを手持ちのボードに合わせる。選択できるボードの種類はboard_filesディレクトリのTE0726_board_files.csvに記載されている。
ここでは手元にあるte0726-03mを選択しておく。
LAST_IDのままにしておくと自動的にte0726-03-07s-1cが選択されたことになる。
@set SWAPP=NA
NAを作成するプロジェクト名に変える
■プロジェクトの作成
生成されたスクリプト群の中からvivado_create_project_guimode.cmdを実行する。
するとzynqberryのハード設定で初期化された状態でVivadoアプリケーションが立ち上がる。
立ち上がったらメニューのFile->Save Project Asで好きな場所に保存する。
以降はこのプロジェクトを編集して回路設計と合成を行う
2017年1月1日日曜日
Mackbook Pro(Late 2016, macOS Sierra 10.12.2)でOpenOCD
新しく今年発売のMacbook Proを購入したのでBeagleBoneをOpenOCDでデバッグする環境を構築
■必要なソフトのインストール
・Xcode, gcc command line tool
AppStore経由でXcodeのインストール
command line toolはXcodeのメニューからインストール
・Homebrew
http://brew.sh/index_ja.html
上記サイトを見ながらhomebrewをインストールする
・OpenOCD
ターミナルから brew install openocd
で依存関係まで含めてインストールされる
■Kernel Extension設定変更
BeagleBone搭載のデバッガはTI XDS100v2
これはMacに接続するとUSBデバイス FT2232(vendor id: 0x403, product id: 0x6010)と認識される
macOS SierraにはFTDIのドライバが標準で入っているらしく接続すると以下4つのTTYデバイスが/dev に作成される
cu.usbserial-TIWD9YJWA
cu.usbserial-TIWD9YJWB
tty.usbserial-TIWD9YJWA
tty.usbserial-TIWD9YJWB
ただ、この状態だとOpenOCDが接続できない。
OpenOCDはlibftdi->libusb経由でUSB interface0のXDS100v2に接続しようとするが既にTIWD9YJWAというTTYデバイスとして使用してしまっているからである。
そこでmacOS Sierraの標準FTDIドライバがinterface0にドライバを適用しないようにする
/System/Library/Extensions/AppleUSBFTDI.kext/Contents/Info.plist の以下の部分を削除する
削除する前に一応 cp Info.plist Info.plist.org とでもしてバックアップを取っておくと良い
ちなみに/System/以下のファイルはSIPを無効にしないとchmodで書き込み権限を付与しても編集できない。
SIPを無効にするにはcommand+Rを押しながら起動または再起動してリカバリーモードから行う
リカバリーモードで起動したらメニューから[ユティリティ]-[ターミナル]を選択し、ターミナルからcsruti disableとする
Info.plist の編集が終わったら再びリカバリーモードから csrutil enableとして保護機能を有効化するのを忘れずに。
■OpenOCD起動
AppleUSBFTDIのInfo.plistを編集した後に再起動するか、モジュールのunload, loadをするとinterface0のTIWD9YJWAが作成されなくなる。
この状態でOpenOCDが接続可能となる
openocd -f board/ti_beaglebone.cfg
で接続することができる。さらに
screen /dev/tty.usbserial-TIWD9YJWB 115200
とすることでinterface1はシリアルUARTでデバイスと通信が可能である。
■必要なソフトのインストール
・Xcode, gcc command line tool
AppStore経由でXcodeのインストール
command line toolはXcodeのメニューからインストール
・Homebrew
http://brew.sh/index_ja.html
上記サイトを見ながらhomebrewをインストールする
・OpenOCD
ターミナルから brew install openocd
で依存関係まで含めてインストールされる
■Kernel Extension設定変更
BeagleBone搭載のデバッガはTI XDS100v2
これはMacに接続するとUSBデバイス FT2232(vendor id: 0x403, product id: 0x6010)と認識される
macOS SierraにはFTDIのドライバが標準で入っているらしく接続すると以下4つのTTYデバイスが/dev に作成される
cu.usbserial-TIWD9YJWA
cu.usbserial-TIWD9YJWB
tty.usbserial-TIWD9YJWA
tty.usbserial-TIWD9YJWB
ただ、この状態だとOpenOCDが接続できない。
OpenOCDはlibftdi->libusb経由でUSB interface0のXDS100v2に接続しようとするが既にTIWD9YJWAというTTYデバイスとして使用してしまっているからである。
そこでmacOS Sierraの標準FTDIドライバがinterface0にドライバを適用しないようにする
/System/Library/Extensions/AppleUSBFTDI.kext/Contents/Info.plist の以下の部分を削除する
<key>AppleUSBEFTDI-6010-0</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.driver.AppleUSBFTDI</string>
<key>IOClass</key>
<string>AppleUSBFTDI</string>
<key>IOProviderClass</key>
<string>IOUSBHostInterface</string>
<key>InputBuffers</key>
<integer>8</integer>
<key>OutputBuffers</key>
<integer>16</integer>
<key>bConfigurationValue</key>
<integer>1</integer>
<key>bInterfaceNumber</key>
<integer>0</integer>
<key>idProduct</key>
<integer>24592</integer>
<key>idVendor</key>
<integer>1027</integer>
</dict>
削除する前に一応 cp Info.plist Info.plist.org とでもしてバックアップを取っておくと良い
ちなみに/System/以下のファイルはSIPを無効にしないとchmodで書き込み権限を付与しても編集できない。
SIPを無効にするにはcommand+Rを押しながら起動または再起動してリカバリーモードから行う
リカバリーモードで起動したらメニューから[ユティリティ]-[ターミナル]を選択し、ターミナルからcsruti disableとする
Info.plist の編集が終わったら再びリカバリーモードから csrutil enableとして保護機能を有効化するのを忘れずに。
■OpenOCD起動
AppleUSBFTDIのInfo.plistを編集した後に再起動するか、モジュールのunload, loadをするとinterface0のTIWD9YJWAが作成されなくなる。
この状態でOpenOCDが接続可能となる
openocd -f board/ti_beaglebone.cfg
で接続することができる。さらに
screen /dev/tty.usbserial-TIWD9YJWB 115200
とすることでinterface1はシリアルUARTでデバイスと通信が可能である。
登録:
投稿 (Atom)