SDカードブートでのLinuxリナロシステムイメージのあるZynq(一部のみ、他の部分を見されることをmkfsコマンド)

0.5の概要

通常ARM及び装置が同一でない場合のZynqのubootを生成、始動補助のZynq uboot ubootカーネルによって開始の二次部分は、おそらく、DIPスイッチを介して開始することができる修飾することができないのZynq内部機構を意味し、例えば、開始またはQSPI、SDカード情報から、SDカードからのブートがubootのミラーに含まれます。最大の違いは、ubootはまた、あなたがその開始からSDカードにコピーし、最終的な文書が合成され、その後、SDKにはPLのuboot設計と合成をファイル、VivadoデザインPLを使用する必要があり、直接使用しないでコンパイルされます。

私はFPGAは、この記事では、新しいLinuxシステムを作成する方法を、SDカードをどのように行う、Linux側の概要を説明しません。

次にboot.bin画像ファイルは通常、次のとおりですFSBL、ビットストリームとSSBLビットストリームPL側のプログラムを構成しているこれらの3つの文書は、オプションであり、我々はリナロシステムを作る際に必要としません。FSBLは、第一段階のブートローダーで、文書の生産が必要とVivado環境であり、SSBLは、ここで使用する第二段階ブートローダーは、U-ブートザイリンクス社です。

参考文献1から

1.環境と材料

1.1開発環境

  • ソフトウェア環境:Vivado 2017.02 Linuxバージョン

  • システム環境:Ubuntuの16.04 AMD64

  • クロスコンパイラ:GCC-リナロ- 7.3-2018.05.tar.xz

    / opt / toolschain /リナロ/ binにIクロスコンパイラ環境 / 下腕のlinux-gnueabihf-、私は絶対コンパイル時にコンパイラのパスを指定したいです

1.2の調製材料

  • ARM用Linuxカーネルのソース端ます。https://github.com/Xilinx/linux-xlnx
  • ARMエンドubootソースします。https://github.com/Xilinx/u-boot-xlnx
  • ファイルシステムのARMリナロの終了します。https://releases.linaro.org/archive/12.07/ubuntu/precise-images/ubuntu-desktop/linaro-precise-ubuntu-desktop-20120723-305.tar.gz(私が使用Ubuntuの12.07)

2. ubootを作ります

2.1コンパイラのuboot

  • ザイリンクスは、ubootのソースコードを取得します:git clone https://github.com/Xilinx/u-boot-xlnx.git

  • クリア編集:make CROSS_COMPILE=/opt/toolschain/linaro/bin/arm-linux-gnueabihf- ARCH=arm clean

  • 取締役会レベルの構成情報:make CROSS_COMPILE=/opt/toolschain/linaro/bin/arm-linux-gnueabihf- ARCH=arm zynq_zc702_defconfig図1に示す位置にあるボード・レベルの情報は、私がzc701ボードですが、しませんでしたが、これは私が最も近い選択します。

  • menuconfigの書き込みの設定情報:make CROSS_COMPILE=/opt/toolschain/linaro/bin/arm-linux-gnueabihf- ARCH=arm menuconfig

  • ubootをコンパイルします。make CROSS_COMPILE=/opt/toolschain/linaro/bin/arm-linux-gnueabihf- ARCH=arm -j8

  • 成功した生産をコンパイルした後ubootなので、ubootの名前を変更する必要があります。 mv uboot uboot.elf

uboot.elfを取得した後、最終的にブートプログラムの再合成がuboot.elfファイルを必要とし、再利用のために保存。

2.2 FSBL、ビットファイルを作成します

一般的なプロセスはされています、そしてIPの設計、コンフィギュレーション・クロックを追加し、Vivadoにこの新しいソフトウェアエンジニアリングを使用し、いくつかの基本的なLinuxの周辺(SDカード、シリアル、イーサネット、など)、ファイルはトップレベルのデザインを生成.V使用ラップHDL機能を必要とする設定しますその後、.VファイルをコンパイルFSBLコンパイル済みのファイルを取得し、打ち上げSDKソフトウェアが自動的にプロジェクトを生成します、のBITファイルを生成し、その後、ハードウェア記述ファイルを生成します。

