FC2カウンター FPGAの部屋 2014年09月

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Xilinxツール用フローティング・ライセンス・サーバーの設定(パソコンにXilinxツールがインストールされていない場合)

昨日からXilinxツール用のフローティング・ライセンス・サーバーの設定を行っていて苦労したので、覚書を書いておきます。

Xilinxツール用のフローティング・ライセンス・サーバーを設定しているパソコンは、新しいVivado等のXilinxツールはインストールしていなくて、ISE9.1iがインストールされている古いパソコンをWindows 7 に入れ替えて使っています。

昨日は、Xilinx社のダウンロード・ページから、ラインセンス管理ツール - 2014.2 Utilities をダウンロードして、C:\lmtools に展開しました。その後、Xilinxからライセンスを取得し、ライセンス・ファイルをメールで受け取ってlmtools.exe を起動して設定しても、フローティング・ライセンスを他のパソコンで取得できませんでした。

そこで、今日は、”AR# 5332 ライセンス - フローティング ライセンスの設定方法”を見ながら設定していました。こちらのARを見ていくと、まずは

ライセンスに VENDOR または DAEMON 行が含まれている場合、環境変数 PATH に xilinxd がない場合は、xilinxd へのパスを変更する必要があります。

というのを忘れていました。パスが設定されていないので、下の例の様に設定する必要があります。

PC の場合 :
VENDOR xilinxd c:\xilinx\bin\nt\xilinxd.exe


これを書いて、

c:\lmtools\lmgrd.exe -app -c c:\lmtools\licenses\Xilinx.lic

コマンドをDOSプロンプトで入力して、起動すると、MSVCR110.dll が無いというダイアログが出ます。
これは、何かな?と調べると、”コンピュータに MSVCR110.dll がないため、プログラムを開始できません。”がヒットしました。
このページによると、MSVCR110.dllが無くて、プログラムを開始できない場合は、”Visual Studio 2012 更新プログラム 3 の Visual C++ 再頒布可能パッケージ ”をインストールする必要があるということです。そういえば、Vivadoをインストールする時に入れてた覚えがあります。
これをインストールすると、他のパソコンでXilinx ツールのライセンスを取得することが出来ました。

新しい Vivado が入っていないパソコンで、ライセンス・サーバーを立ち上げるためには、”Visual Studio 2012 更新プログラム 3 の Visual C++ 再頒布可能パッケージ ”をインストールする必要があります。
  1. 2014年09月30日 11:49 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する5(UIOの設定3)

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する4(UIOの設定2)”の続き。

前回は、DTSでUIOの設定をしてから、DTCでDTSをコンパイルした。その出力であるDTBを使用して、Linuxをブートして、UIOが/dev ディレクトリに生成されるのを確認した。更に、一般ユーザーでログインするためにSSHをインストールし、/sys/devices ディレクトリを確認した。
今回は、UIOをCプログラムを書いて実際に使用する。具体的に何をやるかというと、ZYBOの4つのLEDを点灯させる。
なお、今回も”How to Design and Access a Memory-Mapped Device in Programmable Logic from Linaro Ubuntu Linux on Xilinx Zynq on the ZedBoard, Without Writing a Device Driver — Part Two”を参照している。

・最初に、USB-Serial で接続された root のTrea Term 画面で、ifconfig をして、DHCP の結果、IPアドレスがどうなっているかを確認する。このIPアドレスが一定ではなく、毎回違っている。これはなぜだろう?
ZYBO_BMDCwASL_48_140929.png

・IPアドレスが分かったら、もう1つTera Termを立ちあげて、SSHログインする。

mkdir Apps コマンドで、Apps フォルダを作製した。(もうすでに作ってあるが。。。)
ZYBO_BMDCwASL_49_140929.png

・Apps ディレクトリの下に、4つのLEDを点灯させる。led_test.c を vim で作製した。 vim led_test.c

LEDは、3番目にデバイス・ツリーにUIOとして定義されているので、uio2 として生成されている。uio の何番目として生成されているかは、前回の /sys ディレクトリを見ても確認できる。
ZYBO_BMDCwASL_50_140929.png

・LED_test.c が出来たので、cc -o led_test led_test.c コマンドでコンパイルを行った。

・led_test 実行ファイルができたので、./led_test コマンドを実行した。因みに、引数がない状態で実行すると led_gpio のレジスタをRead してくる。

・/dev/uio2 open error となってしまったが、sudo ./led_test を使用すると実行することができた。
ここで、led_gpio のメモリ領域は64KBなので、最後の1ワードを読みで見ることにした。それが、test[(65536-sizeof(int))/sizeof(int)] だ。これも一応、読めているようだ。
ZYBO_BMDCwASL_51_140929.png

さて次に、管理者権限では無く、ユーザー権限で実行することを考える。

ls -l /dev/uio* コマンドを実行すると、一般ユーザーに w パーミッションが与えられていない。
ZYBO_BMDCwASL_52_140929.png

sudo chmod 666 /dev/uio2 コマンドで、uio2 にだけ、一般ユーザーの w パーミッションを与えた。
ZYBO_BMDCwASL_53_140929.png

・今度は、./led_test コマンドが実行できた。
ZYBO_BMDCwASL_54_140929.png

次に、LEDに値を書いて点灯させてみる。0xf を書くと4つのLEDがすべて点灯する。

./led_test -i 0xf コマンドを実行した。
ZYBO_BMDCwASL_55_140929.png

ZYBOの4つのLEDがすべて点灯した。
ZYBO_BMDCwASL_57_140929.jpg

/dev/uio2 に設定した一般ユーザーの Write パーミッションは、再起動するとデフォルト値に戻ってしまい、無くなってしまう。これを設定しておくには、ブート時に自動的に chmod 666 /dev/uio2 を行う必要があるようだ。

最後に、led_test.c を貼っておく。これを書くにあたっては、、”How to Design and Access a Memory-Mapped Device in Programmable Logic from Linaro Ubuntu Linux on Xilinx Zynq on the ZedBoard, Without Writing a Device Driver — Part Two”の counters.c を参考にさせて頂いている。

