製品情報>ZYNQ搭載 ADCボード「Cosmo-Z」>Linuxの生成

Linuxの生成

 

 

概要

ここではCosmo-Z用のLinuxの作り方を紹介します。また作り方だけでなく、起動してからLinuxをネットワークにつなげる方法も紹介させたいただきます.作成環境はubuntu14.04, ISE14.7となっております.

  • PS部分の設定方法
  • ソースファイルの準備
  • uImageの作り方
  • devicetree.dtbの作り方
  • DMA用メモリ領域の確保

 

PS部分の設定方法

zed boardの設定を利用してPS部分の設定を行います.
まず下図のようにzed boardの設定をimportします.


DDR部分の設定を下図のように変更して完成となります.
 

 

ソースファイルの準備

まずxilinx wiki(http://www.wiki.xilinx.com)からソースを入手します.
ソースはgitで管理されていて、今回必要となるソースは以下のレポジトリーに含まれます.
   ・linux-xlnx.git

早速git cloneコマンドを使用してダウンロードします.

   %git clone git://github.com/Xilinx/linux-xlnx.git


と入力するとレポジトリーをダウンロードできます.

 

uImageの生成

xilinxが提供するzed board用のkernel imageを使用します.
まずダウンロードしたlinux-xlnxディレクトリに移動します.
ARCHをarm,CROSS_COMPILEをarm-xilinx-linux-gnueabi-に設定します.

   %export ARCH=arm
   %export CROSS_COMPILE=arm-xilinx-linux-gnueabi-

その後以下のコマンドを順番に実行すると
linux-xlnx/arch/arm/boot/ にuImageが生成されます.
だいたい6分程度でmakeは終了します.

   %make xilinx_zynq_defconfig
   %make UIMAGE_LOADADDR=0x8000 uImage

 

devicetree.dtbの生成

devicetreeもzed board用のものを流用します.

    linux-xlnx/arch/arm/boot/dts/zynq-zed.dts

を以下のように編集します.

   phy0: phy@0 {
     reg = <0>;
   };
       ↓
   phy0: phy@7 {
     reg = <7>;
  };

この後,

   %make zynq-zed.dtb

上記コマンドを実行すると,linux-xlnx/arch/arm/boot/dts/にzynq-zed.dtbが生成されます.
このファイル名をdevicetree.dtbに変更したら完成です.

 

LINUX起動

上記で作成したuImageおよびdevicetree.dtb + ramdisk + boot.binをSDカードにコピーします.
Cosmo-ZにSDカードをセットし,usbケーブルをつないだ後に電源を投入するとlinuxが起動します.

次に

   %ifconfig eth0 up


上記コマンドを入力します.phyは正しく認識されれば下図のようなメッセージが帰ってきます.

※ifconfig eth0 upコマンド後,新たにコマンドを入力したわけではありません.

 

ネットワークのつなげ方

Linuxが起動した段階ではまだネットワークに接続することはできず,いくつか設定しなくてはならないことがあります.その設定について紹介します.

  • ipアドレスの設定
    ipアドレスの設定にはifconfigコマンドを使用します.
     
    %ifconfig eth0 <ローカルアドレス>

    上記コマンドを入力すると指定したipアドレスに設定されます.
    ifconfigコマンドで設定を確認することができます.



    この段階でローカルなネットワーク内での通信は可能となります.
     
    %ping <ローカルアドレス>

    上記コマンドを入力すると下図のように通信を行うことができます.


     
  • default gatewayの設定
    グローバルネットワークで通信するにはdefault gatewayの設定が必要となります.
    この設定はrouteコマンドを用いて行います.
     
    %route add default gw <ゲートウェイのアドレス>

    上記コマンドを実行するとgatewayを設定することができます.
    この設定が完了したらグローバルネットワークにアクセスすることが可能となります.

     
  • ネットワークの自動設定
    ramdiskを使用しているため,bootする度に上記コマンドでネットワークの設定を行わな
    う必要があります.
    ここではbootの度に上記コマンドを自動で実行する方法をお伝えします.
    まずzynq linux内の/etc/init.d/rcS ファイルを見ると,
    "boot時にSDカード内のinit.shを実行する"と書いてあります.



    したがって下記のようなinit.shファイルを作ります.
     
    #!/bin/sh
    echo "ifconfig eth0 <ローカルアドレス>"
    ifconfig eth0 <ローカルアドレス>
    echo "route add default gw <ゲートウェイのアドレス>"
    route add default gw <ゲートウェイのアドレス>

    そしてこれをSDカードにコピーしてbootすると以下のように自動でコマンドが実行されます.

 

DMA用メモリ領域の確保

デフォルトの設定のままでは,PS側DDRメモリの512MBをlinuxが消費してしまいます.



この使用量を減らす方法を紹介いたします.

   linux-xlnx/arch/arm/boot/dts/zynq-zed.dts


上記ファイル内を変更する必要があり,以下のように変更します.

        chosen {
                bootargs = "console=ttyPS0,115200 root=/dev/ram rw earlyprintk";
               linux,stdout-path = "/amba/serial@e0001000";
        };

                              ↓

        chosen {
                bootargs = "console=ttyPS0,115200 mem=256M root=/dev/ram rw earlyprintk";
               linux,stdout-path = "/amba/serial@e0001000";
        };

 

変更後,再度devicetree.dtbを生成し,bootすると下図のように使用量が256MBに減っていることが分かります.

 

 


© 2017 TokushuDenshiKairo Inc. All rights reserved