多くのブロガーが非常に明確に書かれている、と私はここで話す特定のプロセスが、この方法によれば操作を行うことができ、比較的良い投稿:将来のマルチコア通信メカニズム、通信PSとPL、PLの内側にこの文書は設計されています良いの後、我々は再合成ubootファイルを。

https://blog.csdn.net/long_fly/article/details/78643258

我々は、我々は、このファイルFSBL取得、コンパイルこうしてビットファイルvivadoを得て、SDKプロジェクトの設立、ハードウェアプラットフォームを生成します。FSBLファイルFSBL SDKでプロジェクトを作成する必要があり、私達はちょうどベースのハードウェアプラットフォームを生成しました。

直接コンパイラの確立が完了したら、FSBLファイルを取得することができます。

今まで、我々は得ました:

  • ビットファイル:vivadoのコンパイル
  • 生成されたSDK:FSBLファイル
  • 生成されただけでubootコンパイラ:uboot.elfファイル

ファイルは、次にboot.binを出発して合成することができます

2.3合成次にboot.bin

この操作は、内部のSDKソフトウェアで行いました。

ブートイメージ関数を作成し使用します。

これは、合成次にboot.binを完了します。

2.4ファイルのパーミッション(Linux開発者ユーザーのみ)

非常に重要なこともあり、私は起動しません。何度も、あるZynqプラットフォームを試してみました、ubootは出ません情報を行います。この小さなカードは私に長い時間を発行したが、今朝洗ったとき、突然、ザイリンクスVivadoおよびSDKは、ルートから開始され、考え、生成次にboot.binはまた、権限の問題がある可能性があります。そう....

私は与えられたし、ボード、内部のSDカード、持ってsudo chmod 777 BOOT.bin実際に正常に開始され、その後、SDカード、あるZynq上のSDを取り出します。Linuxシステムの下にある場合は、次にboot.bin与えられた権限を忘れないでください。

3 Linuxカーネルの生産

3.1 LinuxカーネルuImageファイルをコンパイル

  • Linuxカーネルを取得します:git clone https://github.com/Xilinx/linux-xlnx.git
  • カーネルのクリーンアップを開始し、Linuxカーネルのソースディレクトリに切り替えます。make CROSS_COMPILE=/opt/toolschain/linaro/bin/arm-linux-gnueabihf- ARCH=arm clean
  • 取締役会レベルの設定情報:make CROSS_COMPILE=/opt/toolschain/linaro/bin/arm-linux-gnueabihf- ARCH=arm xilinx_zynq_defconfig
  • .configファイルを書き込むmenuconfigを使用する:make CROSS_COMPILE=/opt/toolschain/linaro/bin/arm-linux-gnueabihf- ARCH=arm menuconfig出口が後の行に来ました。
  • カーネルをコンパイルします。make CROSS_COMPILE=/opt/toolschain/linaro/bin/arm-linux-gnueabihf- ARCH=arm -j8
  • 生産uImageファイル:make CROSS_COMPILE=/opt/toolschain/linaro/bin/arm-linux-gnueabihf- ARCH=arm uImage LOADADDR=0x00008000
  • コンパイル後、のlinux-XLNX /アーチ/腕/ブートファイルuImageは、バックアップを保持します。

3.2ファイルツリーの生産設備

linux-XLNX /アーチ/腕/ブーツ/ DTSディレクトリ、ファイルの内容の新しいのZynq-7010.dtsファイル:

/dts-v1/;
/include/ "zynq-7000.dtsi"

/ {
    model = "HLF";
    compatible = "ALINX,zynq", "xlnx,zynq-7000";

    aliases {
        ethernet0 = &gem0;
        serial0 = &uart1;
        spi0 = &qspi;
        mmc0 = &sdhci0;
    };

    memory@0 {
        device_type = "memory";
        reg = <0x0 0x20000000>;
    };

    chosen {
        bootargs = "";
        stdout-path = "serial0:115200n8";
    };

    usb_phy0: phy0 {
        compatible = "usb-nop-xceiv";
        #phy-cells = <0>;
        reset-gpios = <&gpio0 46 1>;
    };
};