/* * led_test.c * *  Created on: 2014/09/28 *      Author: Masaaki */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <sys/mman.h>
#include <fcntl.h>

 int main(int argc, char *argv[]) {
    int c;
    int in_val;
    int inout=1;
    int fd;
    volatile unsigned *led_gpio;

    while ((c = getopt(argc, argv, "i:o")) != -1){
        switch(c){
            case 'i' :
            in_val = (int)strtol(optarg, 00);
            inout = 0;
            break;
            case 'o' :
            default :
            inout = 1;
        }
    }

    fd = open("/dev/uio2", O_RDWR);
    if (fd < 1){
        fprintf(stderr, "/dev/uio2 open error\n");
        exit(-1);
    }

    led_gpio = (volatile unsigned *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
    if (!led_gpio){
        fprintf(stderr, "mmap error\n");
        exit(-1);
    }

    if (inout == 0){
        led_gpio[1] = 0xf// Channel1 AXI GPIO 3-state Control Register (output mode)
        led_gpio[0] = in_val;
    } else {
        printf("led_gpio = %x\n", led_gpio[0]);
        printf("led_gpio_tri = %x\n", led_gpio[1]);
        printf("test[(65536-sizeof(int))/sizeof(int)] = %x\n", led_gpio[(65536-sizeof(int))/sizeof(int)]);
    }

    munmap((void *)led_gpio, 0x10000);
    return 0;
}


(追記)
/etc/rc.local の exit 0 の前に chmod を書いておくと、起動時に /dev/uio* に w パーミッションが入りました。

chmod 666 /dev/uio0
chmod 666 /dev/uio1
chmod 666 /dev/uio2
chmod 666 /dev/uio3

ZYBO_BMDCwASL_58_140929.png

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する6(UIOの設定4)”に続く。
  1. 2014年09月29日 04:33 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する4(UIOの設定2)

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する3(UIOの設定)”の続き。

前回は、、”How to Design and Access a Memory-Mapped Device in Programmable Logic from Linaro Ubuntu Linux on Xilinx Zynq on the ZedBoard, Without Writing a Device Driver — Part Two”だ。参考にする本はコミケ本で、石原ひでみさんの”Hybrid SoC Design Vol 1.0”を参考にしながら、UIO (Userspace I/O) の設定を行った。画像を表示するFrame Buffer (FB) のアドレスの設定もUIOでできないか?と考えたので、今回は引き続き追加で FB 領域をUIOに設定して見たいと思う。

Linuxカーネル・ブート時には 0x17800000 番地に 128MiB の領域を確保してあるという表示が出ている。
ZYBO_BMDCwASL_42_140927.png

ここから、HD解像度 2面分の領域を UIO で確保しようと思う。
HDの1画面分は、1920ピクセル×1080ライン×4バイト×2画面分 = 16,588,800バイト
2^24 = 16,777,216 なので、この範囲内に入る。よって、0x10000000 (16MiB)の領域を UIO で確保することにする。

zynq-zybo.dts のUIO に関する変更部分は以下の様にすることにした。

		bitmap_display_cntrler_axim@43c00000 {
compatible = "generic-uio";
reg = < 0x43c00000 0x10000 >;
};
char_rom_axil@0x43c10000 {
compatible = "generic-uio";
reg = < 0x43c10000 0x10000 >;
};
led_gpio@0x41200000 {
compatible = "generic-uio";
reg = < 0x41200000 0x10000>;
};
frame_buffer_bmdc@0x17800000 {
compatible = "generic-uio";
reg = < 0x17800000 0x10000000>;
};

ZYBO_BMDCwASL_43_140927.png

../Linux-Digilent-Dev/scripts/dtc/dtc -I dts -O dtb -o devicetree.dtb zynq-zybo.dts コマンドで、zynq-zybo.dts を dtc でコンパイルして、devicetree.dtb を生成した。

出来上がった devicetree.dtb をSDカードの同じファイル名のファイルと入れ替えて、Linuxをブートした。

ls -l /dev/uio* コマンドを実行した。
ZYBO_BMDCwASL_44_140927.png

4つの UIO ができていた。

次に、”ZedBaord用UbuntuにSSHをインストール”を参考にしながら、Ubuntu に SSH をインストールした。但し、aptitude コマンドがないと言われたので、sudo apt-get install ssh コマンドを使用した。また、sshd_config は編集せずに、PermitRootLogin yes のままとした。

linaro 一般ユーザーで入って、cd /sys/devices; cd amba.0 コマンドを実行すると、17800000.frame_buffer_bmdc, 41200000.led_gpio, 43c00000.bitmap_display_cntrler_axim, 4310000.char_rom_axil が見えた。
ZYBO_BMDCwASL_45_140927.png

cd 17800000.frame_buffer_bmdc/ コマンドで、17800000.frame_buffer_bmdc ディレクトリに入った。

cd uio/uio3 コマンドを実行して、/sys/devices/amba.0/17800000.frame_buffer_bmdc/uio/uio3 ディレクトリに入った。

cat name version uevent コマンドを実行したところ、下に示す結果を得た。

frame_buffer_bmdc
devicetree
MAJOR=247
MINOR=3
DEVNAME=uio3


ZYBO_BMDCwASL_46_140927.png

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する5(UIOの設定3)”に続く。
  1. 2014年09月27日 04:16 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する3(UIOの設定)

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する2(インプリメント)”の続き。

前回はビットマップ・ディスプレイ・コントローラのインプリメントが終了した。今回は、SDKで Linux用ソフトウェアを作製する際に必要な設定をするために、DTSを変更する。

今回は、UIO (Userspace I/O) を使用するためにLinux のコンフィギュレーションをチェックして、デバイス・ツリーにUIOを追加する。

参考にするWebサイトと本を紹介する。参考にするWebサイトは、”How to Design and Access a Memory-Mapped Device in Programmable Logic from Linaro Ubuntu Linux on Xilinx Zynq on the ZedBoard, Without Writing a Device Driver — Part Two”だ。参考にする本はコミケ本で、石原ひでみさんの”Hybrid SoC Design Vol 1.0”だ。

まずは、Linux 上で UIO が使用可能かどうかを確認する。
・/home/masaaki/ZYBO/Digilent_Linux_Tutrial/Linux-Digilent-Dev ディレクトリで make menuconfig コマンドを実行する。
(2014/12/30:追記 make menuconfig が ncurses (ncurses-devel) が無いと言われてエラーで終了する場合は、sudo apt-get install libncurses5-dev を実行する)

・Device Drivers に入る。

・Usespace I/O drivers にチェックが入っていることを確認する。
ZYBO_BMDCwASL_31_140924.png

・Userspace I/O platform driver with generic IRQ handling にチェックが入っていることを確認する。
ZYBO_BMDCwASL_32_140924.png

・確認できたらOK。チェックが入っていない時は、チェックを入れてSave する。

・Exit -> Exit -> Exit -> No (チェックが入っていなくて、Save したときはYes、この場合はLinuxカーネルを再度コンパイルして、uImage を再生成しよう)で抜ける。

zynq-zybo.dts を編集する。

・まずは、以前のドライバと区別するために、/home/masaaki/ZYBO/Digilent_Linux_Tutrial/drivers2 ディレクトリを作製した。

・Linux-Digilent-Dev/arch/arm/boot/dts/zynq-zybo.dts を drivers2 ディレクトリにコピーした。
ZYBO_BMDCwASL_33_140924.png

・zynq-zybo.dts を gedit で開いて、Vivado 2014.2 の V_ZYBO_BMDCfL でインスタンスしたAXIスレーブIPを generic-uio として追加した。割り込みは行わない。

		bitmap_display_cntrler_axim@43c00000 {
compatible = "generic-uio";
reg = < 0x43c00000 0x10000 >;
};
char_rom_axil@0x43c10000 {
compatible = "generic-uio";
reg = < 0x43c10000 0x10000 >;
};
led_gpio@0x41200000 {
compatible = "generic-uio";
reg = < 0x41200000 0x10000>;
};

ZYBO_BMDCwASL_34_140925.png

・SDカードの第2パーティションにある UbuntuのRoot File System で動作させるため、zynq-zybo.dts を編集した。
44行目のコメント行を外して、43行をコメントアウトした。

/*		bootargs = "console=ttyPS0,115200 root=/dev/ram rw earlyprintk"; */
bootargs = "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=1";

ZYBO_BMDCwASL_39_140926.png

・Ubuntuが起動してからエラーが出るので、zynq-zybo.dts の operating-points を以下の様に変更した。(”ZYBO用のEmbedded Linux をブートするSDカードの作り方”参照)

operating-points = <666667 1000000 333334 1000000>;

ZYBO_EM_Linux_141_140915.png

../Linux-Digilent-Dev/scripts/dtc/dtc -I dts -O dtb -o devicetree.dtb zynq-zybo.dts コマンドで、devicetree.dtb を生成した。
ZYBO_BMDCwASL_35_140925.png

・”ZYBO用のEmbedded Linux チュートリアル6(BOOT.bin の生成)”の通りにBOOT.bin を生成した。
(但し、FSBL -> src -> fsbl_hooks.c のCコードを Z:\ZYBO_BS_emlx\source\vivado\SDK\fsbl\fsbl_hooks.c に置き換えると u-boot が起動しなくなるので、書き換えは行わない)

SDKでFSBLプロジェクトを作製した。
ZYBO_BMDCwASL_36_140925.png

BOOT.bin を生成。
ZYBO_BMDCwASL_37_140925.png

BOOT.bin が出来上がった。
ZYBO_BMDCwASL_38_140925.png

・出来上がった BOOT.bin と devicetree.dtb をSDカードの同じ名前のファイルと入れ替えた。

・SDカードをZYBOに挿入して電源をONした。

・Linuxがブートして、Ubuntuが立ち上がった。
ZYBO_BMDCwASL_40_140926.png

ls /dev/uio* コマンドを実行すると、uio が3つできていた。
ZYBO_BMDCwASL_41_140926.png

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する4(UIOの設定2)”に続く。
  1. 2014年09月24日 05:53 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する2(インプリメント)

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する1(ブロック・デザイン)”の続き。

前回、ブロック・デザインが完成し、論理合成まで終了したので、今回は制約ファイルを作製し、インプリメントを行う。

・制約ファイルは、”ZYBO用ビットマップ・ディスプレイ・コントローラの作製5(制約の生成、インプリメント)”の制約ファイルのうちの配置制約 と I/Oの信号規格を頂いてきた。

・更に、led 出力があるので、”ZYBO用のEmbedded Linux チュートリアル4(IP追加、インプリメント)”から led の配置制約 と I/Oの信号規格を頂いてきた。

・2つを合わせて、V_ZYBO_BMDCfL.xdc としてセーブした。
ZYBO_BMDCwASL_19_140922.png

・これでインプリメントを行うとタイミング・エラーになった。
ZYBO_BMDCwASL_20_140922.png

・Implemented Design を開いて、Report Timing Summary を開いてタイミングを見ると、やはり、n_0_BUFR_pixel_clk と fpga_0 クロックの間でタイミング・エラーが出ている。
ZYBO_BMDCwASL_21_140922.png

・Edit Timing Constraints を開いて、n_0_BUFR_pixel_clk と fpga_0 クロックの間に False Path を設定した。
ZYBO_BMDCwASL_22_140922.png

set_false_path -from [get_clocks n_0_BUFR_pixel_clk_io] -to [get_clocks clk_fpga_0]


・制約をセーブして、もう一度、インプリメント、ビットストリームの生成を行うと、タイミング・エラーは無くなった。
ZYBO_BMDCwASL_23_140922.png

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する3(UIOの設定)”に続く。
  1. 2014年09月23日 04:12 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する1(ブロック・デザイン)

AXI4 Lite Slave ポート付きビットマップ・ディスプレイ・コントローラ IP の IP化”でビットマップ・ディスプレイ・コントローラ (BMDC) IP のフレーム・バッファのスタート・アドレスを AXI4 Lite Slave バス経由で設定できるように変更した。この BMDC IP を ZYBO用の Linaro Ubuntu のPL部に搭載しようと思う。

早速、以前、ブログに書いた記事を元にVivado 2014.2 でプロジェクトを作り、ブロック・デザインを作った。

ZYBO用ビットマップ・ディスプレイ・コントローラの作製1(ブロック・デザイン1)
ZYBO用ビットマップ・ディスプレイ・コントローラの作製2(ブロック・デザイン2)
ZYBO用ビットマップ・ディスプレイ・コントローラの作製3(ブロック・デザイン3)”


上記のブログ記事を参考にして、ブロック・デザインの V_ZYBO_BMDCfL を作製した。V_ZYBO_BMDCfL を下に示す。(2014/11/02:変更 Constant IPを追加し、hdmi_out_en ポートを追加した。ZYBOのHDMIポートは入力、出力両方出来るため、出力に固定する必要がある。Constant IPの出力は1固定)
ZYBO_BMDCwASL_15_140922.png

BMDC IP と char_rom_axi_lite IP 、それにIP Catalog から AXI GPIO をインスタンスした。AXI GPIO は出力のみの4ビットとして、出力の信号名は、ZYBO用の Linaro Ubuntu の信号名に合わせて led とした。
ZYBO_BMDCwASL_16_140922.png

Address Editor タブを下に示す。
ZYBO_BMDCwASL_17_140922.png

論理合成は終了した。エラーは無かったようだ。
ZYBO_BMDCwASL_18_140922.png

次は制約ファイルを作製する。

ZYBO用の Linaro Ubuntu のPL部にビットマップ・ディスプレイ・コントローラを搭載する2(インプリメント)”に続く。
  1. 2014年09月22日 03:53 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

走った時の3軸加速度を測定しました

どのように走っているかを知りたいので、Android携帯に”加速度モニタ”アプリを入れて、走っている時の3軸加速度を測定してみました。

測定方法は、腰の前にウエスト・バックを締めて、それにAndroid携帯を入れて、アプリを立ちあげて走りました。最初はジョグくらいにゆっくり、折り返してからは速めに走りました。下にLibreOffice でグラフにした物を貼っておきます。
running_data_1_140921.png

列A は”ウェアラブル時代に見直したいAndroidの加速度/重力センサー、ジャイロスコープ (2/3)”のX軸は体軸で、+方向は地面に向けてあります。列B は Y軸で、+方向が前に向いた体の左側、-方向が右側です。列C は Z軸方向で、+方向は前方に向いています。なお、重力の影響は除いてあります。
X軸の単位はデータの個数で、Y軸の単位はm/sec^2 となります。
グラフを見て、Y軸の1120くらいまではゆっくり走り、その後は結構速く走っています。ゆっくり走ると、体が上に行く方向の加速度(列A の+側)は5m/sec^2 程度でした。もちろん、体が斜めになると軸を変換する必要があると思いますが、それは無視してあります。近似です。
速く走ると、体が振れる傾向にあります(列C)。これは、左右の足を伸ばす距離が増えるので仕方が無いことだと思いますが、左右差があり、左に行くほうが加速度が大きいです。体が斜めっているんでしょう???
体が下に行く方向の加速度(列A の+側)は、たまに10m/sec^2 くらい行きますが、大体は7~8m/sec^2 くらいです。

次に、家の奥さんの加速度データを下に示します。
running_data_2_140921.png

こちらは、Yの値が511くらいから、ゆっくり走り、2079辺りから速く走っています。
特徴的なのは、体が上に行く方向の加速度(列A の+側)がゆっくり走っても、加速度が大きい時は、10m/sec^2 くらいになっていることです。速く走るともう少し加速度が大きくなりますね。。。
これはたぶん、上下動が大きいのだと思います。
今のところ、なるべく上下動は少ないほうが良いのかな?と思っています。

結構、面白いので、いろいろな人の走るときの3軸加速度を測ってみたいと思っています。
  1. 2014年09月21日 21:42 |
  2. マラソン・トレーニング日記
  3. | トラックバック:0
  4. | コメント:0

AXI4 Lite Slave ポート付きビットマップ・ディスプレイ・コントローラ IP の IP化

AXI4 Lite Slave ポート付きビットマップ・ディスプレイ・コントローラ IP のシミュレーション”の続き。

前回は、AXI4 Lite Slave ポート付きビットマップ・ディスプレイ・コントローラ IP を作製して、シミュレーションを行った。今回はIP化を行う。使用するVivado のバーションは 2014.2 だ。

詳しいダイアログの様子などは”ZYBO用ビットマップ・ディスプレイ・コントローラIP4(IP化)”を参照して欲しい。今回は、ダイアログの表示などは省く予定だ。

・Toolsメニューから Create and Package IP... を選択した。

・Create And Package New IPダイアログが立ち上がった。Next >ボタンをクリックした。

・Package your projectのラジオボタンが選択されていたので、そのまま、Next >ボタンをクリックした。

・Package your project の Packaging IP in the Project の Include .xci files が選択されていた。これは、最初にIPコアを生成する場合に選択するそうだ。そのまま、Next >ボタンをクリックした。

・New IP Creation が表示された。Finish ボタンをクリックした。

・Finish Packaging successfully ダイアログが表示された。OKボタンをクリックした。

・Package IP ウインドウが表示された。

・IP Identification が表示されている。Vender display name と Company url を入力した。
ZYBO_BMDCwASL_3_140920.png

・IP Compatibility 画面
ZYBO_BMDCwASL_4_140920.png

・IP File Groups 画面。
ZYBO_BMDCwASL_5_140920.png

・IP Customization Parameters 画面。ここで、RESOLUTION を設定する。RESOLUTION をダブルクリックしする。

・Edit IP Parameter 画面で、Should the value be restricted? のラジオボタンで、Yesをクリックする。

・Enter one list element in the left box.Use Arrow Buttons to organize the list in the right box. で左のボックスに VGA などの解像度を入れて、右向き矢印ボタンをクリックすると、右のボックスに値を入れることが出来る。

・What is the default value?を SVGA に設定しておく。
ZYBO_BMDCwASL_6_140920.png

・IP Customization Parameters 画面に戻った。RESOLUTION に VGA などの解像度のリストが入っているのがわかる。

・IP Ports and Interface 画面。入出力ポートがリストされてた。M_AXI と s_axi_lite の2つのAXIバスがあるのがわかる。
ZYBO_BMDCwASL_7_140920.png

・IP Addressing and Memory 画面では、s_axi_lite のアドレス範囲が表示された。512バイトなので狭すぎる気もするがそのままとした。
ZYBO_BMDCwASL_8_140920.png

・IP GUI Customization 画面では、IP Integrator でインスタンスする際のシンボルが表示された。
ZYBO_BMDCwASL_9_140920.png

・Package IP 画面のReview and Package から edit package settings をクリックする。
ZYBO_BMDCwASL_10_140920.png

・After Packageing で Create archive of IP にチェックを入れる。(すでに入っていた)
ZYBO_BMDCwASL_11_140920.png

・Review and Package 画面で、Package IP ボタンをクリックして、IPを作製した。
ZYBO_BMDCwASL_12_140920.png

・Finished packaging successfully. ダイアログが出た。OKボタンをクリックした。

・IP生成後のVivado 2014.2の画面。Sources ウインドウに、IP-XACTにcomponet.xml ができているのが見える。
ZYBO_BMDCwASL_13_140920.png

・Digilent_user_bitmap_disp_cntrler_axi_master_1.0.zip がプロジェクト・フォルダに生成された。
ZYBO_BMDCwASL_14_140920.png
  1. 2014年09月20日 05:11 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

AXI4 Lite Slave ポート付きビットマップ・ディスプレイ・コントローラ IP のシミュレーション

ZYBO用のEmbedded Linux をブートするSDカードの作り方”で出来上がったZYBO用 Linaro Ubuntu で、ビットマップ・ディスプレイ・コントローラをハードウェアで実装して、Ubuntu からキャラクタを表示してみることにした。
今回は、その前段階として FB (Frame Buffer) のアドレスを入力できるように、FBのアドレスを設定するための AXI4 Lite Slave ポートを持ったビットマップ・ディスプレイ・コントローラ IP を作製する。

ビットマップ・ディスプレイ・コントローラ IP が出来上がったので、シミュレーションをしてみた。シミュレーションはVivado 2014.2 を使用した。

下に最初は、FBのアドレスを設定するための AXI4 Lite Slave のトランザクションを下に示す。
ZYBO_BMDCwASL_1_140919.png

次に、ビットマップ・ディスプレイ・コントローラ のAXI4 Master Read トランザクションを下に示す。
ZYBO_BMDCwASL_2_140919.png

最初に128 バースト Readした後で、h_count がカウントしているのがわかると思う。このようにピクセルデータをRead してから HDMI や VGAポートにピクセルデータを出力するようにしている。
  1. 2014年09月19日 05:27 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

ZYBO用の Linaro Ubuntu のバージョンを 12.11 から14.04 LTS にアップグレード

ZYBO用のEmbedded Linux をブートするSDカードの作り方”で、ZYBO用の Linaro Ubuntu 12.11を起動することができた。

今回は、Linnaro Ubuntu のバージョンを 12.11 から 14.04 LTS にアップグレードした。(apt-get がエラーになってしまったので、やらないほうが良さそうです。)

・前回から表示されているが、do-release-upgrade コマンドを実行した。
ZYBO_EM_Linux_150_140916.png

・Package Configuration 画面が開いた。右向き矢印キーを押して を選択してからエンター・キーを押した。(値はデフォルト)
ZYBO_EM_Linux_147_140916.png

・これは、デフォルトで が選択されていたと思うので、エンター・キーだけ押したと思う。
ZYBO_EM_Linux_148_140916.png

・デフォルトが Don't touch Keymap だったので、そのままにして、右向き矢印キーを押して を選択してからエンター・キーを押した。
ZYBO_EM_Linux_149_140916.png

・/etc/legal の Configuration が出てきたが、Y を押して、リターンキーを押した。
ZYBO_EM_Linux_151_140916.png

・エラーが起こったアプリケーションが表示されたが、アップグレードは完了した。エンター・キーを押した。
ZYBO_EM_Linux_152_140916.png

・もう一度、起動すると、Ubuntu 14.04 LTS が表示された。アップグレード成功だ。
ZYBO_EM_Linux_153_140916.png

・その後、apt-get -f upgrade しておいたほうが良いようです。

apt-get insatll vim でエラーが出るので、12.11 のままの方が良さそうです。わたしも元に戻します。

(2014/09/18:追記)
Ubuntu 12.11 に戻しました。
戻す際に、SDFormatter でSDカードをフォーマットするときには、オプション設定で消去設定を上書きフォーマット、論理サイズ調整をONとしました。
apt-get update
apt-get upgrade
apt-get install vim

を実行した後の/dev/root は、use = 23% でした。
ZYBO_EM_Linux_154_140918.png

ZYBO用の Linaro Ubuntu のバージョンを 12.11 から14.04 LTS にアップグレード2”に続く。
  1. 2014年09月17日 03:30 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

ZYBO用のEmbedded Linux をブートするSDカードの作り方

ZYBO用のEmbedded Linux をブートするSDカードの作り方を書いておきます。
(注:SDカードのグレードはClass 10を使って下さい。Class 4だととっても遅いし、エラーが出る時があるようです。私の使用したMicro SDカードは、【Amazon.co.jp限定】Transcend microSDHCカード 8GB Class10 (無期限保証) です。宣伝ではありません。。。)

・まず、用意するものは8GBのSDカードです。SDカードは、”ZedBoard用のUbuntu Linuxをビルド6(SDカードを用意する)”を見てパーティションを作って下さい。但し、第1パーティションの名前はZED_BOOTではなく、ZYBO_BOOT辺りにしたほうが良いと思います。

・Linuxの適当なディレクトリにUbuntu ディレクトリを作ります。

wget https://releases.linaro.org/12.11/ubuntu/precise-images/ubuntu-desktop/linaro-precise-ubuntu-desktop-20121124-560.tar.gz コマンドで、~/Ubuntu ディレクトリに、/linaro-precise-ubuntu-desktop-20121124-560.tar.gz を wget します。
Ubuntu_build_for_ZedBoard_54_140517.png

sudo tar --strip-components=3 -C /media/masaaki/ROOT_FS -xzpf linaro-precise-ubuntu-desktop-20121124-560.tar.gz binary/boot/filesystem.dir コマンドで、ZedBoard 用 Ubuntu の root file system を SDカードに書き込みます。結構時間がかかります。(: -C オプションは、SDカードの第2パーティションを指定します。自分の環境に合わせて指定して下さい)
Ubuntu_build_for_ZedBoard_55_140517.png

・これで、SDカードの第2パーティション(ROOT_FS)には、Ubuntu のRoot File System が入りました。
Ubuntu_build_for_ZedBoard_56_140517.png

・”ZYBO用のEmbedded Linux チュートリアル1(IPのアップグレード)”から”ZYBO用のEmbedded Linux チュートリアル10(myLedのドライバの構築とデバイス・ツリーへの追加)”までを実行します。その時に出来た BOOT.binをSDカードの第1パーティション(ZYBO_BOOT)に書きます。

・”ZYBO用のEmbedded Linux チュートリアル7(Linuxカーネルのビルド)”で、
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- xilinx_zynq_defconfig
を行ってから、
make ARCH=arm menuconfig
を行います。メニューが立ち上がるので、General setup に入ります。
(2014/10/05 : 今日やってみたら、menuconfig 要らないようです。これなしでもLinuxブートしました。)
ZYBO_EM_Linux_132_140914.png

・Initilal RAM filesystem and RAM disk にチェックが入っているので、Nキーを押してチェックを外して、Save し、Exitします。
ZYBO_EM_Linux_133_140914.png

・Linuxカーネルをコンパイルします。
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-
uImageを作ります。
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- UIMAGE_LOADADDR=0x8000 uImage
これで、uImage ができました。SDカードの第1パーティションにコピーします。

・/home/masaaki/ZYBO/Digilent_Linux_Tutrial/drivers の zynq-zybo.dts の bootargs を以下の様に変更しました。

bootargs = "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=1";

・ zynq-zybo.dts の operating-points を以下の様に変更しました。(”cpu clock freq change”を参照して下さい。jujurou さん、ありがとうございました)(2014/11/30:修正、詳しくは、”ZYBO用Ubuntu Linuxの時計のずれ”、”ZYBO用Ubuntu Linuxの時計のずれ2(解決編)”を参照して下さい)

operating-points = <650000 1000000>;

ZYBO_Ubuntu_15_141130.png 

../Linux-Digilent-Dev/scripts/dtc/dtc -I dts -O dtb -o devicetree.dtb zynq-zybo.dts コマンドで、再度デバイス・ツリーをコンパイルします。

・出来上がった devicetree.dtb をSDカードの第1パーティションにコピーして下さい。

・SDカードの第1パーティションに uEnv.txt を追加します。(ikwzm さん、ありがとうございました)

uenvcmd=fatload mmc 0 0x03000000 uImage && fatload mmc 0 0x02A00000 devicetree.dtb && bootm 0x03000000 - 0x02A00000

・最終的なSDカードの第1パーティションの様子です。RAMDISK用のファイルが入っていますが、それは無視して下さい。
ZYBO_EM_Linux_144_140915.png

・SDカードをZYBOに入れて、SDカード・ブートにJP5 を設定して、電源をONします。

・Tera TermをCOMで開いて、115200bps, 8bit, 1stop bit で開きます。

・すると、Linaro Ubuntu のプロンプトが出てきます。
ZYBO_EM_Linux_146_140916.png

sudo apt-get update
 sudo apt-get upgrade は、やっておきましょう。


・終了する時は、suso shutdown -h now で終わりにして下さい。

2014/11/30:追記
ZYBOには、RTCが無いので、NTPをインストールしておいたほうが良いでしょう。
sudo apt-get install ntp
  1. 2014年09月16日 04:22 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

ZYBO用Linaro Ubuntuが立ちあがる状態でのu-boot環境変数とLinuxブートメッセージ2

ZYBO用Linaro Ubuntuが立ちあがる状態でのu-boot環境変数とLinuxブートメッセージ”の修正版です。
uEnv.txt が間違っていので、修正しました。ブートメッセージの違いがよく分かるので、前のバグあり版も残しておきます。
nEnv.txt を下に示します。
uenvcmd=fatload mmc 0 0x03000000 uImage && fatload mmc 0 0x02A00000 devicetree.dtb && bootm 0x03000000 - 0x02A00000

nEnv.txt を u-boot の入っているBOOT.bin と一緒に入れておきます。(参考Webページ”bc10-router/u-boot update”)
top コマンドで見ても、67kBくらいしか使っていません。前は200kB以上使っていたので、フリーのメモリが多くなりました。
ZYBO_EM_Linux_145_140916.png

ZYBOの起動メッセージを下に貼っておきます。RAMDISKが読まれなくなりました。なお、u-boot のカウントの途中でキーを押して止めて、env print, boot コマンドを実行しています。
 0
zynq-uboot> env print
baudrate=115200
bitstream_image=system.bit.bin
boot_image=BOOT.bin
boot_size=0xF00000
bootcmd=run $modeboot
bootdelay=3
bootenv=uEnv.txt
devicetree_image=devicetree.dtb
devicetree_size=0x20000
ethact=Gem.e000b000
ethmacskip=0
fdt_high=0x20000000
importbootenv=echo Importing environment from SD ...; env import -t ${loadbootenv_addr} $filesize
initrd_high=0x20000000
ipaddr=10.10.70.102
jtagboot=echo TFTPing Linux to RAM... && tftp 0x3000000 ${kernel_image} && tftp 0x2A00000 ${devicetree_image} && tftp 0x2000000 ${ramdisk_image} && bootm 0x3000000 0x2000000 0x2A00000
kernel_image=uImage
kernel_size=0x500000
loadbit_addr=0x100000
loadbootenv=fatload mmc 0 ${loadbootenv_addr} ${bootenv}
loadbootenv_addr=0x2000000
mmc_loadbit_fat=echo Loading bitstream from SD/MMC/eMMC to RAM.. && mmcinfo && fatload mmc 0 ${loadbit_addr} ${bitstream_image} && fpga load 0 ${loadbit_addr} ${filesize}
modeboot=sdboot
nandboot=echo Copying Linux from NAND flash to RAM... && nand read 0x3000000 0x100000 ${kernel_size} && nand read 0x2A00000 0x600000 ${devicetree_size} && echo Copying ramdisk... && nand read 0x2000000 0x620000 ${ramdisk_size} && bootm 0x3000000 0x2000000 0x2A00000
norboot=echo Copying Linux from NOR flash to RAM... && cp.b 0xE2100000 0x3000000 ${kernel_size} && cp.b 0xE2600000 0x2A00000 ${devicetree_size} && echo Copying ramdisk... && cp.b 0xE2620000 0x2000000 ${ramdisk_size} && bootm 0x3000000 0x2000000 0x2A00000
qspiboot=echo Copying Linux from QSPI flash to RAM... && sf probe 0 0 0 && sf read 0x3000000 0x100000 ${kernel_size} && sf read 0x2A00000 0x600000 ${devicetree_size} && echo Copying ramdisk... && sf read 0x2000000 0x620000 ${ramdisk_size} && bootm 0x3000000 0x2000000 0x2A00000
ramdisk_image=uramdisk.image.gz
ramdisk_size=0x5E0000
rsa_jtagboot=echo TFTPing Image to RAM... && tftp 0x100000 ${boot_image} && zynqrsa 0x100000 && bootm 0x3000000 0x2000000 0x2A00000
rsa_nandboot=echo Copying Image from NAND flash to RAM... && nand read 0x100000 0x0 ${boot_size} && zynqrsa 0x100000 && bootm 0x3000000 0x2000000 0x2A00000
rsa_norboot=echo Copying Image from NOR flash to RAM... && cp.b 0xE2100000 0x100000 ${boot_size} && zynqrsa 0x100000 && bootm 0x3000000 0x2000000 0x2A00000
rsa_qspiboot=echo Copying Image from QSPI flash to RAM... && sf probe 0 0 0 && sf read 0x100000 0x0 ${boot_size} && zynqrsa 0x100000 && bootm 0x3000000 0x2000000 0x2A00000
rsa_sdboot=echo Copying Image from SD to RAM... && fatload mmc 0 0x100000 ${boot_image} && zynqrsa 0x100000 && bootm 0x3000000 0x2000000 0x2A00000
sdboot=if mmcinfo; then run uenvboot; echo Copying Linux from SD to RAM... && fatload mmc 0 0x3000000 ${kernel_image} && fatload mmc 0 0x2A00000 ${devicetree_image} && fatload mmc 0 0x2000000 ${ramdisk_image} && bootm 0x3000000 0x2000000 0x2A00000; fi
serverip=10.10.70.101
stderr=serial
stdin=serial
stdout=serial
uenvboot=if run loadbootenv; then echo Loaded environment from ${bootenv}; run importbootenv; fi; if test -n $uenvcmd; then echo Running uenvcmd ...; run uenvcmd; fi

Environment size: 3081/131068 bytes
zynq-uboot> boot
Device: zynq_sdhci
Manufacturer ID: 74
OEM: 4a45
Name: USD
Tran Speed: 50000000
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 7.5 GiB
Bus Width: 4-bit
reading uEnv.txt
117 bytes read in 8 ms (13.7 KiB/s)
Loaded environment from uEnv.txt
Importing environment from SD ...
Running uenvcmd ...
reading uImage
3982032 bytes read in 347 ms (10.9 MiB/s)
reading devicetree.dtb
7482 bytes read in 15 ms (486.3 KiB/s)
## Booting kernel from Legacy Image at 03000000 ...
   Image Name:   Linux-3.14.0-xilinx-13567-g906a2
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3981968 Bytes = 3.8 MiB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 02a00000
   Booting using the fdt blob at 0x2a00000
   Loading Kernel Image ... OK
   Loading Device Tree to 1fb29000, end 1fb2dd39 ... OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 3.14.0-xilinx-13567-g906a2c9-dirty (masaaki@masaaki-VirtualBox) (gcc version 4.6.3 (Sourcery CodeBench Lite 2012.03-79) ) #7 SMP PREEMPT Sun Sep 14 07:41:01 JST 2014
[    0.000000] CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] Machine model: Xilinx Zynq
[    0.000000] bootconsole [earlycon0] enabled
[    0.000000] cma: CMA: reserved 128 MiB at 17800000
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] PERCPU: Embedded 8 pages/cpu @dfb9e000 s10752 r8192 d13824 u32768
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 130048
[    0.000000] Kernel command line: console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=1
[    0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[    0.000000] Memory: 375396K/524288K available (5144K kernel code, 319K rwdata, 1896K rodata, 198K init, 5339K bss, 148892K reserved, 0K highmem)
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xe0800000 - 0xff000000   ( 488 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xe0000000   ( 512 MB)
[    0.000000]     pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
[    0.000000]     modules : 0xbf000000 - 0xbfe00000   (  14 MB)
[    0.000000]       .text : 0xc0008000 - 0xc06e853c   (7042 kB)
[    0.000000]       .init : 0xc06e9000 - 0xc071aa00   ( 199 kB)
[    0.000000]       .data : 0xc071c000 - 0xc076bd50   ( 320 kB)
[    0.000000]        .bss : 0xc076bd5c - 0xc0ca2b88   (5340 kB)
[    0.000000] Preemptible hierarchical RCU implementation.
[    0.000000]  RCU lockdep checking is enabled.
[    0.000000]  Dump stacks of tasks blocking RCU-preempt GP.
[    0.000000]  RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
[    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
[    0.000000] NR_IRQS:16 nr_irqs:16 16
[    0.000000] ps7-slcr mapped to e0802000
[    0.000000] zynq_clock_init: clkc starts at e0802100
[    0.000000] Zynq clock init
[    0.000016] sched_clock: 64 bits at 325MHz, resolution 3ns, wraps every 3383112499200ns
[    0.008497] ps7-ttc #0 at e0804000, irq=43
[    0.013543] Console: colour dummy device 80x30
[    0.017885] Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar
[    0.025943] ... MAX_LOCKDEP_SUBCLASSES:  8
[    0.029964] ... MAX_LOCK_DEPTH:          48
[    0.034136] ... MAX_LOCKDEP_KEYS:        8191
[    0.038557] ... CLASSHASH_SIZE:          4096
[    0.042908] ... MAX_LOCKDEP_ENTRIES:     16384
[    0.047379] ... MAX_LOCKDEP_CHAINS:      32768
[    0.051884] ... CHAINHASH_SIZE:          16384
[    0.056324]  memory used by lock dependency info: 3695 kB
[    0.061773]  per task-struct memory footprint: 1152 bytes
[    0.067215] Calibrating delay loop... 1292.69 BogoMIPS (lpj=6463488)
[    0.110947] pid_max: default: 32768 minimum: 301
[    0.116270] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.122811] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.137256] CPU: Testing write buffer coherency: ok
[    0.143509] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[    0.149152] Setting up static identity map for 0x4de810 - 0x4de868
[    0.155524] L310 cache controller enabled
[    0.159482] l2x0: 8 ways, CACHE_ID 0x410000c8, AUX_CTRL 0x72760000, Cache size: 512 kB
[    0.240423] CPU1: Booted secondary processor
[    0.328276] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
[    0.329386] Brought up 2 CPUs
[    0.342253] SMP: Total of 2 processors activated.
[    0.346955] CPU: All CPU(s) started in SVC mode.
[    0.354984] devtmpfs: initialized
[    0.365595] VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
[    0.379771] regulator-dummy: no parameters
[    0.392618] NET: Registered protocol family 16
[    0.401423] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.415069] cpuidle: using governor ladder
[    0.419051] cpuidle: using governor menu
[    0.446217] syscon f8000000.ps7-slcr: regmap [mem 0xf8000000-0xf8000fff] registered
[    0.458645] hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
[    0.466494] hw-breakpoint: maximum watchpoint size is 4 bytes.
[    0.473182] zynq-ocm f800c000.ps7-ocmc: ZYNQ OCM pool: 256 KiB @ 0xe0880000
[    0.544477] bio: create slab <bio-0> at 0
[    0.553371] vgaarb: loaded
[    0.557922] SCSI subsystem initialized
[    0.564142] usbcore: registered new interface driver usbfs
[    0.570034] usbcore: registered new interface driver hub
[    0.575793] usbcore: registered new device driver usb
[    0.582287] media: Linux media interface: v0.10
[    0.587122] Linux video capture interface: v2.00
[    0.592490] pps_core: LinuxPPS API ver. 1 registered
[    0.597325] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    0.606888] PTP clock support registered
[    0.611784] EDAC MC: Ver: 3.0.0
[    0.618026] Advanced Linux Sound Architecture Driver Initialized.
[    0.633669] DMA-API: preallocated 4096 debug entries
[    0.638572] DMA-API: debugging enabled by kernel config
[    0.644312] Switched to clocksource arm_global_timer
[    0.706974] NET: Registered protocol family 2
[    0.713892] TCP established hash table entries: 4096 (order: 2, 16384 bytes)
[    0.721362] TCP bind hash table entries: 4096 (order: 5, 147456 bytes)
[    0.730113] TCP: Hash tables configured (established 4096 bind 4096)
[    0.736678] TCP: reno registered
[    0.739810] UDP hash table entries: 256 (order: 2, 20480 bytes)
[    0.745986] UDP-Lite hash table entries: 256 (order: 2, 20480 bytes)
[    0.753467] NET: Registered protocol family 1
[    0.759495] RPC: Registered named UNIX socket transport module.
[    0.765365] RPC: Registered udp transport module.
[    0.770014] RPC: Registered tcp transport module.
[    0.774781] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.782011] hw perfevents: enabled with ARMv7 Cortex-A9 PMU driver, 7 counters available
[    0.795871] futex hash table entries: 512 (order: 3, 32768 bytes)
[    0.809694] jffs2: version 2.2. (NAND) (SUMMARY)  c 2001-2006 Red Hat, Inc.
[    0.817251] msgmni has been set to 989
[    0.822490] io scheduler noop registered
[    0.826405] io scheduler deadline registered
[    0.830698] io scheduler cfq registered (default)
[    0.854606] dma-pl330 f8003000.ps7-dma: Loaded driver for PL330 DMAC-2364208
[    0.861516] dma-pl330 f8003000.ps7-dma:      DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16
[    0.873713] e0001000.serial: ttyPS0 at MMIO 0xe0001000 (irq = 82, base_baud = 3125000) is a xuartps
[    0.883062] console [ttyPS0] enabled
[    0.883062] console [ttyPS0] enabled
[    0.890275] bootconsole [earlycon0] disabled
[    0.890275] bootconsole [earlycon0] disabled
[    0.901396] xdevcfg f8007000.ps7-dev-cfg: ioremap 0xf8007000 to e0866000
[    0.911296] [drm] Initialized drm 1.1.0 20060810
[    0.949593] brd: module loaded
[    0.971794] loop: module loaded
[    0.987653] m25p80 spi0.0: found s25fl128s1, expected n25q128
[    0.993359] m25p80 spi0.0: s25fl128s1 (16384 Kbytes)
[    0.998501] 4 ofpart partitions found on MTD device spi0.0
[    1.003909] Creating 4 MTD partitions on "spi0.0":
[    1.008744] 0x000000000000-0x000000400000 : "qspi-fsbl-uboot"
[    1.022081] 0x000000400000-0x000000900000 : "qspi-linux"
[    1.032387] 0x000000900000-0x000000920000 : "qspi-device-tree"
[    1.043217] 0x000000920000-0x000001000000 : "qspi-user"
[    1.062821] e1000e: Intel(R) PRO/1000 Network Driver - 2.3.2-k
[    1.068663] e1000e: Copyright(c) 1999 - 2013 Intel Corporation.
[    1.080341] libphy: XEMACPS mii bus: probed
[    1.086930] xemacps e000b000.ps7-ethernet: pdev->id -1, baseaddr 0xe000b000, irq 54
[    1.097511] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.104806] ehci-pci: EHCI PCI platform driver
[    1.109889] ULPI transceiver vendor/product ID 0x0424/0x0007
[    1.115527] Found SMSC USB3320 ULPI transceiver.
[    1.120083] ULPI integrity check: passed.
[    1.125039] zynq-ehci zynq-ehci.0: Xilinx Zynq USB EHCI Host Controller
[    1.132312] zynq-ehci zynq-ehci.0: new USB bus registered, assigned bus number 1
[    1.164429] zynq-ehci zynq-ehci.0: irq 53, io mem 0x00000000
[    1.184373] zynq-ehci zynq-ehci.0: USB 2.0 started, EHCI 1.00
[    1.197034] hub 1-0:1.0: USB hub found
[    1.201003] hub 1-0:1.0: 1 port detected
[    1.209073] usbcore: registered new interface driver usb-storage
[    1.217970] mousedev: PS/2 mouse device common for all mice
[    1.225678] i2c /dev entries driver
[    1.238200] zynq-edac f8006000.ps7-ddrc: ecc not enabled
[    1.244415] cpufreq_cpu0: failed to get cpu0 regulator: -19
[    1.252786] Xilinx Zynq CpuIdle Driver started
[    1.259128] sdhci: Secure Digital Host Controller Interface driver
[    1.265446] sdhci: Copyright(c) Pierre Ossman
[    1.269724] sdhci-pltfm: SDHCI platform and OF driver helper
[    1.275959] mmc0: no vqmmc regulator found
[    1.279984] mmc0: no vmmc regulator found
[    1.324336] mmc0: SDHCI controller on e0100000.ps7-sdio [e0100000.ps7-sdio] using ADMA
[    1.343418] usbcore: registered new interface driver usbhid
[    1.351052] usbhid: USB HID core driver
[    1.366149] TCP: cubic registered
[    1.369397] NET: Registered protocol family 17
[    1.374557] Registering SWP/SWPB emulation handler
[    1.381876] regulator-dummy: disabling
[    1.386385] drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
[    1.401840] mmc0: new high speed SDHC card at address b368
[    1.410150] mmcblk0: mmc0:b368 USD   7.45 GiB
[    1.420530]  mmcblk0: p1 p2
[    1.421631] ALSA device list:
[    1.421635]   No soundcards found.
[    4.150103] EXT4-fs (mmcblk0p2): recovery complete
[    4.161190] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[    4.169359] VFS: Mounted root (ext4 filesystem) on device 179:2.
[    4.184471] devtmpfs: mounted
[    4.187743] Freeing unused kernel memory: 196K (c06e9000 - c071a000)
。+HH4.697265] init: ureadahead main process (585) terminated with status 5e
Last login: Thu Jan  1 00:00:13 UTC 1970 on tty1
Welcome to Linaro 12.11 (GNU/Linux 3.14.0-xilinx-13567-g906a2c9-dirty armv7l)

 * Documentation:  https://wiki.linaro.org/

