AX 7020ベースのpetalinuxでLCDを生成して駆動(071)
10778 ワード
AX 7020ベースのpetalinuxによるタッチパネルの生成と駆動(071)
環境
Ubuntu14.04、タッチパネルAN 071 vivado 2015.4、petalinux 2015.4、黒金zynq開発板AX 7010/AX 7020テスト:QT 5.6.2
プロセスディレクトリ
1、PCの下にvivado 2015をインストールする.4 2、PCの下にqt 5をインストール.6.2、クロスコンパイルqt 5.6.2 3、PCの下にpetalinux 4をインストールし、タッチパネルに基づくvivadoエンジニアリングドキュメントでpetalinux 5を生成し、SDカードをダウンロードして準備する
紹介する
本文はalinxの公式ドキュメントの統合であり,他のエンジニアリングに基づいて生成されたpetalinuxに基づいて,公式ドキュメントの2つのエラーを修正した.一つは最上位デバイス数コードのBug一つは構成カーネルの選択である
コメント
Xilinxのクロスコンパイラ(2017年前)でコンパイルされたQTライブラリはdebianファイルシステムではサポートされておらず、プログラム実行時に「ファイルが見つかりません」というエラーが報告されます.すなわち、linaroのようなファイルシステムにarm-xilinx-linux-gnueabi-gcc/g++を付けることはできません.qtライブラリのコンパイルは、Xilinxが提供するコンパイラを使用するが、LINUXのルートファイルシステムはそうではない.その後、Xilinxはこの問題を解決するために、自分のコンパイラを放棄し、これは2017.4バージョンで、Xilinxは自分のコンパイラを放棄し、arm-xilinx-linux-gnueabi-シリーズがない.
1、PCの下にvivado 2015をインストールする.4
ベースライブラリのインストールsudo su
rm /bin/sh
ln -s /bin/bash /bin/sh
ls -al /bin/sh
apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++6
apt-get install iproute2:i386
apt-get install gawk:i386
apt-get install gcc
apt-get install gcc:i386
apt-get install git:i386
apt-get install make:i386
apt-get install net-tools:i386
apt-get install libncurses5-dev:i386
apt-get install zlib1g-dev:i386
apt-get install libssl-dev:i386
apt-get install flex:i386
apt-get install bison:i386
apt-get install libselinux1:i386
apt-get install libncurses5 libncurses5-dev
apt-get install libc6:i386
apt-get install libstdc++6:i386
apt-get install zlib1g:i386
apt-get install libssl-dev
apt-get install tftpd tftp openbsd-inetd
sudo tar -zxvf Xilinx_Vivado_SDK_2015.4_1118_2.tar.gz
cd Xilinx_Vivado_SDK_2015.4_1118_2
./xsetup
後の3段階はインストールを解凍して、できるだけ/opt/Xilinxディレクトリの下でインストールする方がよくて、空間が足りなくて拡張ディスクのインストールが完成した後に、権限を高めることを忘れないでくださいsudo chmod 777 -R /opt/Xilinx/
chmod 777 -R ~/.Xilinx/
vivadoの使用sudo su
source /opt/Xilinx/Vivado/2015.4/settings64.sh
vivado&
2、PCの下にqt 5を取り付ける.6.2、クロスコンパイルqt 5.6.2
ベースライブラリのインストール、インストールパッケージへのアクセス権の向上、インストールプロセスへの移行sudo apt-get install mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev g++
chmod +x qt-opensource-linux-x64-5.6.2.run
./qt-opensource-linux-x64-5.6.2.run
ZYNQのQTコンパイルファイル:alinx_heijin_QT.tar.gzはそれを解凍し、/home/work/ディレクトリの下に解凍し、中に入って実行することに注意します../build.sh
§intallディレクトリに入ると、ヘッダファイル「include」ディレクトリ、「lib」ディレクトリなどが表示されます.ここで、「lib」は実行ライブラリであり、「plugins」はプラグインです.build.shファイルのmakeコマンドは、コンピュータのパフォーマンスに応じてマルチスレッドPCにnfsをインストールし、/home/workディレクトリをマウントすることができます.具体的には、基本開発チュートリアルの後の章を参照してください.
3、PCの下にpetalinuxをインストールする
sudo su
rm /bin/sh
ln -s /bin/bash /bin/sh
ls -al /bin/sh
apt-get install tofrodos:i386
apt-get install iproute2:i386
apt-get install gawk:i386
apt-get install gcc
apt-get install gcc:i386
apt-get install net-tools:i386
apt-get install zlib1g-dev:i386
apt-get install libssl-dev:i386
apt-get install flex:i386
apt-get install bison:i386
apt-get install libselinux1:i386
apt-get install libncurses5 libncurses5-dev
apt-get install libc6:i386
apt-get install libstdc++6:i386
apt-get install zlib1g:i386
apt-get install libssl-dev
apt-get install tftpd tftp openbsd-inetd
petalinuxインストールパッケージ(petalinux-v 2015.4-final-installer-dec.run)をubuntuシステムにコピーします.一部の仮想マシンは直接コピーできます.直接コピーできない場合は、まずUディスク、モバイルハードディスクにコピーし、仮想マシンの下でUディスクからコピーすることができます.petalinuxインストールパッケージがあるディレクトリで端末を実行します.PetalinxインストールパッケージのディレクトリでTernimalウィンドウを開き、次の2つのコマンドを入力します.sudo su
chmod +x petalinux-v2015.4-final-installer-dec.run
./petalinux-v2015.4-final-installer-dec.run /opt/Xilinx
4、タッチスクリーンに基づくvivadoエンジニアリングドキュメントによってpetalinuxを生成する
(1)工程生成ハードウェアファイル
vivadoで工事ts_を実行するan071_linux_ax 7020は、sdkを再シミュレーションして実行し、hdファイルを生成しますが、元のzipファイルも実際に生成され、直接使用されます.vivadoエンジニアリングのディレクトリの下には、「ts_an 071_linux_ax 7020.sdk/system_wrapper_hw_platform_0」ディレクトリが生成されます.ここで、「system_wrapper_hw_platform_0」はpetalinuxに必要なフォルダであり、「system_wrapper_hw_platform_0」フォルダをpetalinuxがインストールされたLinuxシステムにコピーします.ここでは、homeworkディレクトリの下にpetalinuxというフォルダを新規作成します.「system_wrapper_hw_platform_0」フォルダをこのフォルダの下にコピーし、petalinuxの使用に備えて「ax 7020_hw_platform_0」と名前を変更します.
(2)駆動およびpetalinuxエンジニアリング生成作成
petalinuxのデフォルトではHDMI出力に関するドライバはありません.ブラックゴールドはこのドライバをpetalinuxのドライバに追加し、ブラックゴールドが提供するドライバを既存のドライバに置き換え、まず圧縮ファイル「drivers.tar.gz」を「/home/work/petalinux」ディレクトリにコピーします.
rootアカウントの下に「/opt/Xilinx/petalinux-v 2015.4-final/components/linux-kernel/xlnx-4.0」ディレクトリを入力します.これはpetalinuxインストール後のLinuxカーネルが存在するディレクトリで、解凍コマンドを実行します.sudo su
cd /opt/Xilinx/petalinux-v2015.4-final/components/linux-kernel/xlnx-4.0
tar -zxvf /home/work/petalinux/drivers.tar.gz
/home/work/petalinuxディレクトリの下sudo su
source /opt/Xilinx/petalinux-v2015.4-final/settings.sh
source /opt/Xilinx/Vivado/2015.4/settings64.sh
petalinux-create --type project --template zynq --name ax7020_an071
cd ax7020_an071
petalinux-config --get-hw-description ../ax7020_hw_platform_0/
save、exit
(3)設備ツリーの修正
プロジェクトディレクトリの下にある/home/work/petalinux/ax 7020_an071 gedit subsystems/linux/configs/device-tree/system-top.dts
次のようにコピー/dts-v1/;
/include/ "system-conf.dtsi"
/ {
usb_phy0:usb_phy@0 {
compatible = "ulpi-phy";
#phy-cells = <0x0>;
reg = <0xe0002000 0x1000>;
view-port=<0x170>;
reset-gpios = ;
drv-vbus;
};
xilinx_drm_0: xilinx_drm {
compatible = "xlnx,drm";
xlnx,vtc = ;
xlnx,connector-type = "HDMIA";
xlnx,encoder-slave = ;
clocks = ;
planes {
xlnx,pixel-format = "xrgb8888";
plane0 {dmas = ;
dma-names = "dma";
};
};
};
an071_encoder_0: an071_encoder {
compatible = "ax_lcd,drm-encoder";
};
};
&usb0 {
status = "okay";
dr_mode = "host";
usb-phy = ;
};
&axi_dynclk_0 {
compatible = "digilent,axi-dynclk";
#clock-cells = <0x0>;
xlnx,s00-axi-addr-width = <0x5>;
xlnx,s00-axi-data-width = <0x20>;
clocks = ;
};
&i2c1 {
compatible = "cdns,i2c-r1p10";
status = "okay";
alinx_an071@38 {
compatible = "alinx,an071";
reg = <0x38>;
interrupt-parent = ;
interrupts = <0 29 4>;
};
};
&v_tc_0 {
compatible = "xlnx,v-tc-5.01.a";
xlnx,det-achroma-en = <0x0>;
xlnx,det-avideo-en = <0x1>;
xlnx,det-fieldid-en = <0x0>;
xlnx,det-hblank-en = <0x1>;
xlnx,det-hsync-en = <0x1>;
xlnx,det-vblank-en = <0x1>;
xlnx,det-vsync-en = <0x1>;
xlnx,detect-en = <0x0>;
xlnx,fsync-hstart0 = <0x0>;
xlnx,fsync-hstart1 = <0x0>;
xlnx,fsync-hstart10 = <0x0>;
xlnx,fsync-hstart11 = <0x0>;
xlnx,fsync-hstart12 = <0x0>;
xlnx,fsync-hstart13 = <0x0>;
xlnx,fsync-hstart14 = <0x0>;
xlnx,fsync-hstart15 = <0x0>;
xlnx,fsync-hstart2 = <0x0>;
xlnx,fsync-hstart3 = <0x0>;
xlnx,fsync-hstart4 = <0x0>;
xlnx,fsync-hstart5 = <0x0>;
xlnx,fsync-hstart6 = <0x0>;
xlnx,fsync-hstart7 = <0x0>;
xlnx,fsync-hstart8 = <0x0>;
xlnx,fsync-hstart9 = <0x0>;
xlnx,fsync-vstart0 = <0x0>;
xlnx,fsync-vstart1 = <0x0>;
xlnx,fsync-vstart10 = <0x0>;
xlnx,fsync-vstart11 = <0x0>;
xlnx,fsync-vstart12 = <0x0>;
xlnx,fsync-vstart13 = <0x0>;
xlnx,fsync-vstart14 = <0x0>;
xlnx,fsync-vstart15 = <0x0>;
xlnx,fsync-vstart2 = <0x0>;
xlnx,fsync-vstart3 = <0x0>;
xlnx,fsync-vstart4 = <0x0>;
xlnx,fsync-vstart5 = <0x0>;
xlnx,fsync-vstart6 = <0x0>;
xlnx,fsync-vstart7 = <0x0>;
xlnx,fsync-vstart8 = <0x0>;
xlnx,fsync-vstart9 = <0x0>;
xlnx,gen-achroma-en = <0x0>;
xlnx,gen-achroma-polarity = <0x1>;
xlnx,gen-auto-switch = <0x0>;
xlnx,gen-avideo-en = <0x1>;
xlnx,gen-avideo-polarity = <0x1>;
xlnx,gen-cparity = <0x0>;
xlnx,gen-f0-vblank-hend = <0x500>;
xlnx,gen-f0-vblank-hstart = <0x500>;
xlnx,gen-f0-vframe-size = <0x2ee>;
xlnx,gen-f0-vsync-hend = <0x500>;
xlnx,gen-f0-vsync-hstart = <0x500>;
xlnx,gen-f0-vsync-vend = <0x2d9>;
xlnx,gen-f0-vsync-vstart = <0x2d4>;
xlnx,gen-f1-vblank-hend = <0x500>;
xlnx,gen-f1-vblank-hstart = <0x500>;
xlnx,gen-f1-vframe-size = <0x2ee>;
xlnx,gen-f1-vsync-hend = <0x500>;
xlnx,gen-f1-vsync-hstart = <0x500>;
xlnx,gen-f1-vsync-vend = <0x2d9>;
xlnx,gen-f1-vsync-vstart = <0x2d4>;
xlnx,gen-fieldid-en = <0x0>;
xlnx,gen-fieldid-polarity = <0x1>;
xlnx,gen-hactive-size = <0x500>;
xlnx,gen-hblank-en = <0x1>;
xlnx,gen-hblank-polarity = <0x1>;
xlnx,gen-hframe-size = <0x672>;
xlnx,gen-hsync-en = <0x1>;
xlnx,gen-hsync-end = <0x596>;
xlnx,gen-hsync-polarity = <0x1>;
xlnx,gen-hsync-start = <0x56e>;
xlnx,gen-interlaced = <0x0>;
xlnx,gen-vactive-size = <0x2d0>;
xlnx,gen-vblank-en = <0x1>;
xlnx,gen-vblank-polarity = <0x1>;
xlnx,gen-video-format = <0x2>;
xlnx,gen-vsync-en = <0x1>;
xlnx,gen-vsync-polarity = <0x1>;
xlnx,generate-en = <0x1>;
xlnx,has-axi4-lite = <0x1>;
xlnx,has-intc-if = <0x0>;
xlnx,interlace-en = <0x0>;
xlnx,max-lines = <0x1000>;
xlnx,max-pixels = <0x1000>;
xlnx,num-fsyncs = <0x1>;
xlnx,sync-en = <0x0>;
};
(4)カーネルの構成
プロジェクトディレクトリの下にある/home/work/petalinux/ax 7020_an071 petalinux-config -c kernel
Device Drivers ---->
Input device support --->
Touchscreens --->( Y)
<> Alinx_ts I2C Touchscreen support ( Y)
exit
exit
Graphics support --->
Direct Rendering Manager --->
ALINX LCD DRM Encoder Driver( Y)
exit
exit
Common Clock Framework
Digilent axi_dynclk Driver( Y)
save
exit
petalinux-config -c rootfs
Filesystem Packages
base
external-xilinx-toolchain
libstdc++6
save
exit
petalinux-build
BOOTファイルのマージpetalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --fpga ./images/linux/system_wrapper.bit --
uboot --force
/home/work/petalinux/ax 7020_an 071/images/linux下のBOOT.BINとimage.ubはsdカードにコピーし、SDカードはまずFAT形式にフォーマットされ、パーティションを使用しないことに注意します.
(5)ダウンロード録画準備
ネットワークはipを表示します.例えば192.168.1.1136です.mount -t nfs -o nolock 192.168.1.136:/home/work /mnt
cd /mnt/alinx_heijin_QT
source qt_env_set.sh
./test
sudo su
rm /bin/sh
ln -s /bin/bash /bin/sh
ls -al /bin/sh
apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++6
apt-get install iproute2:i386
apt-get install gawk:i386
apt-get install gcc
apt-get install gcc:i386
apt-get install git:i386
apt-get install make:i386
apt-get install net-tools:i386
apt-get install libncurses5-dev:i386
apt-get install zlib1g-dev:i386
apt-get install libssl-dev:i386
apt-get install flex:i386
apt-get install bison:i386
apt-get install libselinux1:i386
apt-get install libncurses5 libncurses5-dev
apt-get install libc6:i386
apt-get install libstdc++6:i386
apt-get install zlib1g:i386
apt-get install libssl-dev
apt-get install tftpd tftp openbsd-inetd
sudo tar -zxvf Xilinx_Vivado_SDK_2015.4_1118_2.tar.gz
cd Xilinx_Vivado_SDK_2015.4_1118_2
./xsetup
sudo chmod 777 -R /opt/Xilinx/
chmod 777 -R ~/.Xilinx/
sudo su
source /opt/Xilinx/Vivado/2015.4/settings64.sh
vivado&
sudo apt-get install mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev g++
chmod +x qt-opensource-linux-x64-5.6.2.run
./qt-opensource-linux-x64-5.6.2.run
./build.sh
sudo su
rm /bin/sh
ln -s /bin/bash /bin/sh
ls -al /bin/sh
apt-get install tofrodos:i386
apt-get install iproute2:i386
apt-get install gawk:i386
apt-get install gcc
apt-get install gcc:i386
apt-get install net-tools:i386
apt-get install zlib1g-dev:i386
apt-get install libssl-dev:i386
apt-get install flex:i386
apt-get install bison:i386
apt-get install libselinux1:i386
apt-get install libncurses5 libncurses5-dev
apt-get install libc6:i386
apt-get install libstdc++6:i386
apt-get install zlib1g:i386
apt-get install libssl-dev
apt-get install tftpd tftp openbsd-inetd
sudo su
chmod +x petalinux-v2015.4-final-installer-dec.run
./petalinux-v2015.4-final-installer-dec.run /opt/Xilinx
sudo su
cd /opt/Xilinx/petalinux-v2015.4-final/components/linux-kernel/xlnx-4.0
tar -zxvf /home/work/petalinux/drivers.tar.gz
sudo su
source /opt/Xilinx/petalinux-v2015.4-final/settings.sh
source /opt/Xilinx/Vivado/2015.4/settings64.sh
petalinux-create --type project --template zynq --name ax7020_an071
cd ax7020_an071
petalinux-config --get-hw-description ../ax7020_hw_platform_0/
gedit subsystems/linux/configs/device-tree/system-top.dts
/dts-v1/;
/include/ "system-conf.dtsi"
/ {
usb_phy0:usb_phy@0 {
compatible = "ulpi-phy";
#phy-cells = <0x0>;
reg = <0xe0002000 0x1000>;
view-port=<0x170>;
reset-gpios = ;
drv-vbus;
};
xilinx_drm_0: xilinx_drm {
compatible = "xlnx,drm";
xlnx,vtc = ;
xlnx,connector-type = "HDMIA";
xlnx,encoder-slave = ;
clocks = ;
planes {
xlnx,pixel-format = "xrgb8888";
plane0 {dmas = ;
dma-names = "dma";
};
};
};
an071_encoder_0: an071_encoder {
compatible = "ax_lcd,drm-encoder";
};
};
&usb0 {
status = "okay";
dr_mode = "host";
usb-phy = ;
};
&axi_dynclk_0 {
compatible = "digilent,axi-dynclk";
#clock-cells = <0x0>;
xlnx,s00-axi-addr-width = <0x5>;
xlnx,s00-axi-data-width = <0x20>;
clocks = ;
};
&i2c1 {
compatible = "cdns,i2c-r1p10";
status = "okay";
alinx_an071@38 {
compatible = "alinx,an071";
reg = <0x38>;
interrupt-parent = ;
interrupts = <0 29 4>;
};
};
&v_tc_0 {
compatible = "xlnx,v-tc-5.01.a";
xlnx,det-achroma-en = <0x0>;
xlnx,det-avideo-en = <0x1>;
xlnx,det-fieldid-en = <0x0>;
xlnx,det-hblank-en = <0x1>;
xlnx,det-hsync-en = <0x1>;
xlnx,det-vblank-en = <0x1>;
xlnx,det-vsync-en = <0x1>;
xlnx,detect-en = <0x0>;
xlnx,fsync-hstart0 = <0x0>;
xlnx,fsync-hstart1 = <0x0>;
xlnx,fsync-hstart10 = <0x0>;
xlnx,fsync-hstart11 = <0x0>;
xlnx,fsync-hstart12 = <0x0>;
xlnx,fsync-hstart13 = <0x0>;
xlnx,fsync-hstart14 = <0x0>;
xlnx,fsync-hstart15 = <0x0>;
xlnx,fsync-hstart2 = <0x0>;
xlnx,fsync-hstart3 = <0x0>;
xlnx,fsync-hstart4 = <0x0>;
xlnx,fsync-hstart5 = <0x0>;
xlnx,fsync-hstart6 = <0x0>;
xlnx,fsync-hstart7 = <0x0>;
xlnx,fsync-hstart8 = <0x0>;
xlnx,fsync-hstart9 = <0x0>;
xlnx,fsync-vstart0 = <0x0>;
xlnx,fsync-vstart1 = <0x0>;
xlnx,fsync-vstart10 = <0x0>;
xlnx,fsync-vstart11 = <0x0>;
xlnx,fsync-vstart12 = <0x0>;
xlnx,fsync-vstart13 = <0x0>;
xlnx,fsync-vstart14 = <0x0>;
xlnx,fsync-vstart15 = <0x0>;
xlnx,fsync-vstart2 = <0x0>;
xlnx,fsync-vstart3 = <0x0>;
xlnx,fsync-vstart4 = <0x0>;
xlnx,fsync-vstart5 = <0x0>;
xlnx,fsync-vstart6 = <0x0>;
xlnx,fsync-vstart7 = <0x0>;
xlnx,fsync-vstart8 = <0x0>;
xlnx,fsync-vstart9 = <0x0>;
xlnx,gen-achroma-en = <0x0>;
xlnx,gen-achroma-polarity = <0x1>;
xlnx,gen-auto-switch = <0x0>;
xlnx,gen-avideo-en = <0x1>;
xlnx,gen-avideo-polarity = <0x1>;
xlnx,gen-cparity = <0x0>;
xlnx,gen-f0-vblank-hend = <0x500>;
xlnx,gen-f0-vblank-hstart = <0x500>;
xlnx,gen-f0-vframe-size = <0x2ee>;
xlnx,gen-f0-vsync-hend = <0x500>;
xlnx,gen-f0-vsync-hstart = <0x500>;
xlnx,gen-f0-vsync-vend = <0x2d9>;
xlnx,gen-f0-vsync-vstart = <0x2d4>;
xlnx,gen-f1-vblank-hend = <0x500>;
xlnx,gen-f1-vblank-hstart = <0x500>;
xlnx,gen-f1-vframe-size = <0x2ee>;
xlnx,gen-f1-vsync-hend = <0x500>;
xlnx,gen-f1-vsync-hstart = <0x500>;
xlnx,gen-f1-vsync-vend = <0x2d9>;
xlnx,gen-f1-vsync-vstart = <0x2d4>;
xlnx,gen-fieldid-en = <0x0>;
xlnx,gen-fieldid-polarity = <0x1>;
xlnx,gen-hactive-size = <0x500>;
xlnx,gen-hblank-en = <0x1>;
xlnx,gen-hblank-polarity = <0x1>;
xlnx,gen-hframe-size = <0x672>;
xlnx,gen-hsync-en = <0x1>;
xlnx,gen-hsync-end = <0x596>;
xlnx,gen-hsync-polarity = <0x1>;
xlnx,gen-hsync-start = <0x56e>;
xlnx,gen-interlaced = <0x0>;
xlnx,gen-vactive-size = <0x2d0>;
xlnx,gen-vblank-en = <0x1>;
xlnx,gen-vblank-polarity = <0x1>;
xlnx,gen-video-format = <0x2>;
xlnx,gen-vsync-en = <0x1>;
xlnx,gen-vsync-polarity = <0x1>;
xlnx,generate-en = <0x1>;
xlnx,has-axi4-lite = <0x1>;
xlnx,has-intc-if = <0x0>;
xlnx,interlace-en = <0x0>;
xlnx,max-lines = <0x1000>;
xlnx,max-pixels = <0x1000>;
xlnx,num-fsyncs = <0x1>;
xlnx,sync-en = <0x0>;
};
petalinux-config -c kernel
Device Drivers ---->
Input device support --->
Touchscreens --->( Y)
<> Alinx_ts I2C Touchscreen support ( Y)
exit
exit
Graphics support --->
Direct Rendering Manager --->
ALINX LCD DRM Encoder Driver( Y)
exit
exit
Common Clock Framework
Digilent axi_dynclk Driver( Y)
save
exit
petalinux-config -c rootfs
Filesystem Packages
base
external-xilinx-toolchain
libstdc++6
save
exit
petalinux-build
petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --fpga ./images/linux/system_wrapper.bit --
uboot --force
mount -t nfs -o nolock 192.168.1.136:/home/work /mnt
cd /mnt/alinx_heijin_QT
source qt_env_set.sh
./test