基于AX7020的petalinux生成并驱动液晶屏(071)
基于AX7020的petalinux生成并驅(qū)動觸摸屏(071)
環(huán)境
Ubuntu14.04、觸摸屏AN071
vivado 2015.4、petalinux 2015.4、黑金 zynq 開發(fā)板 AX7010/AX7020
測試:QT5.6.2
過程目錄
1、PC下安裝vivado2015.4
2、PC下安裝qt5.6.2,并且交叉編譯qt5.6.2
3、PC下安裝petalinux
4、基于觸摸屏的vivado工程文檔來生成petalinux
5、下載SD卡準備
介紹
本文是對alinx的官方文檔的一個整合,并基于其他工程而生成的petalinux,并修改了官方文檔的兩個錯誤。
一個是頂層設(shè)備數(shù)代碼的Bug
一個是配置內(nèi)核的選擇
備注
用Xilinx的交叉編譯器(2017前)所編譯的QT庫對于debian文件系統(tǒng)是不支持的,在運行程序時會報“未發(fā)現(xiàn)文件”的錯,即linaro之類的文件系統(tǒng)配上arm-xilinx-linux-gnueabi-gcc/g++都是不行的。
qt庫的編譯,使用Xilinx提供的編譯器,而LINUX的根文件系統(tǒng)不是.
在后來,Xilinx為了解決這個問題,放棄了自己的編譯器,這個在后來就是2017.4版本,Xilinx放棄自己的編譯器,即沒有arm-xilinx-linux-gnueabi-系列的.
1、PC下安裝vivado2015.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-inetdsudo tar -zxvf Xilinx_Vivado_SDK_2015.4_1118_2.tar.gz cd Xilinx_Vivado_SDK_2015.4_1118_2 ./xsetup后三步解壓安裝,最好安裝在/opt/Xilinx目錄下,空間不夠可以嘗試擴盤
安裝完成后,別忘了提升權(quán)限
vivado的使用
sudo su source /opt/Xilinx/Vivado/2015.4/settings64.sh vivado&2、PC下安裝qt5.6.2,并且交叉編譯qt5.6.2
基本庫安裝,對安裝包提高權(quán)限,進入安裝過程
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.runZYNQ的QT編譯
文件:alinx_heijin_QT.tar.gz
對它進行解壓,注意解壓到/home/work/目錄下,進入里面然后運行
迚入 intall 目錄可以看到頭文件“include”目錄,“l(fā)ib”目錄等等,其中“l(fā)ib”是運行庫和
“plugins”是一些插件。build.sh文件里面的make命令可以根據(jù)電腦性能來采用多線程
PC上安裝nfs,并且將/home/work目錄掛載上去,具體參見基本開發(fā)教程后幾章。
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-v2015.4-final-installer-dec.run)復(fù)制到 ubuntu 系統(tǒng)中,有些虛擬機可以直接復(fù)制,如果無法直接復(fù)制,可以先復(fù)制到 U 盤、移動硬盤,然后在虛擬機下從 U 盤復(fù)制。在 petalinux 安裝包所在目錄運行終端。
在 Petalinx 安裝包的目錄下打開 Ternimal 窗口,然后輸入以下兩條命令:
4、基于觸摸屏的vivado工程文檔來生成petalinux
(1)工程生成硬件文件
用vivado運行工程ts_an071_linux_ax7020,重新仿真,運行sdk,生成hd文件,但是原先的zip文件其實也有生成,直接用就是了。
在 vivado 工程的目錄下會有“ts_an071_linux_ax7020.sdk/system_wrapper_hw_platform_0”目錄產(chǎn)生,其中“system_wrapper_hw_platform_0”是 petalinux 需要的文件夾
將“system_wrapper_hw_platform_0”文件夾復(fù)制到裝有 petalinux 的 Linux 系統(tǒng)中,這里我們在\home\work 目錄下新建一個名為 petalinux 的文件夾。把“system_wrapper_hw_platform_0”文件夾復(fù)制到這個文件夾下,并改名為“ax7020_hw_platform_0”,以備 petalinux 使用。
(2)驅(qū)動以及petalinux工程生成創(chuàng)建
petalinux 下默認是沒有 HDMI 輸出相關(guān)的驅(qū)動的,黑金將這部分驅(qū)動加入到 petalinux 的驅(qū)動中,將黑金提供的驅(qū)動替換原有的驅(qū)動,首先復(fù)制驅(qū)動壓縮文件"drivers.tar.gz"到
“/home/work/petalinux”目錄下。
在 root 賬戶下迚入“/opt/Xilinx/petalinux-v2015.4-final/components/linux-kernel/xlnx-4.0”目錄,這是 petalinux 安裝后的 Linux 內(nèi)核所在目錄,然后運行解壓命令。
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)修改設(shè)備樹
工程目錄下,即/home/work/petalinux/ax7020_an071
gedit subsystems/linux/configs/device-tree/system-top.dts復(fù)制如下
/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 = <&gpio0 8 0>;drv-vbus;};xilinx_drm_0: xilinx_drm {compatible = "xlnx,drm";xlnx,vtc = <&v_tc_0>;xlnx,connector-type = "HDMIA";xlnx,encoder-slave = <&an071_encoder_0>;clocks = <&axi_dynclk_0>;planes {xlnx,pixel-format = "xrgb8888";plane0 {dmas = <&axi_vdma_0 0x0>;dma-names = "dma";};};};an071_encoder_0: an071_encoder {compatible = "ax_lcd,drm-encoder";}; };&usb0 {status = "okay";dr_mode = "host";usb-phy = <&usb_phy0>; };&axi_dynclk_0 {compatible = "digilent,axi-dynclk";#clock-cells = <0x0>;xlnx,s00-axi-addr-width = <0x5>;xlnx,s00-axi-data-width = <0x20>;clocks = <&clkc 0xf>; };&i2c1 {compatible = "cdns,i2c-r1p10";status = "okay";alinx_an071@38 {compatible = "alinx,an071";reg = <0x38>;interrupt-parent = <&intc>;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)配置內(nèi)核
工程目錄下,即/home/work/petalinux/ax7020_an071
petalinux-config -c kernelDevice 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 rootfsFilesystem 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/ax7020_an071/images/linux下的BOOT.BIN和image.ub拷貝到sd卡中,注意SD卡先格式化成FAT格式,不用分區(qū)。
(5)下載燒錄準備
聯(lián)網(wǎng)
查看ip,例如192.168.1.136
總結(jié)
以上是生活随笔為你收集整理的基于AX7020的petalinux生成并驱动液晶屏(071)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一周减压时刻表:和压力说再见
- 下一篇: lei