New release '14.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

root@linaro-ubuntu-desktop:~#
  1. 2014年09月16日 03:56 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

ZYBO用Linaro Ubuntuが立ちあがる状態でのu-boot環境変数とLinuxブートメッセージ

Twitter で ikwzm さんに教えてもらった。u-boot のデフォルト環境変数ファイル nEnv.txt をSDカードの第1パーティションにいれた。下に nEnv.txtを示す。
uenvcmd=fatload mmc 0 0x03000000 uImage && fatload mmc 0 0x02A00000 devicetree.dtb && bootm 0x03000000 -0x02A00000

注:このuEnv.txt にはバグがあります。修正版は、”ZYBO用Linaro Ubuntuが立ちあがる状態でのu-boot環境変数とLinuxブートメッセージ2”を参照して下さい)
ZYBO_EM_Linux_144_140915.png

このSDカードをZYBOに入れて、u-boot のカウントが終了する前にリターンキーを押して、u-boot のプロンプトを出し、env print コマンドを実行した。その後、boot コマンドを実行して、Linuxカーネルをブートした時のログを下に示す。
 0
zynq-uboot> env print
baudrate=115200
bitstream_image=system.bit.bin
boot_image=BOOT.bin
boot_size=0xF00000
bootcmd=run $modeboot
bootdelay=3
bootenv=uEnv.txt
devicetree_image=devicetree.dtb
devicetree_size=0x20000
ethact=Gem.e000b000
ethmacskip=0
fdt_high=0x20000000
importbootenv=echo Importing environment from SD ...; env import -t ${loadbootenv_addr} $filesize
initrd_high=0x20000000
ipaddr=10.10.70.102
jtagboot=echo TFTPing Linux to RAM... && tftp 0x3000000 ${kernel_image} && tftp 0x2A00000 ${devicetree_image} && tftp 0x2000000 ${ramdisk_image} && bootm 0x3000000 0x2000000 0x2A00000
kernel_image=uImage
kernel_size=0x500000
loadbit_addr=0x100000
loadbootenv=fatload mmc 0 ${loadbootenv_addr} ${bootenv}
loadbootenv_addr=0x2000000
mmc_loadbit_fat=echo Loading bitstream from SD/MMC/eMMC to RAM.. && mmcinfo && fatload mmc 0 ${loadbit_addr} ${bitstream_image} && fpga load 0 ${loadbit_addr} ${filesize}
modeboot=sdboot
nandboot=echo Copying Linux from NAND flash to RAM... && nand read 0x3000000 0x100000 ${kernel_size} && nand read 0x2A00000 0x600000 ${devicetree_size} && echo Copying ramdisk... && nand read 0x2000000 0x620000 ${ramdisk_size} && bootm 0x3000000 0x2000000 0x2A00000
norboot=echo Copying Linux from NOR flash to RAM... && cp.b 0xE2100000 0x3000000 ${kernel_size} && cp.b 0xE2600000 0x2A00000 ${devicetree_size} && echo Copying ramdisk... && cp.b 0xE2620000 0x2000000 ${ramdisk_size} && bootm 0x3000000 0x2000000 0x2A00000
qspiboot=echo Copying Linux from QSPI flash to RAM... && sf probe 0 0 0 && sf read 0x3000000 0x100000 ${kernel_size} && sf read 0x2A00000 0x600000 ${devicetree_size} && echo Copying ramdisk... && sf read 0x2000000 0x620000 ${ramdisk_size} && bootm 0x3000000 0x2000000 0x2A00000
ramdisk_image=uramdisk.image.gz
ramdisk_size=0x5E0000
rsa_jtagboot=echo TFTPing Image to RAM... && tftp 0x100000 ${boot_image} && zynqrsa 0x100000 && bootm 0x3000000 0x2000000 0x2A00000
rsa_nandboot=echo Copying Image from NAND flash to RAM... && nand read 0x100000 0x0 ${boot_size} && zynqrsa 0x100000 && bootm 0x3000000 0x2000000 0x2A00000
rsa_norboot=echo Copying Image from NOR flash to RAM... && cp.b 0xE2100000 0x100000 ${boot_size} && zynqrsa 0x100000 && bootm 0x3000000 0x2000000 0x2A00000
rsa_qspiboot=echo Copying Image from QSPI flash to RAM... && sf probe 0 0 0 && sf read 0x100000 0x0 ${boot_size} && zynqrsa 0x100000 && bootm 0x3000000 0x2000000 0x2A00000
rsa_sdboot=echo Copying Image from SD to RAM... && fatload mmc 0 0x100000 ${boot_image} && zynqrsa 0x100000 && bootm 0x3000000 0x2000000 0x2A00000
sdboot=if mmcinfo; then run uenvboot; echo Copying Linux from SD to RAM... && fatload mmc 0 0x3000000 ${kernel_image} && fatload mmc 0 0x2A00000 ${devicetree_image} && fatload mmc 0 0x2000000 ${ramdisk_image} && bootm 0x3000000 0x2000000 0x2A00000; fi
serverip=10.10.70.101
stderr=serial
stdin=serial
stdout=serial
uenvboot=if run loadbootenv; then echo Loaded environment from ${bootenv}; run importbootenv; fi; if test -n $uenvcmd; then echo Running uenvcmd ...; run uenvcmd; fi

