2015/02/12

Zynq Linuxの使用メモリを制限する

はじめに

下記の記事で,device treeのbootargsを編集してLinuxの使用メモリを制限する方法が紹介されていました. 試してみたところKernel panicを起こしてしまいましたので,その対処方法もメモしておきます.

今やってみたいのはZYBOのVGAまたはHDMIからGUIを出力することなのですが,やり方がよくわからず困っています. もっとハードルが低いことからコツコツやった方が早いかも….

DTSのbootargsを編集する

「mem=384M」を加えて,Linuxの使用メモリを384MBに制限してみます. ZYBOはメモリを512MB搭載していますので,アドレス 0x18000000 ~ 0x1fffffff まではLinuxの管理外になるはずです.

Kernel panicが発生して起動しませんでした. わからないなりにログを眺めてみると,Kernelの読込み開始直後に落ちているようです.

Kernel panicの対処方法 / uEnv.txtの編集

原因と対処方法を調べてみると,下記Webページが引っかかりました. u-bootがdevice treeをメモリの上限アドレス付近に配置するため,Kernelの使用メモリを制限するとdevice treeが存在するアドレスを参照できない,ということでしょうか. 対処方法は,u-bootがdevice treeを配置する際の上限アドレス(fdt_high)を変更すれば良いようです.

u-bootのソースコード上では, include/configs/zynq-common.h で 0x20000000 に設定されているようです(自信はないです). ソースコードを編集してu-bootをリビルドするのは面倒なので,uEnv.txtでの設定を試してみました. 下記の1行目を追加しました.

正常に起動しました. /proc/meminfo を参照すると,使用メモリが384MB程度に制限されていることがわかります.

Ubuntu起動時の「システムプログラムの問題が見つかりました」表示を消す

はじめに

下記バージョンのUbuntuをVMware Player上で使用しているのですが,起動時に「System program problem detected」ウィンドウと「システムプログラムの問題が見つかりました」ウィンドウが表示されるようになりました. 英語と日本語,少しの時間を空けて2つとも表示されるので,とても鬱陶しいです.

OS Ubuntu 14.04 LTS 32bit

System program problem detected

システムプログラムの問題が見つかりました
対処方法

下記Webページで原因と対処方法が紹介されていました. クラッシュした際のレポートファイルが /var/crash ディレクトリに作成されるようですが,このレポートファイルの存在がUbuntu起動時のメッセージウィンドウの原因になっているようです. つまり,レポートファイルを削除してしまえばUbuntu起動時のメッセージウィンドウは表示されなくなります.

下記コマンドを実行してレポートファイルを削除すると,メッセージウィンドウが表示されなくなりました.

上記Webページでは,レポートファイルの生成や送信要求を実行している(…?)ソフトウェア,Apport自体を無効化する方法も紹介されています. 今回,私はレポートファイルの削除のみ実施しました.

2015/02/09

Xilinx SDKでDevice Treeを生成する

はじめに

FPGAの部屋を読んでいると,Xilinx SDKでDeviece Tree Source (DTS)を生成できることがわかりました. 下記の記事が参考になりましたが,開発環境が異なるほか,ファイルの取得方法が変わっていましたので,私の作業メモを残しておきます.

Xilinx Wikiの該当ページは下記のとおりです.
開発環境

DTSの生成に使用するXilinx SDK 2014.4は,Windowsにインストールしています.

OS Microsoft Windows 7 Professional x64 Service Pack 1
SDK Xilinx SDK 2014.4

ファイル取得に使用するgitクライアントやDTSからDevice Tree Blob (DTB)を生成する環境は,VMware Player上のUbuntuにインストールしています. Windowsとのファイル共有には,WinSCPを使用しています.

OS Ubuntu 14.04 LTS 32bit
Device Tree Generatorのセットアップ

Ubuntu環境でDevice Tree Generatorのgitリポジトリを取得しました. その後,ディレクトリごとWindows環境の「C:\work」にコピーしました. これにより,「C:\work\device-tree-xlnx」ができたことになります.

Vivadoでプロジェクトを開き,「File」 - 「Launch SDK」からXilinx SDKを起動しました. Xilinx SDKのツールバーから「Xilinx Tools」 - 「Repositories」をクリックし,「Preferences」ウィンドウを開きました. 「Local Repositories」に,「C:\work\device-tree-xlnx」を追加しました.