&clkc {
    ps-clk-frequency = <50000000>;
};

&gem0 {
    status = "okay";
    phy-mode = "rgmii-id";
    phy-handle = <&ethernet_phy>;

    ethernet_phy: ethernet-phy@0 {
        reg = <0>;
    };
};

&qspi {
    u-boot,dm-pre-reloc;
    status = "okay";
};

これはカーネルのホームディレクトリに切り替えます。./scripts/dtc/dtc -I dts -O dtb -o ./arch/arm/boot/devicetree.dtb ./arch/arm/boot/dts/zynq-7010.dts

次に、ファイルは、予備の維持devicetree.dtbのlinux-XLNX /アーチ/腕/ブート/ディレクトリで見つけることができます。

3.3 启动配置文件制作uEnv.txt

随便找个位置新建一个uEnv.txt 文件,文件内写入boot的配置信息:

uenvcmd=run linaro_sdboot

linaro_sdboot=echo Copying Linux from SD to RAM... && \
fatload mmc 0 0x3000000 ${kernel_image} && \
fatload mmc 0 0x2A00000 ${devicetree_image} && \
if fatload mmc 0 0x2000000 ${ramdisk_image}; \
then bootm 0x3000000 0x2000000 0x2A00000; \
else bootm 0x3000000 - 0x2A00000; fi

bootargs=console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait

保存,留着备用。

4 SD卡制作

准备一张空白的超过8G的SD卡,读卡器读取该卡,我们使用Linux系统进行格式化,Windows用户可以通过diskgen等格式化分区的软件制作也好。

  • 查看SD卡格式化分区:sudo fdisk -l 假如查看到的SD卡是/dev/sde分区,(不要格式化错了,在我年轻的时候我曾经把整个硬盘都格式化了,很危险的操作,看清楚是/dev/sd* 后面是c 还是d还是e还是f)。
  • 进入分区管理:sudo fdisk /dev/sde

  • 以下步骤按照这个OMAPL138制作SD卡启动盘及重装Linux系统,我的这个博客来。注意不同的是,我们建立启动分区的大小是100M即可,创建boot的分区的类型也为Linux。

  • 然后格式化boot分区:sudo mkfs.vfat -F 32 -n "boot" /dev/sde1

  • 格式化rootfs分区:sudo mkfs.ext4 -L "rootfs" /dev/sde2

    到此我们完成了SD卡制作。

5 烧写SD启动卡

  • sd卡的boot分区:使用命令将 BOOT.bin / devicetree.dtb / uImage / uEnv.txt 四个文件拷贝到boot分区。

  • 解压Linaro的文件系统: 在第一章写的 ARM端的Linaro文件系统:linaro-precise-ubuntu-desktop-20120723-305.tar.gz 解压到SD卡的root分区

    sudo tar --strip-components=3 -C /media/delvis/rootfs -xzpf linaro-precise-ubuntu-desktop-20120723-305.tar.gz binary/boot/filesystem.dir

  • 最好找一个带知识灯的读卡器,解压命令执行完了,不代表SD卡写入完毕,如果有指示灯,指示灯不闪烁之后弹出SD卡。

到此,一个完整的Linaro系统就写入了SD卡,将FPGA板子的boot拨码开关拨到SD卡启动位置,就可以看到Linaro系统启动了。

参考文献:

[1] long_fly, ZYNQ跑系统 系列(一) 传统方式移植linux, 2017年11月28日

[2] 雅可, Zedboard上运行Linaro系统(二):生成BOOT.BIN, 2016年07月26日

[3] 带你高飞, 03-ZYNQ学习(启动篇)之程序的固化, 2018年05月22日

おすすめ

転載: www.cnblogs.com/idyllcheung/p/11258065.html