Environment size: 3081/131068 bytes
zynq-uboot> boot
Device: zynq_sdhci
Manufacturer ID: 74
OEM: 4a45
Name: USD
Tran Speed: 50000000
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 7.5 GiB
Bus Width: 4-bit
reading uEnv.txt
116 bytes read in 8 ms (13.7 KiB/s)
Loaded environment from uEnv.txt
Importing environment from SD ...
Running uenvcmd ...
reading uImage
3982032 bytes read in 346 ms (11 MiB/s)
reading devicetree.dtb
7482 bytes read in 16 ms (456.1 KiB/s)
## Booting kernel from Legacy Image at 03000000 ...
   Image Name:   Linux-3.14.0-xilinx-13567-g906a2
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3981968 Bytes = 3.8 MiB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
Wrong Ramdisk Image Format
Ramdisk image is corrupt or invalid
Copying Linux from SD to RAM...
reading uImage
3982032 bytes read in 347 ms (10.9 MiB/s)
reading devicetree.dtb
7482 bytes read in 15 ms (486.3 KiB/s)
reading uramdisk.image.gz
3694172 bytes read in 322 ms (10.9 MiB/s)
## Booting kernel from Legacy Image at 03000000 ...
   Image Name:   Linux-3.14.0-xilinx-13567-g906a2
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3981968 Bytes = 3.8 MiB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 02000000 ...
   Image Name:
   Image Type:   ARM Linux RAMDisk Image (gzip compressed)
   Data Size:    3694108 Bytes = 3.5 MiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 02a00000
   Booting using the fdt blob at 0x2a00000
   Loading Kernel Image ... OK
   Loading Ramdisk to 1f7a8000, end 1fb2de1c ... OK
   Loading Device Tree to 1f7a3000, end 1f7a7d39 ... OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 3.14.0-xilinx-13567-g906a2c9-dirty (masaaki@masaaki-VirtualBox) (gcc version 4.6.3 (Sourcery CodeBench Lite 2012.03-79) ) #7 SMP PREEMPT Sun Sep 14 07:41:01 JST 2014
[    0.000000] CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] Machine model: Xilinx Zynq
[    0.000000] bootconsole [earlycon0] enabled
[    0.000000] cma: CMA: reserved 128 MiB at 17400000
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] PERCPU: Embedded 8 pages/cpu @dfb9e000 s10752 r8192 d13824 u32768
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 130048
[    0.000000] Kernel command line: console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=1
[    0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[    0.000000] Memory: 371784K/524288K available (5144K kernel code, 319K rwdata, 1896K rodata, 198K init, 5339K bss, 152504K reserved, 0K highmem)
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xe0800000 - 0xff000000   ( 488 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xe0000000   ( 512 MB)
[    0.000000]     pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
[    0.000000]     modules : 0xbf000000 - 0xbfe00000   (  14 MB)
[    0.000000]       .text : 0xc0008000 - 0xc06e853c   (7042 kB)
[    0.000000]       .init : 0xc06e9000 - 0xc071aa00   ( 199 kB)
[    0.000000]       .data : 0xc071c000 - 0xc076bd50   ( 320 kB)
[    0.000000]        .bss : 0xc076bd5c - 0xc0ca2b88   (5340 kB)
[    0.000000] Preemptible hierarchical RCU implementation.
[    0.000000]  RCU lockdep checking is enabled.
[    0.000000]  Dump stacks of tasks blocking RCU-preempt GP.
[    0.000000]  RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
[    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
[    0.000000] NR_IRQS:16 nr_irqs:16 16
[    0.000000] ps7-slcr mapped to e0802000
[    0.000000] zynq_clock_init: clkc starts at e0802100
[    0.000000] Zynq clock init
[    0.000016] sched_clock: 64 bits at 325MHz, resolution 3ns, wraps every 3383112499200ns
[    0.008499] ps7-ttc #0 at e0804000, irq=43
[    0.013541] Console: colour dummy device 80x30
[    0.017881] Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar
[    0.025937] ... MAX_LOCKDEP_SUBCLASSES:  8
[    0.029960] ... MAX_LOCK_DEPTH:          48
[    0.034132] ... MAX_LOCKDEP_KEYS:        8191
[    0.038552] ... CLASSHASH_SIZE:          4096
[    0.042904] ... MAX_LOCKDEP_ENTRIES:     16384
[    0.047375] ... MAX_LOCKDEP_CHAINS:      32768
[    0.051879] ... CHAINHASH_SIZE:          16384
[    0.056321]  memory used by lock dependency info: 3695 kB
[    0.061771]  per task-struct memory footprint: 1152 bytes
[    0.067213] Calibrating delay loop... 1292.69 BogoMIPS (lpj=6463488)
[    0.110951] pid_max: default: 32768 minimum: 301
[    0.116274] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.122815] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.137343] CPU: Testing write buffer coherency: ok
[    0.143607] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[    0.149241] Setting up static identity map for 0x4de810 - 0x4de868
[    0.155614] L310 cache controller enabled
[    0.159574] l2x0: 8 ways, CACHE_ID 0x410000c8, AUX_CTRL 0x72760000, Cache size: 512 kB
[    0.240422] CPU1: Booted secondary processor
[    0.328277] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
[    0.329389] Brought up 2 CPUs
[    0.342258] SMP: Total of 2 processors activated.
[    0.346959] CPU: All CPU(s) started in SVC mode.
[    0.354989] devtmpfs: initialized
[    0.365614] VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
[    0.379782] regulator-dummy: no parameters
[    0.392631] NET: Registered protocol family 16
[    0.401539] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.415225] cpuidle: using governor ladder
[    0.419309] cpuidle: using governor menu
[    0.446222] syscon f8000000.ps7-slcr: regmap [mem 0xf8000000-0xf8000fff] registered
[    0.458783] hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
[    0.466627] hw-breakpoint: maximum watchpoint size is 4 bytes.
[    0.473025] zynq-ocm f800c000.ps7-ocmc: ZYNQ OCM pool: 256 KiB @ 0xe0880000
[    0.544167] bio: create slab  at 0
[    0.554479] vgaarb: loaded
[    0.559070] SCSI subsystem initialized
[    0.565187] usbcore: registered new interface driver usbfs
[    0.571061] usbcore: registered new interface driver hub
[    0.576809] usbcore: registered new device driver usb
[    0.583570] media: Linux media interface: v0.10
[    0.588705] Linux video capture interface: v2.00
[    0.593944] pps_core: LinuxPPS API ver. 1 registered
[    0.598784] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti 
[    0.608507] PTP clock support registered
[    0.613375] EDAC MC: Ver: 3.0.0
[    0.619722] Advanced Linux Sound Architecture Driver Initialized.
[    0.635193] DMA-API: preallocated 4096 debug entries
[    0.640173] DMA-API: debugging enabled by kernel config
[    0.645931] Switched to clocksource arm_global_timer
[    0.708643] NET: Registered protocol family 2
[    0.715537] TCP established hash table entries: 4096 (order: 2, 16384 bytes)
[    0.723784] TCP bind hash table entries: 4096 (order: 5, 147456 bytes)
[    0.731835] TCP: Hash tables configured (established 4096 bind 4096)
[    0.738335] TCP: reno registered
[    0.741466] UDP hash table entries: 256 (order: 2, 20480 bytes)
[    0.747744] UDP-Lite hash table entries: 256 (order: 2, 20480 bytes)
[    0.755253] NET: Registered protocol family 1
[    0.761141] RPC: Registered named UNIX socket transport module.
[    0.767006] RPC: Registered udp transport module.
[    0.771652] RPC: Registered tcp transport module.
[    0.776419] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.783713] hw perfevents: enabled with ARMv7 Cortex-A9 PMU driver, 7 counters available
[    0.797571] futex hash table entries: 512 (order: 3, 32768 bytes)
[    0.811246] jffs2: version 2.2. (NAND) (SUMMARY)  c 2001-2006 Red Hat, Inc.
[    0.818811] msgmni has been set to 982
[    0.824066] io scheduler noop registered
[    0.827977] io scheduler deadline registered
[    0.832268] io scheduler cfq registered (default)
[    0.854356] dma-pl330 f8003000.ps7-dma: Loaded driver for PL330 DMAC-2364208
[    0.861354] dma-pl330 f8003000.ps7-dma:      DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16
[    0.873392] e0001000.serial: ttyPS0 at MMIO 0xe0001000 (irq = 82, base_baud = 3125000) is a xuartps
[    0.882871] console [ttyPS0] enabled
[    0.882871] console [ttyPS0] enabled
[    0.889986] bootconsole [earlycon0] disabled
[    0.889986] bootconsole [earlycon0] disabled
[    0.901175] xdevcfg f8007000.ps7-dev-cfg: ioremap 0xf8007000 to e0866000
[    0.911094] [drm] Initialized drm 1.1.0 20060810
[    0.949294] brd: module loaded
[    0.971664] loop: module loaded
[    0.987642] m25p80 spi0.0: found s25fl128s1, expected n25q128
[    0.993349] m25p80 spi0.0: s25fl128s1 (16384 Kbytes)
[    0.998460] 4 ofpart partitions found on MTD device spi0.0
[    1.003865] Creating 4 MTD partitions on "spi0.0":
[    1.009621] 0x000000000000-0x000000400000 : "qspi-fsbl-uboot"
[    1.023055] 0x000000400000-0x000000900000 : "qspi-linux"
[    1.033401] 0x000000900000-0x000000920000 : "qspi-device-tree"
[    1.044167] 0x000000920000-0x000001000000 : "qspi-user"
[    1.063739] e1000e: Intel(R) PRO/1000 Network Driver - 2.3.2-k
[    1.069627] e1000e: Copyright(c) 1999 - 2013 Intel Corporation.
[    1.081368] libphy: XEMACPS mii bus: probed
[    1.087870] xemacps e000b000.ps7-ethernet: pdev->id -1, baseaddr 0xe000b000, irq 54
[    1.098403] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.105336] ehci-pci: EHCI PCI platform driver
[    1.110697] ULPI transceiver vendor/product ID 0x0424/0x0007
[    1.116450] Found SMSC USB3320 ULPI transceiver.
[    1.121003] ULPI integrity check: passed.
[    1.126203] zynq-ehci zynq-ehci.0: Xilinx Zynq USB EHCI Host Controller
[    1.133473] zynq-ehci zynq-ehci.0: new USB bus registered, assigned bus number 1
[    1.165922] zynq-ehci zynq-ehci.0: irq 53, io mem 0x00000000
[    1.185903] zynq-ehci zynq-ehci.0: USB 2.0 started, EHCI 1.00
[    1.198666] hub 1-0:1.0: USB hub found
[    1.202644] hub 1-0:1.0: 1 port detected
[    1.210665] usbcore: registered new interface driver usb-storage
[    1.219508] mousedev: PS/2 mouse device common for all mice
[    1.227214] i2c /dev entries driver
[    1.239710] zynq-edac f8006000.ps7-ddrc: ecc not enabled
[    1.245925] cpufreq_cpu0: failed to get cpu0 regulator: -19
[    1.254299] Xilinx Zynq CpuIdle Driver started
[    1.260673] sdhci: Secure Digital Host Controller Interface driver
[    1.267000] sdhci: Copyright(c) Pierre Ossman
[    1.271276] sdhci-pltfm: SDHCI platform and OF driver helper
[    1.277505] mmc0: no vqmmc regulator found
[    1.281528] mmc0: no vmmc regulator found
[    1.325849] mmc0: SDHCI controller on e0100000.ps7-sdio [e0100000.ps7-sdio] using ADMA
[    1.341426] usbcore: registered new interface driver usbhid
[    1.347056] usbhid: USB HID core driver
[    1.366130] TCP: cubic registered
[    1.369379] NET: Registered protocol family 17
[    1.374278] Registering SWP/SWPB emulation handler
[    1.381681] regulator-dummy: disabling
[    1.386244] drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
[    1.402645] mmc0: new high speed SDHC card at address b368
[    1.410947] mmcblk0: mmc0:b368 USD   7.45 GiB
[    1.420764] ALSA device list:
[    1.424005]   No soundcards found.
[    1.424216]  mmcblk0: p1 p2
[    4.437424] EXT4-fs (mmcblk0p2): recovery complete
[    4.491589] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[    4.499763] VFS: Mounted root (ext4 filesystem) on device 179:2.
[    4.514787] devtmpfs: mounted
[    4.518106] Freeing unused kernel memory: 196K (c06e9000 - c071a000)
[    5.963317] random: nonblocking pool is initializedinated with status 5e