Preferences
DTSの生成

Xilinx SDKの「File」 - 「New」 - 「Board Support Package」をクリックしました. 「New Board Support Package Project」ウィンドウが開きましたので,「Board Support Package OS」を「device-tree」に変更して「Finish」しました.


Board Support Package

「Board Support Package Settings」ウィンドウが開きましたので,「bootargs」の「Value」に下記を入力しました. これは一例ですので,各自の環境に合わせる必要があります.


Board Support Package Settings

「Board Support Package Settings」ウィンドウを「OK」で閉じると,自動的に「device-tree_bsp_0」プロジェクトのビルドが開始され,DTSが生成されました.


device-tree_bsp_0
DTBの生成

「device-tree_bsp_0」ディレクトリごとUbuntu環境にコピーし,DTBを作成しました. ほとんどGUI操作だけでdevicetree.dtbが生成でき,タイプミス起因のエラーを回避できるのは良さそうですね.

2015/02/01

ZYBO (Zynq PS)にI2Cキャラクタ液晶を接続する

はじめに

Zynq PSのI2Cモジュールを使用して,I2Cキャラクタ液晶を制御してみました.


テストプログラムの実行結果
開発環境
OS Microsoft Windows 7 Professional x64 Service Pack 1
Vivado Vivado 2014.4 WebPACK Edition (Windows)
SDK Xilinx SDK 2014.4
I2Cキャラクタ液晶

AitendoのI2C低電圧キャラクタ液晶モジュール(16x2行) [SPLC792-I2C-M]を使用しました. バックライトユニットも搭載されていて375円です.安いですね…. LCDモジュール単体でも取扱いがあります.

接続方法については,下記の記事が大変参考になりました. 私も,ピンヘッダを変換基板に取り付けて接続しています. 変換基板の短辺側にあるランド(SHL, DIRC)にもピンヘッダを取り付け,ジャンパピンでショートさせることで,液晶モジュールの表示方向を変更できるようにしました. バックライトユニットの電源(BL+)には,330Ωの抵抗を直列接続して3.3Vを印加しました.


ピンヘッダの取り付け
Vivadoでの作業メモ
  1. Zynq Block Designの設定変更
  2. ZYBO Base System Designを流用しました. Block Design上のZYNQ7 Processing SystemをダブルクリックしてRe-customize IPウィンドウを開き,Zynq Block Designで「I2C 1」にチェックを入れました. なお,下図ではTTCにもチェックを入れていますが,I2Cキャラクタ液晶の制御には必要ありません.


    Zynq Block Design
  3. MIO Configurationの設定変更
  4. Re-customize IPウィンドウでMIO Configurationに表示を切り替え,I2C 1のIOを「EMIO」に設定しました. なお,下図ではTTCについても設定していますが,I2Cキャラクタ液晶の制御には必要ありません.


    MIO Configuration
  5. Diagramの変更
  6. Re-customize IPウィンドウを閉じ,Diagram上で右クリックしました. 右クリックメニューのCreate Interface PortをクリックしてI2C 1用のインタフェースポート「IIC_1」を作成し,ZYNQ7 Processing SystemのIIC_1と接続しました.


    Diagram
  7. I/O Portsの変更
  8. 「Run Synthesis」後,「Open Synthesized Design」し,IIC_1関連のI/Oポートをアサインするためにツールバーの「Window」 - 「I/O Ports」を開きました. 私は,ZYBOのPmod JBコネクタのJB1 (T20)にiic_1_scl_ioを,JB2 (U20)にiic_1_sda_ioをアサインしました.


    I/O Ports
プログラム

今更ながらGitHubのアカウントを作成しましたので,GitHubにて公開します.

Xilinx SDKで作成したプロジェクト内には「system.mss」というファイルがあります. このファイル内に,Zynq PSのI2Cモジュール「iicps」のドキュメントとサンプルプロジェクトのリンクがあり,大変参考になりました. このI2Cキャラクタ液晶のテストプログラムは,サンプルプロジェクト「xiicps_polled_master_example」を基に作成したものです.

また,I2Cキャラクタ液晶の制御方法の理解には,下記の記事が大変参考になりました.

製品紹介