Last login: Thu Jan  1 00:00:22 UTC 1970 on tty1
Welcome to Linaro 12.11 (GNU/Linux 3.14.0-xilinx-13567-g906a2c9-dirty armv7l)

 * Documentation:  https://wiki.linaro.org/

New release '14.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

root@linaro-ubuntu-desktop:~#
  1. 2014年09月15日 22:00 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

ZYBO用のEmbedded Linux での u-boot のログ

ZYBO用のEmbedded Linux(root file system をSDカードの第2パーティションへ)”で、いろいろとエラーは出ているが、SDカードの第2パーティションをRoot File System としてマウント出来たようだ。
apt-get コマンドも実行することができた。
ZYBO_EM_Linux_134_140915.png

しかし残念ながら、少しすると
[   71.114896] cpufreq_cpu0: failed to set clock rate: -16
[ 71.120039] cpufreq: __cpufreq_driver_target: Failed to change cpu frequency: -16
が出まくって、使いものにならない。とっても残念だ。。。

ikwzmさんから、u-boot の環境変数を見る方法を教えてもらった。それは、起動時にカウントしているが、その時にどれかのキーボードのキーを押して u-boot を止め、
env print
を実行して環境変数を見た。その結果、sdboot は、
sdboot=if mmcinfo; then run uenvboot; echo Copying Linux from SD to RAM... && fatload mmc 0 0x3000000 ${kernel_image} && fatload mmc 0 0x2A00000 ${devicetree_image} && fatload mmc 0 0x2000000 ${ramdisk_image} && bootm 0x3000000 0x2000000 0x2A00000; fi
で、zynq-common.h を修正したのに修正が反映されていないので、他のインクルード・ファイルが影響しているのかもしれない?
下に u-boot の環境変数をすべて貼っておく。
 0
zynq-uboot> env print
baudrate=115200
bitstream_image=system.bit.bin
boot_image=BOOT.bin
boot_size=0xF00000
bootcmd=run $modeboot
bootdelay=3
bootenv=uEnv.txt
devicetree_image=devicetree.dtb
devicetree_size=0x20000
ethact=Gem.e000b000
ethmacskip=0
fdt_high=0x20000000
importbootenv=echo Importing environment from SD ...; env import -t ${loadbootenv_addr} $filesize
initrd_high=0x20000000
ipaddr=10.10.70.102
jtagboot=echo TFTPing Linux to RAM... && tftp 0x3000000 ${kernel_image} && tftp 0x2A00000 ${devicetree_image} && tftp 0x2000000 ${ramdisk_image} && bootm 0x3000000 0x2000000 0x2A00000
kernel_image=uImage
kernel_size=0x500000
loadbit_addr=0x100000
loadbootenv=fatload mmc 0 ${loadbootenv_addr} ${bootenv}
loadbootenv_addr=0x2000000
mmc_loadbit_fat=echo Loading bitstream from SD/MMC/eMMC to RAM.. && mmcinfo && fatload mmc 0 ${loadbit_addr} ${bitstream_image} && fpga load 0 ${loadbit_addr} ${filesize}
modeboot=sdboot
nandboot=echo Copying Linux from NAND flash to RAM... && nand read 0x3000000 0x100000 ${kernel_size} && nand read 0x2A00000 0x600000 ${devicetree_size} && echo Copying ramdisk... && nand read 0x2000000 0x620000 ${ramdisk_size} && bootm 0x3000000 0x2000000 0x2A00000
norboot=echo Copying Linux from NOR flash to RAM... && cp.b 0xE2100000 0x3000000 ${kernel_size} && cp.b 0xE2600000 0x2A00000 ${devicetree_size} && echo Copying ramdisk... && cp.b 0xE2620000 0x2000000 ${ramdisk_size} && bootm 0x3000000 0x2000000 0x2A00000
qspiboot=echo Copying Linux from QSPI flash to RAM... && sf probe 0 0 0 && sf read 0x3000000 0x100000 ${kernel_size} && sf read 0x2A00000 0x600000 ${devicetree_size} && echo Copying ramdisk... && sf read 0x2000000 0x620000 ${ramdisk_size} && bootm 0x3000000 0x2000000 0x2A00000
ramdisk_image=uramdisk.image.gz
ramdisk_size=0x5E0000
rsa_jtagboot=echo TFTPing Image to RAM... && tftp 0x100000 ${boot_image} && zynqrsa 0x100000 && bootm 0x3000000 0x2000000 0x2A00000
rsa_nandboot=echo Copying Image from NAND flash to RAM... && nand read 0x100000 0x0 ${boot_size} && zynqrsa 0x100000 && bootm 0x3000000 0x2000000 0x2A00000
rsa_norboot=echo Copying Image from NOR flash to RAM... && cp.b 0xE2100000 0x100000 ${boot_size} && zynqrsa 0x100000 && bootm 0x3000000 0x2000000 0x2A00000
rsa_qspiboot=echo Copying Image from QSPI flash to RAM... && sf probe 0 0 0 && sf read 0x100000 0x0 ${boot_size} && zynqrsa 0x100000 && bootm 0x3000000 0x2000000 0x2A00000
rsa_sdboot=echo Copying Image from SD to RAM... && fatload mmc 0 0x100000 ${boot_image} && zynqrsa 0x100000 && bootm 0x3000000 0x2000000 0x2A00000
sdboot=if mmcinfo; then run uenvboot; echo Copying Linux from SD to RAM... && fatload mmc 0 0x3000000 ${kernel_image} && fatload mmc 0 0x2A00000 ${devicetree_image} && fatload mmc 0 0x2000000 ${ramdisk_image} && bootm 0x3000000 0x2000000 0x2A00000; fi
serverip=10.10.70.101
stderr=serial
stdin=serial
stdout=serial
uenvboot=if run loadbootenv; then echo Loaded environment from ${bootenv}; run importbootenv; fi; if test -n $uenvcmd; then echo Running uenvcmd ...; run uenvcmd; fi

Environment size: 3081/131068 bytes
zynq-uboot>


(2014/09/15:追記)
jujurou さんに、”cpu clock freq change”を教えてもらったので、その通りにやってみたら、出まくっていたメッセージが止まって、Ubuntu を使うことが出来るようになった。LANケーブルを接続すると、apt-get update もできた。
ZYBO_EM_Linux_143_140915.png

後でやり方をまとめます。
  1. 2014年09月15日 05:21 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

ZYBO用のEmbedded Linux(root file system をSDカードの第2パーティションへ)

最近、腰が痛くて困っています。2ヶ月前に蜂に刺されて腰をいためたんですが、まだ直っていません。困りました。

ZYBO用のEmbedded Linux チュートリアル”をやったのだが、SDカードの第2パーティションにUbuntuのroot file system を書いて、ブート後に使用するようにしたいと思ってやっていたのだが成功しない。。。(参考は、”ZedBoard用のUbuntu Linuxをビルド7(rootfsの書き込みと実機動作)”)

やり方としては、/home/masaaki/ZYBO/Digilent_Linux_Tutrial/u-boot-Digilent-Dev/include/configs ディレクトリのzynq-common.h の
	"sdboot=if mmcinfo; then " \
"run uenvboot; " \
"echo Copying Linux from SD to RAM... && " \
"fatload mmc 0 0x3000000 ${kernel_image} && " \
"fatload mmc 0 0x2A00000 ${devicetree_image} && " \
"fatload mmc 0 0x2000000 ${ramdisk_image} && " \
"bootm 0x3000000 0x2000000 0x2A00000; " \
"fi\0" \


	"sdboot=if mmcinfo; then " \
"run uenvboot; " \
"echo Copying Linux from SD to RAM... && " \
"fatload mmc 0 0x3000000 ${kernel_image} && " \
"fatload mmc 0 0x2A00000 ${devicetree_image} && " \
"bootm 0x3000000 - 0x2A00000; " \
"fi\0" \

に変更して、u-bootをビルドした。
これで、BOOT.bin を再度生成した。
次に、/home/masaaki/ZYBO/Digilent_Linux_Tutrial/drivers の zynq-zybo.dts の bootargs を以下の様に変更した。

bootargs = "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=1";

生成されたdevicetree.dts とBOOT.bin をSDカードの既存のファイルと入れ替えた。これで、ZYBOをブートしてみたが、RAMDISKが使用されるのは変わらなかった。残念。
Linuxブート後のroot file system をSDカードの第2パーティションにする方法をご存じの方は教えて下さい。よろしくお願いします。

u-bootやdevicetree のことを知りたくて、この2,3日いろいろとググってました。良い参考ページをご存じの方はお知らせ下さい。こちらもよろしくお願いします。

私がググって良いと思ったページを 書いておきます。
Device Tree 入門
Zynq のビルドプロセスをスクリプト化する(そうか.jouはtclスクリプトファイルだったのか?)
ARM Linux用のキャッシュ・フラッシュ方法 cacheflush()、ARMは第3引数を0にする。”L.Entisの日記: ARMユーザーモードでCPUキャッシュフラッシュ方法” ”CACHEFLUSH
Porting U-Boot To Your Board

(追記)
一応、SDカードの第2パーティションから立ち上げる事ができたと思う。
やり方としては、まずは、Linuxカーネルのビルドで、
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- xilinx_zynq_defconfig
を行ってから、
make ARCH=arm menuconfig
を行う。メニューが立ち上がるので、General setup に入る。
ZYBO_EM_Linux_132_140914.png

Initilal RAM filesystem and RAM disk にチェックが入っているので、Nキーを押してチェックを外して、Save し、Exitする。
ZYBO_EM_Linux_133_140914.png

Linuxカーネルをコンパイルする。
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-
uImageを作る。
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- UIMAGE_LOADADDR=0x8000 uImage
これで、uImage ができたので、SDカードの第1パーティションのuImage と入れ替えて、ZYBOをブートすると、第2パーティション(mmcblk0p2) がデータ・モードでマウントされたが、Optsになった。一応、プロンプトは出たが、おかしい。第2パーティションには、LinaroのUbuntuのroot fs が入っている。

それに、u-boot で、RAMDISKイメージを読んでいる。これを止めたい。。。

とりあえずは、RAMDISKイメージを展開したファイル群をSDカードの第2パーティションに入れてみて、ブートできるかどうか確かめてみます。
最後に、起動メッセージを貼っておきます。
 0
Device: zynq_sdhci
Manufacturer ID: 74
OEM: 4a45
Name: USD
Tran Speed: 50000000
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 7.5 GiB
Bus Width: 4-bit
reading uEnv.txt
** Unable to read file uEnv.txt **
Copying Linux from SD to RAM...
reading uImage
3982032 bytes read in 347 ms (10.9 MiB/s)
reading devicetree.dtb
7490 bytes read in 16 ms (457 KiB/s)
reading uramdisk.image.gz
3694172 bytes read in 323 ms (10.9 MiB/s)
## Booting kernel from Legacy Image at 03000000 ...
   Image Name:   Linux-3.14.0-xilinx-13567-g906a2
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3981968 Bytes = 3.8 MiB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 02000000 ...
   Image Name:
   Image Type:   ARM Linux RAMDisk Image (gzip compressed)
   Data Size:    3694108 Bytes = 3.5 MiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 02a00000
   Booting using the fdt blob at 0x2a00000
   Loading Kernel Image ... OK
   Loading Ramdisk to 1f7a8000, end 1fb2de1c ... OK
   Loading Device Tree to 1f7a3000, end 1f7a7d41 ... OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 3.14.0-xilinx-13567-g906a2c9-dirty (masaaki@masaaki-VirtualBox) (gcc version 4.6.3 (Sourcery CodeBench Lite 2012.03-79) ) #7 SMP PREEMPT Sun Sep 14 07:41:01 JST 2014
[    0.000000] CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] Machine model: Xilinx Zynq
[    0.000000] bootconsole [earlycon0] enabled
[    0.000000] cma: CMA: reserved 128 MiB at 17400000
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] PERCPU: Embedded 8 pages/cpu @dfb9e000 s10752 r8192 d13824 u32768
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 130048
[    0.000000] Kernel command line: console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=1
[    0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[    0.000000] Memory: 371784K/524288K available (5144K kernel code, 319K rwdata, 1896K rodata, 198K init, 5339K bss, 152504K reserved, 0K highmem)
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xe0800000 - 0xff000000   ( 488 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xe0000000   ( 512 MB)
[    0.000000]     pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
[    0.000000]     modules : 0xbf000000 - 0xbfe00000   (  14 MB)
[    0.000000]       .text : 0xc0008000 - 0xc06e853c   (7042 kB)
[    0.000000]       .init : 0xc06e9000 - 0xc071aa00   ( 199 kB)
[    0.000000]       .data : 0xc071c000 - 0xc076bd50   ( 320 kB)
[    0.000000]        .bss : 0xc076bd5c - 0xc0ca2b88   (5340 kB)
[    0.000000] Preemptible hierarchical RCU implementation.
[    0.000000]  RCU lockdep checking is enabled.
[    0.000000]  Dump stacks of tasks blocking RCU-preempt GP.
[    0.000000]  RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
[    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
[    0.000000] NR_IRQS:16 nr_irqs:16 16
[    0.000000] ps7-slcr mapped to e0802000
[    0.000000] zynq_clock_init: clkc starts at e0802100
[    0.000000] Zynq clock init
[    0.000016] sched_clock: 64 bits at 325MHz, resolution 3ns, wraps every 3383112499200ns
[    0.008494] ps7-ttc #0 at e0804000, irq=43
[    0.013531] Console: colour dummy device 80x30
[    0.017868] Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar
[    0.025924] ... MAX_LOCKDEP_SUBCLASSES:  8
[    0.029946] ... MAX_LOCK_DEPTH:          48
[    0.034120] ... MAX_LOCKDEP_KEYS:        8191
[    0.038540] ... CLASSHASH_SIZE:          4096
[    0.042892] ... MAX_LOCKDEP_ENTRIES:     16384
[    0.047362] ... MAX_LOCKDEP_CHAINS:      32768
[    0.051867] ... CHAINHASH_SIZE:          16384
[    0.056308]  memory used by lock dependency info: 3695 kB
[    0.061757]  per task-struct memory footprint: 1152 bytes
[    0.067199] Calibrating delay loop... 1292.69 BogoMIPS (lpj=6463488)
[    0.110946] pid_max: default: 32768 minimum: 301
[    0.116263] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.122801] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.137261] CPU: Testing write buffer coherency: ok
[    0.143525] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[    0.149159] Setting up static identity map for 0x4de810 - 0x4de868
[    0.155533] L310 cache controller enabled
[    0.159490] l2x0: 8 ways, CACHE_ID 0x410000c8, AUX_CTRL 0x72760000, Cache size: 512 kB
[    0.240420] CPU1: Booted secondary processor
[    0.328274] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
[    0.329385] Brought up 2 CPUs
[    0.342254] SMP: Total of 2 processors activated.
[    0.346955] CPU: All CPU(s) started in SVC mode.
[    0.354979] devtmpfs: initialized
[    0.365625] VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
[    0.379783] regulator-dummy: no parameters
[    0.392605] NET: Registered protocol family 16
[    0.401461] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.415134] cpuidle: using governor ladder
[    0.419120] cpuidle: using governor menu
[    0.446227] syscon f8000000.ps7-slcr: regmap [mem 0xf8000000-0xf8000fff] registered
[    0.458757] hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
[    0.466978] hw-breakpoint: maximum watchpoint size is 4 bytes.
[    0.473152] zynq-ocm f800c000.ps7-ocmc: ZYNQ OCM pool: 256 KiB @ 0xe0880000
[    0.544289] bio: create slab  at 0
[    0.553355] vgaarb: loaded
[    0.557844] SCSI subsystem initialized
[    0.564058] usbcore: registered new interface driver usbfs
[    0.569934] usbcore: registered new interface driver hub
[    0.575715] usbcore: registered new device driver usb
[    0.582196] media: Linux media interface: v0.10
[    0.587019] Linux video capture interface: v2.00
[    0.592284] pps_core: LinuxPPS API ver. 1 registered
[    0.597119] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti 
[    0.606677] PTP clock support registered
[    0.611568] EDAC MC: Ver: 3.0.0
[    0.617834] Advanced Linux Sound Architecture Driver Initialized.
[    0.634107] DMA-API: preallocated 4096 debug entries
[    0.638948] DMA-API: debugging enabled by kernel config
[    0.644791] Switched to clocksource arm_global_timer
[    0.707577] NET: Registered protocol family 2
[    0.714436] TCP established hash table entries: 4096 (order: 2, 16384 bytes)
[    0.722201] TCP bind hash table entries: 4096 (order: 5, 147456 bytes)
[    0.730570] TCP: Hash tables configured (established 4096 bind 4096)
[    0.737102] TCP: reno registered
[    0.740241] UDP hash table entries: 256 (order: 2, 20480 bytes)
[    0.746425] UDP-Lite hash table entries: 256 (order: 2, 20480 bytes)
[    0.753916] NET: Registered protocol family 1
[    0.759893] RPC: Registered named UNIX socket transport module.
[    0.765768] RPC: Registered udp transport module.
[    0.770410] RPC: Registered tcp transport module.
[    0.775172] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.782406] hw perfevents: enabled with ARMv7 Cortex-A9 PMU driver, 7 counters available
[    0.796273] futex hash table entries: 512 (order: 3, 32768 bytes)
[    0.810007] jffs2: version 2.2. (NAND) (SUMMARY)  c 2001-2006 Red Hat, Inc.
[    0.817584] msgmni has been set to 982
[    0.822830] io scheduler noop registered
[    0.826693] io scheduler deadline registered
[    0.831034] io scheduler cfq registered (default)
[    0.852202] dma-pl330 f8003000.ps7-dma: Loaded driver for PL330 DMAC-2364208
[    0.859305] dma-pl330 f8003000.ps7-dma:      DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16
[    0.871313] e0001000.serial: ttyPS0 at MMIO 0xe0001000 (irq = 82, base_baud = 3125000) is a xuartps
[    0.880677] console [ttyPS0] enabled
[    0.880677] console [ttyPS0] enabled
[    0.887888] bootconsole [earlycon0] disabled
[    0.887888] bootconsole [earlycon0] disabled
[    0.898942] xdevcfg f8007000.ps7-dev-cfg: ioremap 0xf8007000 to e0866000
[    0.908850] [drm] Initialized drm 1.1.0 20060810
[    0.947100] brd: module loaded
[    0.969902] loop: module loaded
[    0.985900] m25p80 spi0.0: found s25fl128s1, expected n25q128
[    0.991627] m25p80 spi0.0: s25fl128s1 (16384 Kbytes)
[    0.996908] 4 ofpart partitions found on MTD device spi0.0
[    1.002314] Creating 4 MTD partitions on "spi0.0":
[    1.007161] 0x000000000000-0x000000400000 : "qspi-fsbl-uboot"
[    1.020544] 0x000000400000-0x000000900000 : "qspi-linux"
[    1.030773] 0x000000900000-0x000000920000 : "qspi-device-tree"
[    1.041988] 0x000000920000-0x000001000000 : "qspi-user"
[    1.061673] e1000e: Intel(R) PRO/1000 Network Driver - 2.3.2-k
[    1.067599] e1000e: Copyright(c) 1999 - 2013 Intel Corporation.
[    1.079291] libphy: XEMACPS mii bus: probed
[    1.085781] xemacps e000b000.ps7-ethernet: pdev->id -1, baseaddr 0xe000b000, irq 54
[    1.096578] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.103514] ehci-pci: EHCI PCI platform driver
[    1.111198] zynq-dr e0002000.ps7-usb: Unable to init USB phy, missing?
[    1.118867] usbcore: registered new interface driver usb-storage
[    1.127779] mousedev: PS/2 mouse device common for all mice
[    1.135572] i2c /dev entries driver
[    1.148078] zynq-edac f8006000.ps7-ddrc: ecc not enabled
[    1.154223] cpufreq_cpu0: failed to get cpu0 regulator: -19
[    1.162647] Xilinx Zynq CpuIdle Driver started
[    1.169015] sdhci: Secure Digital Host Controller Interface driver
[    1.175172] sdhci: Copyright(c) Pierre Ossman
[    1.179454] sdhci-pltfm: SDHCI platform and OF driver helper
[    1.185651] mmc0: no vqmmc regulator found
[    1.189679] mmc0: no vmmc regulator found
[    1.234804] mmc0: SDHCI controller on e0100000.ps7-sdio [e0100000.ps7-sdio] using ADMA
[    1.253775] usbcore: registered new interface driver usbhid
[    1.261382] usbhid: USB HID core driver
[    1.276319] TCP: cubic registered
[    1.279570] NET: Registered protocol family 17
[    1.284466] Registering SWP/SWPB emulation handler
[    1.291925] regulator-dummy: disabling
[    1.296263] drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
[    1.305773] mmc0: new high speed SDHC card at address b368
[    1.313862] mmcblk0: mmc0:b368 USD   7.45 GiB
[    1.324035]  mmcblk0: p1 p2
[    1.331178] ALSA device list:
[    1.334099]   No soundcards found.
[    1.370155] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[    1.378352] VFS: Mounted root (ext4 filesystem) on device 179:2.
[    1.395746] devtmpfs: mounted
[    1.399023] Freeing unused kernel memory: 196K (c06e9000 - c071a000)
。+HH1.973137] init: ureadahead main process (582) terminated with status 5
Last login: Thu Jan  1 00:00:12 UTC 1970 on tty1


cat: /var/lib/update-notifier/fsck-at-reboot: No such file or directory
run-parts: /etc/update-motd.d/98-fsck-at-reboot exited with return code 1
Welcome to Linaro 12.11 (GNU/Linux 3.14.0-xilinx-13567-g906a2c9-dirty armv7l)

 * Documentation:  https://wiki.linaro.org/

0 packages can be updated.
0 updates are security updates.

root@linaro-ubuntu-desktop:~#
  1. 2014年09月14日 05:22 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

ZYBO用のEmbedded Linux チュートリアル11(ユーザー・アプリを実行)

ZYBO用のEmbedded Linux チュートリアル10(myLedのドライバの構築とデバイス・ツリーへの追加)”の続き。

ドライバを作ったので、今回は、ユーザー・アプリケーションを作って、実行する。

Embedded Linux® Hands-on Tutorial for the ZYBO™”の”7 User Application”をやってみた。

1./home/masaaki/ZYBO/Digilent_Linux_Tutrial/user_app ディレクトリを作成した。
mkdir user_app
ls

ZYBO_EM_Linux_126_140911.png

2.led_blink.c を作成した。
ZYBO_EM_Linux_127_140911.png

3.Makefile を作成した。led_blink.c と Makefile は、”Embedded Linux® Hands-on Tutorial for the ZYBO をやってみた”さんの 6.2 5 に置いてある。
ZYBO_EM_Linux_128_140911.png

4.make を行って、led_blink 実行ファイルが生成された。
make
ls

ZYBO_EM_Linux_129_140911.png

5.led_blink をSDカードにコピーした。
ZYBO_EM_Linux_130_140911.png

6.SDカードを ZYBO に挿入して電源をONした。

7.Tera Term を ZYBO に接続して、以下のコマンドを実行した。
mount /dev/mmcblk0p1 /mnt/
cd /mnt/
ls
insmod myled.ko
./led_blink
mkdir -p /lib/modules/`uname -r`
cp myled.ko /lib/modules/`uname -r`
rmmod myled

ZYBO_EM_Linux_131_140911.png

./led_blink を実行すると、ZYBO の lLED が点滅を繰り返した。
ユーザー・アプリケーションの実行は成功した。
  1. 2014年09月11日 05:16 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

ZYBO用のEmbedded Linux チュートリアル10(myLedのドライバの構築とデバイス・ツリーへの追加)

ZYBO用のEmbedded Linux チュートリアル9(Frame Buffer)”の続き。

今回は、myLedのドライバを生成して

Embedded Linux® Hands-on Tutorial for the ZYBO™”の”6 Modify Device Tree and Compose Kernel Driver”をやってみた。

1.最初に、/home/masaaki/ZYBO/Digilent_Linux_Tutrial/drivers ディレクトリを作成した。
mkdir drivers
ZYBO_EM_Linux_114_140908.png

2.drivers ディレクトリに入った。
cd drivers

3.gedit で Makefile を作成した。その際に、all: 、clean: などのタグは行の最初に記述する必要があった。
ZYBO_EM_Linux_115_140908.png

obj-m := myled.o

all:
    make -C ../Linux-Digilent-Dev/ M=$(PWD) modules

clean:
    make -C ../Linux-Digilent-Dev/ M=$(PWD) clean


4.ドライバ用のCソース myled.c を作成した。”Embedded Linux® Hands-on Tutorial for the ZYBO をやってみた”さんの 6.2 3-4 にバグ情報がある。myled.c 自体もダウンロード出来るリンクがある。
ZYBO_EM_Linux_116_140908.png

5.ドライバ用のCソースを myled.c をビルドした。
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-
ZYBO_EM_Linux_117_140908.png

現在の drivers ディレクトリの様子を下に示す。myled.ko ができた。
ZYBO_EM_Linux_118_140908.png

6.Linux-Digilent-Dev/arch/arm/boot/dts/zynq-zybo.dts を drivers ディレクトリにコピーした。
cp ../Linux-Digilent-Dev/arch/arm/boot/dts/zynq-zybo.dts .
ZYBO_EM_Linux_119_140908.png

7.zynq-zybo.dts を編集する前に myLed_0 のアドレスを確認する。オフセット・アドレスは 0x43C30000 ~ 0x43C3FFFF までの 64kバイトだった。
ZYBO_EM_Linux_120_140908.png

8.zynq-zybo.dts を gedit で編集して、myled の項目を追加した。私はここでスペルを間違っていて ls /proc で myled がでなくて困った。(gotz_surf さん、ありがとうございました。なお、修正した zynq-zybo.dts は、”Embedded Linux® Hands-on Tutorial for the ZYBO をやってみた”さんにあります。)
ZYBO_EM_Linux_121_140908.png

9.DTCで zynq-zybo.dts をコンパイルして、devicetree.dtb を作成した。
../Linux-Digilent-Dev/scripts/dtc/dtc -I dts -O dtb -o devicetree.dtb zynq-zybo.dts
ZYBO_EM_Linux_122_140908.png

10.出来上がった、myled.ko と devicetree.dtb をSDカードにコピーした。
ZYBO_EM_Linux_123_140908.png

11.10.のSDカードをZYBO に入れて、電源ONでSDカードからブートさせる。

12.SDカードを /mnt ディレクトリにマウントする。
mount /dev/mmcblk0p1 /mnt/

13./mnt ディレクトリに入って、内容を見た。SDカードの内容が見えた。
cd /mnt/
ls


14.myled.ko ドライバを insmod した。
insmod myled.ko

15.ls /proc をしたところ、14 に myled が入っているのが見えた。

16.echo 0xf > /proc/myled でZYBOのLEDが全点灯した。
ZYBO_EM_Linux_125_140910.jpg

17.mkdir -p /lib/modules/`uname -r` を実行した。

18.cp myled.ko /lib/modules/`uname -r` を実行した。。

19./lib/modules ディレクトリに、3.14.0-xilinx-13567-g906a2c9 ディレクトリができた。その中に、myled.ko がコピーされた。

20.rmmod myled でドライバを削除した。
ZYBO_EM_Linux_124_140910.png

なお、電源を消すと、3.14.0-xilinx-13567-g906a2c9 ディレクトリと myled.ko は消えてしまう。RAMDISKに書き込む方法は”ZedBoard Linux のフレームバッファにカメラ画像を表示12(SDカードのイメージ変更)”を参照のこと。

ZYBO用のEmbedded Linux チュートリアル11(ユーザー・アプリを実行)”に続く。
  1. 2014年09月09日 05:29 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

ZYBO用のEmbedded Linux チュートリアル9(Frame Buffer)

ZYBO用のEmbedded Linux チュートリアル8(DTB、RAMDISK、Linux起動)”のおまけ。

前回で、ZYBO で Linux が立ち上がった。今回は、横道にそれて、Frame Buffer (FB) を使って、HDMI や VGA に画像を表示できないかやってみた。因みにビルドした Linux はそのままでは、VGA もHDMI も出力が出ていない。ハードウェアはPLに実装されているので、ソフトウェアで起動してやれば表示できるはずだ。

まずは、実際の FB のアドレスを見てみようということで、”ZedBoard用Digilent Linuxの解析1(フレームバッファの領域確保)”の通りに、Linux-Digilent-Dev/drivers/gpu/drm/drm_fb_cma_helper.c の drm_fbdev_cma_create() 関数に printk() を仕掛けて、再度Linuxをビルドした。但し、warning が表示されたので、記述を少し変更した。下に示す。

dev->mode_config.fb_base = (resource_size_t)obj->paddr;
fbi->screen_base = obj->vaddr + offset;
printk("fbi->screen_base = 0x%x\n" ,(unsigned int)fbi->screen_base); // DEBUG Message by Masaaki
fbi->fix.smem_start = (unsigned long)(obj->paddr + offset);
printk("fbi->fix.smem_start = 0x%lx\n" ,fbi->fix.smem_start); // DEBUG Message by Masaaki
fbi->screen_size = size;
printk("fbi->screen_size = 0x%lx\n" ,fbi->screen_size); // DEBUG Message by Masaaki
fbi->fix.smem_len = size;

起動してみたが、起動メッセージには、アドレスは表示されない。
この関数は実行していないようだ。

次に、
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- menuconfig
で、Kernel Configuration の変更を試みた。

Kernel Configuration 起動時の画面。
ZYBO_EM_Linux_107_140907.png

Device Drivers > Grapihics support に行った。
ZYBO_EM_Linux_108_140907.png

Device Drivers > Grapihics support > Support for frame buffer devices の Simple framebuffer support に * を入れてみた。
ZYBO_EM_Linux_109_140907.png

Device Drivers > Grapihics support の Bootup Logo に * をいれた。
ZYBO_EM_Linux_111_140907.png

右向き矢印で Save を選択してリターン・キーを押すと、.config にセーブするというので、OKでリターン・キーを押した。
ZYBO_EM_Linux_112_140907.png

一旦、元の画面に戻るので、Exitを選択して終了した。
ZYBO_EM_Linux_113_140907.png

これで、再度Linuxをビルドしても、VGAもHDMIも表示されない。。。
仕方がないので、Linuxチュートリアルが終了してから、Linux起動後に、ソフトウェアを起動して、VGA とHDMI の画面を表示してみることにした。

ZYBO用のEmbedded Linux チュートリアル10(myLedのドライバの構築とデバイス・ツリーへの追加)”に続く。
  1. 2014年09月07日 10:51 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

ZYBO用のEmbedded Linux チュートリアル8(DTB、RAMDISK、Linux起動)

ZYBO用のEmbedded Linux チュートリアル7(Linuxカーネルのビルド)”の続き。

DTSをDTCでコンパイルしてDTBを作る。
RAMDISKを用意する。
Digilent Linuxを起動する。

Embedded Linux® Hands-on Tutorial for the ZYBO™”の”5 Test Kernel Image with Pre-built File System”をやってみた。

1.使用するDTSファイルは、/home/masaaki/ZYBO/Digilent_Linux_Tutrial/Linux-Digilent-Dev/arch/arm/boot/dts/zynq-zybo.dts だ。
ZYBO_EM_Linux_95_140904.png

2.zynq-zybo.dts を開いた。
ZYBO_EM_Linux_96_140904.png

3.上の図で bootargs = を、”Figure 51. Edit device tree”の通りに書き換えると、no filesystem could mount root が出て Linuxが起動ししない。これは変更せずにそのままとした。(gotz_surf さん、ありがとうございました)

4.ramdisk8M.image.gz が無いので、ZedBoard用のを借用した。
ZedBoard_OOB_Desin のsd_image フォルダにある。
ZYBO_EM_Linux_98_140904.png

5./home/masaaki/ZYBO/Digilent_Linux_Tutrial ディレクトリに、ramdisk8M.image.gz を置いた。
ZYBO_EM_Linux_99_140904.png

6.Digilent_Linux_Tutrial ディレクトリに行って、 Uramdisk Imageを生成した。
cd ..
./u-boot-Digilent-Dev/tools/mkimage -A arm -T ramdisk -c gzip -d ./ramdisk8M.image.gz uramdisk.image.gz
ZYBO_EM_Linux_100_140904.png

7.Digilent_Linux_Tutrial ディレクトリに uramdisk.image.gz が生成された。
ZYBO_EM_Linux_101_140904.png

8.Linux-Digilent-Dev ディレクトリに戻り、zynq-zybo.dts をコンパイルして、devicetree.dtb を生成した。
cd Linux-Digilent-Dev
./scripts/dtc/dtc -I dts -O dtb -o ../devicetree.dtb arch/arm/boot/dts/zynq-zybo.dts
ZYBO_EM_Linux_102_140904.png

9.Digilent_Linux_Tutrial ディレクトリに devicetree.dtb が生成された。
ZYBO_EM_Linux_103_140904.png

10.SDカードを用意して、”ZYBO用のEmbedded Linux チュートリアル6(BOOT.bin の生成)”で生成した BOOT.bin をコピーした。
ZYBO_EM_Linux_104_140904.png

11.UbuntuにSDカードをマウントして、”ZYBO用のEmbedded Linux チュートリアル7(Linuxカーネルのビルド)”で生成した uImage と devicetree.dtb, uramdisk.image.gz をSDカードにコピーした。
これで、SDカードの準備は終了した。

12.ZYBOを用意して、JP5のジャンパーをSDに変更する。これで、SDカードからブートする。

13.PROG UARTポートから、マイクロUSB B - USB AケーブルでパソコンのUSBポートに接続する。

13.Tera-Term を起動して、115,200bps、8btits, No Parity, 1 stop bit に設定する。

14.Linuxの起動画面が表示された。
ZYBO_EM_Linux_106_140904.png

良かった。やっと起動した。

Linuxの起動メッセージを貼っておく。

 0
Device: zynq_sdhci
Manufacturer ID: 74
OEM: 4a45
Name: USD
Tran Speed: 50000000
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 7.5 GiB
Bus Width: 4-bit
reading uEnv.txt
** Unable to read file uEnv.txt **
Copying Linux from SD to RAM...
reading uImage
3987040 bytes read in 350 ms (10.9 MiB/s)
reading devicetree.dtb
7374 bytes read in 16 ms (449.2 KiB/s)
reading uramdisk.image.gz
3694172 bytes read in 324 ms (10.9 MiB/s)
## Booting kernel from Legacy Image at 03000000 ...
Image Name: Linux-3.14.0-xilinx-13567-g906a2
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 3986976 Bytes = 3.8 MiB
Load Address: 00008000
Entry Point: 00008000
Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 02000000 ...
Image Name:
Image Type: ARM Linux RAMDisk Image (gzip compressed)
Data Size: 3694108 Bytes = 3.5 MiB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
## Flattened Device Tree blob at 02a00000
Booting using the fdt blob at 0x2a00000
Loading Kernel Image ... OK
Loading Ramdisk to 1f7a8000, end 1fb2de1c ... OK
Loading Device Tree to 1f7a3000, end 1f7a7ccd ... OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 3.14.0-xilinx-13567-g906a2c9 (masaaki@masaaki-VirtualBox) (gcc version 4.6.3 (Sourcery CodeBench Lite 2012.03-79) ) #1 SMP PREEMPT Thu Sep 4 04:58:29 JST 2014
[ 0.000000] CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] Machine model: Xilinx Zynq
[ 0.000000] bootconsole [earlycon0] enabled
[ 0.000000] cma: CMA: reserved 128 MiB at 17400000
[ 0.000000] Memory policy: Data cache writealloc
[ 0.000000] PERCPU: Embedded 8 pages/cpu @dfb9e000 s10752 r8192 d13824 u32768
[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 130048
[ 0.000000] Kernel command line: console=ttyPS0,115200 root=/dev/ram rw earlyprintk
[ 0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
[ 0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[ 0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[ 0.000000] Memory: 371776K/524288K available (5144K kernel code, 319K rwdata, 1900K rodata, 202K init, 5339K bss, 152512K reserved, 0K highmem)
[ 0.000000] Virtual kernel memory layout:
[ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
[ 0.000000] fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
[ 0.000000] vmalloc : 0xe0800000 - 0xff000000 ( 488 MB)
[ 0.000000] lowmem : 0xc0000000 - 0xe0000000 ( 512 MB)
[ 0.000000] pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)
[ 0.000000] modules : 0xbf000000 - 0xbfe00000 ( 14 MB)
[ 0.000000] .text : 0xc0008000 - 0xc06e9600 (7046 kB)
[ 0.000000] .init : 0xc06ea000 - 0xc071ca00 ( 203 kB)
[ 0.000000] .data : 0xc071e000 - 0xc076dde0 ( 320 kB)
[ 0.000000] .bss : 0xc076ddec - 0xc0ca4c08 (5340 kB)
[ 0.000000] Preemptible hierarchical RCU implementation.
[ 0.000000] RCU lockdep checking is enabled.
[ 0.000000] Dump stacks of tasks blocking RCU-preempt GP.
[ 0.000000] RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
[ 0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
[ 0.000000] NR_IRQS:16 nr_irqs:16 16
[ 0.000000] ps7-slcr mapped to e0802000
[ 0.000000] zynq_clock_init: clkc starts at e0802100
[ 0.000000] Zynq clock init
[ 0.000016] sched_clock: 64 bits at 325MHz, resolution 3ns, wraps every 3383112499200ns
[ 0.008493] ps7-ttc #0 at e0804000, irq=43
[ 0.013513] Console: colour dummy device 80x30
[ 0.017858] Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar
[ 0.025912] ... MAX_LOCKDEP_SUBCLASSES: 8
[ 0.029939] ... MAX_LOCK_DEPTH: 48
[ 0.034109] ... MAX_LOCKDEP_KEYS: 8191
[ 0.038530] ... CLASSHASH_SIZE: 4096
[ 0.042882] ... MAX_LOCKDEP_ENTRIES: 16384
[ 0.047353] ... MAX_LOCKDEP_CHAINS: 32768
[ 0.051859] ... CHAINHASH_SIZE: 16384
[ 0.056298] memory used by lock dependency info: 3695 kB
[ 0.061748] per task-struct memory footprint: 1152 bytes
[ 0.067191] Calibrating delay loop... 1292.69 BogoMIPS (lpj=6463488)
[ 0.110945] pid_max: default: 32768 minimum: 301
[ 0.116252] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.122796] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.137247] CPU: Testing write buffer coherency: ok
[ 0.143490] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[ 0.149135] Setting up static identity map for 0x4de8a0 - 0x4de8f8
[ 0.155508] L310 cache controller enabled
[ 0.159465] l2x0: 8 ways, CACHE_ID 0x410000c8, AUX_CTRL 0x72760000, Cache size: 512 kB
[ 0.240413] CPU1: Booted secondary processor
[ 0.328273] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
[ 0.329397] Brought up 2 CPUs
[ 0.342262] SMP: Total of 2 processors activated.
[ 0.346963] CPU: All CPU(s) started in SVC mode.
[ 0.354978] devtmpfs: initialized
[ 0.365397] VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
[ 0.379551] regulator-dummy: no parameters
[ 0.392368] NET: Registered protocol family 16
[ 0.401194] DMA: preallocated 256 KiB pool for atomic coherent allocations
[ 0.414840] cpuidle: using governor ladder
[ 0.418827] cpuidle: using governor menu
[ 0.446077] syscon f8000000.ps7-slcr: regmap [mem 0xf8000000-0xf8000fff] registered
[ 0.457983] hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
[ 0.465933] hw-breakpoint: maximum watchpoint size is 4 bytes.
[ 0.472171] zynq-ocm f800c000.ps7-ocmc: ZYNQ OCM pool: 256 KiB @ 0xe0880000
[ 0.543450] bio: create slab at 0
[ 0.552956] vgaarb: loaded
[ 0.557430] SCSI subsystem initialized
[ 0.563624] usbcore: registered new interface driver usbfs
[ 0.569496] usbcore: registered new interface driver hub
[ 0.575262] usbcore: registered new device driver usb
[ 0.581743] media: Linux media interface: v0.10
[ 0.586574] Linux video capture interface: v2.00
[ 0.591814] pps_core: LinuxPPS API ver. 1 registered
[ 0.596654] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti
[ 0.606207] PTP clock support registered
[ 0.611122] EDAC MC: Ver: 3.0.0
[ 0.617383] Advanced Linux Sound Architecture Driver Initialized.
[ 0.632887] DMA-API: preallocated 4096 debug entries
[ 0.637726] DMA-API: debugging enabled by kernel config
[ 0.643572] Switched to clocksource arm_global_timer
[ 0.706983] NET: Registered protocol family 2
[ 0.714796] TCP established hash table entries: 4096 (order: 2, 16384 bytes)
[ 0.721908] TCP bind hash table entries: 4096 (order: 5, 147456 bytes)
[ 0.730181] TCP: Hash tables configured (established 4096 bind 4096)
[ 0.736807] TCP: reno registered
[ 0.739938] UDP hash table entries: 256 (order: 2, 20480 bytes)
[ 0.746128] UDP-Lite hash table entries: 256 (order: 2, 20480 bytes)
[ 0.753794] NET: Registered protocol family 1
[ 0.759683] RPC: Registered named UNIX socket transport module.
[ 0.765536] RPC: Registered udp transport module.
[ 0.770194] RPC: Registered tcp transport module.
[ 0.774955] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 0.782367] Trying to unpack rootfs image as initramfs...
[ 0.789226] rootfs image is not initramfs (no cpio magic); looks like an initrd
[ 0.822928] Freeing initrd memory: 3604K (df7a8000 - dfb2d000)
[ 0.829108] hw perfevents: enabled with ARMv7 Cortex-A9 PMU driver, 7 counters available
[ 0.843037] futex hash table entries: 512 (order: 3, 32768 bytes)
[ 0.856747] jffs2: version 2.2. (NAND) (SUMMARY) c 2001-2006 Red Hat, Inc.
[ 0.864307] msgmni has been set to 989
[ 0.869563] io scheduler noop registered
[ 0.873369] io scheduler deadline registered
[ 0.877910] io scheduler cfq registered (default)
[ 0.902783] dma-pl330 f8003000.ps7-dma: Loaded driver for PL330 DMAC-2364208
[ 0.909753] dma-pl330 f8003000.ps7-dma: DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16
[ 0.921882] e0001000.serial: ttyPS0 at MMIO 0xe0001000 (irq = 82, base_baud = 3125000) is a xuartps
[ 0.931339] console [ttyPS0] enabled
[ 0.931339] console [ttyPS0] enabled
[ 0.938452] bootconsole [earlycon0] disabled
[ 0.938452] bootconsole [earlycon0] disabled
[ 0.949707] xdevcfg f8007000.ps7-dev-cfg: ioremap 0xf8007000 to e0866000
[ 0.959543] [drm] Initialized drm 1.1.0 20060810
[ 0.997561] brd: module loaded
[ 1.019915] loop: module loaded
[ 1.035839] m25p80 spi0.0: found s25fl128s1, expected n25q128
[ 1.041567] m25p80 spi0.0: s25fl128s1 (16384 Kbytes)
[ 1.047016] 4 ofpart partitions found on MTD device spi0.0
[ 1.052420] Creating 4 MTD partitions on "spi0.0":
[ 1.057268] 0x000000000000-0x000000400000 : "qspi-fsbl-uboot"
[ 1.071384] 0x000000400000-0x000000900000 : "qspi-linux"
[ 1.081670] 0x000000900000-0x000000920000 : "qspi-device-tree"
[ 1.092644] 0x000000920000-0x000001000000 : "qspi-user"
[ 1.112198] e1000e: Intel(R) PRO/1000 Network Driver - 2.3.2-k
[ 1.118096] e1000e: Copyright(c) 1999 - 2013 Intel Corporation.
[ 1.129896] libphy: XEMACPS mii bus: probed
[ 1.136320] xemacps e000b000.ps7-ethernet: pdev->id -1, baseaddr 0xe000b000, irq 54
[ 1.147144] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 1.154174] ehci-pci: EHCI PCI platform driver
[ 1.159287] ULPI transceiver vendor/product ID 0x0424/0x0007
[ 1.164925] Found SMSC USB3320 ULPI transceiver.
[ 1.169488] ULPI integrity check: passed.
[ 1.174436] zynq-ehci zynq-ehci.0: Xilinx Zynq USB EHCI Host Controller
[ 1.181706] zynq-ehci zynq-ehci.0: new USB bus registered, assigned bus number 1
[ 1.213688] zynq-ehci zynq-ehci.0: irq 53, io mem 0x00000000
[ 1.233655] zynq-ehci zynq-ehci.0: USB 2.0 started, EHCI 1.00
[ 1.246329] hub 1-0:1.0: USB hub found
[ 1.250301] hub 1-0:1.0: 1 port detected
[ 1.258309] usbcore: registered new interface driver usb-storage
[ 1.267177] mousedev: PS/2 mouse device common for all mice
[ 1.274882] i2c /dev entries driver
[ 1.287419] zynq-edac f8006000.ps7-ddrc: ecc not enabled
[ 1.293669] cpufreq_cpu0: failed to get cpu0 regulator: -19
[ 1.301987] Xilinx Zynq CpuIdle Driver started
[ 1.308353] sdhci: Secure Digital Host Controller Interface driver
[ 1.314691] sdhci: Copyright(c) Pierre Ossman
[ 1.318972] sdhci-pltfm: SDHCI platform and OF driver helper
[ 1.325217] mmc0: no vqmmc regulator found
[ 1.329241] mmc0: no vmmc regulator found
[ 1.373598] mmc0: SDHCI controller on e0100000.ps7-sdio [e0100000.ps7-sdio] using ADMA
[ 1.389203] usbcore: registered new interface driver usbhid
[ 1.394824] usbhid: USB HID core driver
[ 1.414006] TCP: cubic registered
[ 1.417256] NET: Registered protocol family 17
[ 1.422070] Registering SWP/SWPB emulation handler
[ 1.429450] regulator-dummy: disabling
[ 1.433795] drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
[ 1.450439] mmc0: new high speed SDHC card at address b368
[ 1.458796] mmcblk0: mmc0:b368 USD 7.45 GiB
[ 1.468181] ALSA device list:
[ 1.471439] No soundcards found.
[ 1.471650] mmcblk0: p1 p2
[ 1.479522] RAMDISK: gzip image found at block 0
[ 1.890361] EXT2-fs (ram0): warning: mounting unchecked fs, running e2fsck is recommended
[ 1.898824] VFS: Mounted root (ext2 filesystem) on device 1:0.
[ 1.905578] devtmpfs: mounted
[ 1.908884] Freeing unused kernel memory: 200K (c06ea000 - c071c000)
Starting rcS...
++ Mounting filesystem
++ Setting up mdev
++ Configure static IP 192.168.1.10
++ Starting telnet daemon
++ Starting http daemon
++ Starting ftp daemon
++ Starting dropbear (ssh) daemon
[ 2.674675] random: dropbear urandom read with 7 bits of entropy available
++ Starting OLED Display
insmod: can't read '/lib/modules/3.14.0-xilinx-13567-g906a2c9/pmodoled-gpio.ko': No such file or directory
++ Exporting LEDs & SWs
rcS Complete
zynq> ls
bin lib lost+found proc sys var
dev licenses mnt root tmp
etc linuxrc opt sbin usr
zynq>


なお、LANケーブルは接続していない。

ZYBO用のEmbedded Linux チュートリアル10(myLedのドライバの構築とデバイス・ツリーへの追加)”に続く。
  1. 2014年09月06日 06:24 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

ISE14.7で”ERROR:MapLib:979 - LUT? symbol”が出た時の応急対処

”ISE14.1, 14.2 で”ERROR:MapLib:979 - LUT5 symbol”が出る“というブログ記事を書きましたが、またISE14.7 で、”ERROR:MapLib:979 - LUT6 symbol”が出てしまいました。
前回はPlanAheadプロジェクトに移行することで回避出来ましたが、今回、MAPのプロパティをいじってみます。
-u オプション (Trim Unconnected Signals) のチェックを外すとMAP は通りました。
LUT6_Error_140904.png

これで、本当に良いのかどうか?はわかりません。とりあえず、MAPエラーを回避する方法でした。。。

MAP によるロジックの自動削除に関しては、“AR# 23990 11.1 MAP - MAP によるロジックの自動削除に関するマスタ アンサー”がためになります。

(追記)
MAPは通ったんですが、BitGenのDRCでエラーになりました。やはり、この方法は使えないようです。
  1. 2014年09月04日 10:24 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:0

ZYBO用のEmbedded Linux チュートリアル7(Linuxカーネルのビルド)

ZYBO用のEmbedded Linux チュートリアル6(BOOT.bin の生成)”の続き。

今回は、Digilent Linux カーネルをビルドする。

Embedded Linux® Hands-on Tutorial for the ZYBO™”の”4 Compile Linux Kernel”をやってみる。

4 Linuxカーネルのコンパイル

4.2


1.Digilent Linux を github から clone した。(2014/09/04:訂正、master を使うと zynq_zybo.dts が無かったので、master-next を使用する。”Embedded Linux® Hands-on Tutorial for the ZYBO をやってみた”の4.2 1参照)
git clone -b master-next https://github.com/DigilentInc/Linux-Digilent-Dev.git
ZYBO_EM_Linux_88_140903.png

2.ls コマンドでディレクトリを見ると Linux-Digilent -DEV ディレクトリができていた。

3.cd Linux-Digilent-Dev/ コマンドで、 Linux-Digilent -DEV ディレクトリに入った。

4.ZYBO用のデフォルト・コンフィギュレーションを行った。
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- xilinx_zynq_defconfig
ZYBO_EM_Linux_89_140903.png

5.ZYBO用のデフォルト・コンフィギュレーションが終了した。
ZYBO_EM_Linux_90_140903.png

6.Linuxカーネルのコンパイルを行った。
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-
成功した。コンパイルに約1時間程度かかった。
ZYBO_EM_Linux_91_140903.png

7.Linux-Digilent-Dev/arch/arm/boot ディレクトリに zImage ができた。
ZYBO_EM_Linux_92_140903.png

8.uImage を作成した。
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- UIMAGE_LOADADDR=0x8000 uImage
ZYBO_EM_Linux_93_140903.png

9.uImage が作成された。
ZYBO_EM_Linux_94_140903.png

ZYBO用のEmbedded Linux チュートリアル8(DTB、RAMDISK、Linux起動)”へ続く。
  1. 2014年09月03日 05:36 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

ZYBO用のEmbedded Linux チュートリアル6(BOOT.bin の生成)

ZYBO用のEmbedded Linux チュートリアル5(U-Bootのビルド)”の続き。

Embedded Linux® Hands-on Tutorial for the ZYBO™”の”3 Generate BOOT.BIN”をやってみる。

3 BOOT.bin の生成

3.2

1.ハードウェアをエクスポートする。Vivado 2014.2 で、File メニューから Export -> Export Hardware を選択した。
ZYBO_EM_Linux_67_140901.png

2.Export Hardware ダイアログが表示された。OKボタンをクリックした。
ZYBO_EM_Linux_68_140901.png

3.File メニューから Launch SDK を選択した。
ZYBO_EM_Linux_69_140901.png

4.Launch SDK ダイアログが表示された。
ZYBO_EM_Linux_70_140901.png

5.SDKが起動した。myLed のアドレスも表示されている。
ZYBO_EM_Linux_71_140901.png

6.SDKで、File メニューから New -> Application Project を選択した。
ZYBO_EM_Linux_72_140902.png

7.New Project ダイアログが表示された。Project Name に FSBL と入力して、Next > ボタンをクリックした。
ZYBO_EM_Linux_73_140902.png

8.Templates 画面で、Zynq FSBL を指定して、Finish ボタンをクリックした。
ZYBO_EM_Linux_74_140902.png

9.FSBLフォルダとFSBL_bspフォルダが作られて、自動でビルドされた。

10.イーサーネットのマックアドレスを電源ONした時に一定にしておくと言っているようです。そのため、fsbl_hook.c のコードを変更するそうです。
ZYBO_EM_Linux_75_140902.png

11.Z:\ZYBO_BS_emlx\source\vivado\SDK\fsbl\fsbl_hooks.c を使用する。
ZYBO_EM_Linux_76_140902.png

12.Z:\ZYBO_BS_emlx\source\vivado\SDK\fsbl\fsbl_hooks.c をエディタで表示して、全選択し、内容をコピーする。

13.FSBL -> src -> fsbl_hooks.c のCコードを Edit メニュー -> Select All で全選択して、ペーストした。セーブ・アイコンをクリックして、セーブした。
ZYBO_EM_Linux_77_140902.png

14.自動でビルドされ、Z:\ZYBO_BS_emlx\source\vivado\hw\zybo_bsd\zybo_bsd.sdk\FSBL\Debug\FSBL.elf ができた。
ZYBO_EM_Linux_78_140902.png

15.FSBLフォルダを右クリックして、右クリックメニューから Create Boot Image をクリックした。
ZYBO_EM_Linux_79_140902.png

16.Create Zynq Boot Image ダイアログが表示された。
ZYBO_EM_Linux_80_140902.png

17.Add partition ダイアログが表示された。File path の Browse ボタンをクリックした。
ZYBO_EM_Linux_81_140902.png

18.Partition file ダイアログが表示された。Z:\ZYBO_BS_emlx\source\vivado\hw\zybo_bsd\zybo_bsd.sdk\system_wrapper_hw_platform_0\system_wrapper.bit を選択して、開くボタンをクリックした。
ZYBO_EM_Linux_82_140902.png

19.Add partition ダイアログのFile path に system_wrapper.bit が入った。Partition type はdatafile とする。OKボタンをクリックした。
ZYBO_EM_Linux_83_140902.png

20.File path の2番めに、system_wrapper.bit が入った。
ZYBO_EM_Linux_84_140902.png

21.同様に、File path の Browse ボタンをクリックした。

22.Add partition ダイアログが表示された。File path の Browse ボタンをクリックした。

23.Partition file ダイアログが表示された。前回作成した Z:\ZYBO_BS_emlx\sd_image\u-boot.elf を選んで、開くボタンをクリックした。

24.Add partition ダイアログのFile path に u-boot.elf が入った。Partition type はdatafile とする。OKボタンをクリックした。
ZYBO_EM_Linux_85_140902.png

25.File path の3番目に、u-boot.elf が入った。これで終了なので、Create Image ボタンをクリックした。
ZYBO_EM_Linux_86_140902.png

26.Z:\ZYBO_BS_emlx\source\vivado\hw\zybo_bsd\zybo_bsd.sdk\FSBL\bootimage フォルダに BOOT.bin が生成された。
ZYBO_EM_Linux_87_140902.png

ZYBO用のEmbedded Linux チュートリアル7(Linuxカーネルのビルド)”に続く。
  1. 2014年09月02日 05:29 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

AXI4 Slave Bus Functional Model のバグフィックス

AXI4 Slave Bus Functional Model のVHDL版2
AXI4 Slave Bus Functional Model のVHDL版3(RAMの初期化ファイルを追加)
AXI4 Slave Bus Functional Model のVerilog HDL版2
AXI4 Slave Bus Functional Model のVerilog HDL版3(RAMの初期化ファイルを追加)
に貼り付けたAXI4 Slave BFMにバグが見つかった。(見つけてくれたk林さん、ありがとうございました。)
それは、Write もRead も同様のバグで、データ転送の際にランダムなWait を入れた時に、Write はS_AXI_WVALID がアサートされないとS_AXI_WREADY をアサートしない。Read はS_AXI_RREADY がアサートされないと S_AXI_RVALID をアサートしないというバグだ。つまり依存関係ができてしまっていた。(注:Writeの場合はAXIバスの規格に違反してはいません。ちょっと勘違いしていましたが、WRITE_RANDOM_WAIT=0 の動作に合わせるということで、そのままとします。ikwzmさん、ありがとうございました。)
具体的には、READ_RANDOM_WAIT=1 にした時に、そのバグが顕在化する。その時に、マスタ側で、S_AXI_RVALID が来たので、S_AXI_RREADY を返そうとしているとデッドロックする。WRITE_RANDOM_WAIT=1 の時も同様だ。
現在は、それらのバグをフィックしたHDLコードを貼り付けてある。現在、使っている方は差し替えて下さい。

なお、今回は、RAMの初期化ファイルを追加したHDLコードに、LOAD_RAM_INIT_FILE パラメータを追加した。
LOAD_RAM_INIT_FILE=1 の時は、RAMの初期化ファイルをロードし、LOAD_RAM_INIT_FILE=0 の時は、RAMの初期化ファイルをロードしないようにした。なので、こちらのAXI4 Slave BFMを使用したほうが便利かもしれない。
但し、ISimでは、VHDLとVerilog HDLでRAMの初期化ファイルの取り扱いが違うようだ。
シミュレーション関連のAXI4 Slave BFMは、プロジェクト・ファイルの置いてあるフォルダ(プロジェクト・フォルダとする)に Simulation フォルダを作成して、その下に入れてある。
VHDLでは、プロジェクト・フォルダか、Simulation フォルダに、RAMの初期化ファイルを置いておかないとコンパイル時にエラーになる。VHDLでは、RAMの初期化を行わない場合、つまり、LOAD_RAM_INIT_FILE=0 の場合でもRAMの初期化ファイルは必須となる。
Verilog HDLでは、RAMを初期化する場合には、プロジェクト・フォルダにRAMの初期化ファイルが必要だが。RAMの初期化が必要ない場合は、LOAD_RAM_INIT_FILE の値にかかわらずRAMの初期化ファイルは必要ない。コンパイル・エラーがでることもない。
よって、Verilog HDLの場合は、RAMの初期化機能付きのAXI4 Slave BFMを使用したほうが良いと思う。
VHDLに関しては、使わなくてもRAMの初期化ファイルを入れておけば、RAMの初期化機能付きのAXI4 Slave BFMを使用できる。
  1. 2014年09月01日 04:29 |
  2. AXI4バス
  3. | トラックバック:0
  4. | コメント:0