zynq基礎-->linux下軟件應用


操作系統:Ubuntu 16.04 LTS

應用軟件:Vivado 2016.2  + petalinux 2016.2

參考官方應用手冊:ug1144-petalinux-tools-reference-guide.pdf

1、軟件安裝

1.1 基礎軟件安裝

在安裝應用軟件前,需要為zynq開發環境安裝必要的基礎軟件,在手冊11頁已經明確標明。

注意:tftp軟件使用tftp-hpa,如下所示:

#1、安裝
sudo apt-get install tftp-hpa tftpd-hpa

#2、建立目錄
sudo mkdir /tftpboot
sudo chmod 777 /tftpboot

#3、配置
sudo vim /etc/default/tftpd-hpa
#修改以下兩項
TFTP_DIRECTORY="/tftpboot"
TFTP_OPTIONS="-l -c -s"

#4、啟動
sudo service tftpd-hpa restart

在此基礎上,為了啟動eclipse需要安裝java開發環境和支持庫:

sudo apt-get install openjdk-8-jre

sudo apt-get install lib32z1
sudo apt-get install lib32ncurses5
sudo apt-get install lib32bz2-1.0 (官方說需要安裝,但實際沒有找到這個庫)
sudo apt-get install lib32stdc++6

1.2安裝配置

完成1.1步驟后,需要打開tftp服務器,在后期可以直接通過petalinux給zynq更新代碼

1.3安裝應用軟件

參考官方手冊

注意:為安裝目錄打開所有可讀可寫可執行權限!

1.4應用軟件配置

為了能夠順利啟動vivado、sdk以及petalinux,需要做如下幾步:

1、在/opt/Xilinx/SDK/2016.2/.settings64-Software_Development_Kit__SDK_.sh中增加

export SWT_GTK3=0

2、在home目錄下新建文件:.bash_aliases,

在啟動控制台頭bash會自動調用.bash_aliases里的內容。做如下設置:

echo "<----自啟動設置---->"

echo "1.設置快捷操作命令"
############################
#重命名
###########################

echo "2.設置zynq sdk環境"
############################
#自動運行
###########################
export EXTERN_COMPILER=/opt/Xilinx/petaLinux/petalinux-v2016.2-final/tools/linux-i386/gcc-arm-linux-gnueabi/bin/ source
/opt/Xilinx/petaLinux/petalinux-v2016.2-final/settings.sh source /opt/Xilinx/Vivado/2016.2/settings64.sh

3、安裝的應用軟件目錄很多默認需要root權限,如果是用普通用戶操作應用軟件,需要為很多目錄增加權限。

4、修復awk錯誤

官方bug報告中有如下說明:

If you are not using the AXI BFM IP, you can remove the LD_LIBRARY_PATH setting from settings64.sh

通過屏蔽.settings64-Vivado.sh中對“LD_LIBRARY_PATH”的賦值,便可修復awk錯誤。

5、鏈接新庫

官方包里有些庫已經過時了,需要重新鏈接到系統的庫。

#先做更新
sudo add-apt-repository ppa:ubuntu-toolchain-r/test 
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

#然后鏈接
cd /opt/Xilinx/SDK/2016.2/lib/lnx64.o/
mv libstdc++.so.6 libstdc++.so.6.old 
ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 libstdc++.so.6

 

2、生成嵌入式文件

2.1生成硬件描述文件

根據系統需求,使用vivado生成硬件描述文件並啟動sdk生成硬件描述文件夾。

 

注意:linux下需要主動安裝驅動,在 <xilnix安裝目錄>/Vivado/2016.2/data/xicom/cable_drivers/lin64/install_scripts/install_drivers/ 

運行:

sudo install_drivers

完成后重啟電腦。

 

2.2根據已經存在的bsp生成petalinux工程

#生成工程bsp
petalinux-create -t project -s <path-to-bsp>

<path-to-bsp>= petalinux結構的bsp文件夾

 關於版本控制:

使用git在工程目錄下需要忽略三個文件夾:

1、.petalinux

2、build

3、images

2.3從頭新建petalinux工程

在petalinux工程目錄下使用命令:

petalinux-create --type project --template <CPU_TYPE> --name <PROJECT_NAME> CPU_TYPE = zynqMP 或 zynq 或 microblaze PROJECT_NAME 即為新建工程名字

petalinux-config --get-hw-description=<path-to-directory-which-contains-hardware-description-file> path-to-directory-which-contains-hardware-description-file:即為包含.hdf的文件夾

此過程中,會自動調用配置界面。配置完成后,生成fsbl,u-boot,內核,設備樹,根文件系統等。

問題:

在生成設備樹的過程中,會出現警告:

WARNING: ps7_ethernet_0: No reset found

WARNING: ps7_usb_0: No reset found

這個警告會導致以太網口不能使用!

解決:

 

2.4編譯生成鏡像文件

在petalinux工程目錄下使用命令:

petalinux-build -x distclean

LANG=C petalinux-build

生成uImage文件使用命令

petalinux-package --image -c kernel --format uImage

2.5生成啟動文件

在petalinux工程目錄下使用命令:

petalinux-package --boot --fsbl <FSBL image> --fpga <FPGA bitstream> --u-boot

FSBL image :fsbl文件位置,位於./images/linux
FPGA bitstream:bit :文件,位於./images/linux

執行命令后,會在工程目錄下生成BOOT.BIN文件。

在配置好啟動方式為SD卡啟動后,將此文件和image/linux下的image.ub拷貝進SD卡,便可啟動Linux

2.6生成打包文件

在petalinux工程目錄下使用命令:

petalinux-package --prebuilt --fpga <FPGA bitstream>

在工程目錄,生成pre-built文件夾,里面有系統需要的所有文件。

默認的登錄名及密碼都是root

2.7 將SD卡作為硬盤啟動Linux

這種情況下linux下所做的改動將會保存在SD卡上。

1、將linux下將SD卡分為兩個區,第一個區至少40M字節且格式化為FAT32,另一個區至少4G且格式化為EXT4。

2、使用"petalinux-config"命令,進入 "Image Packaging Configuration"->" Root filesystem type"然后選中SD卡,並保存配置。

3、重新編譯並生成BOOT.BIN及image文件

4、使用以下命令生成文件系統壓縮包:

#生成文件名為 rootfs.cpio,位於image/linux下
 petalinux-package --image -c rootfs --format initramfs

 

5、將BOOT.BIN和image.ub拷貝進SD卡的第一分區

6、將rootfs.cpio拷貝進SD卡的第二分區,並且使用以下命令解壓

sudo pax -rvf rootfs.cpio

3、軟件應用

規定命令的使用均在petalinux工程根目錄下使用!

使用petalinux啟動zynq,可以選擇3個階段。

階段1:僅僅下載FPGA 的bit流文件

階段2:啟動至uboot

階段3:完全啟動

3.1仿真啟動

使用以下命令調用軟件仿真:

petalinux-boot --qemu --prebuilt  3

3代表啟動等級為3,即為全部啟動。
1和2分別代表啟動至fsbl和u-boot。
軟件仿真僅能使用2和3!

退出軟件仿真使用 “ctrl+a” 松開以后按下 “x” 就可以了。

注意:若重新配置系統代碼,在編譯系統文件后,也需要重新更新pre-built文件夾(參考2.6節)

也可以為仿真指定新文件:

#調用./images/linux/u-boot.elf
petalinux-boot --qemu --u-boot

#調用./images/linux/zImage
petalinux-boot --qemu --kernel

#或者指定內核路徑,設備樹路徑(從zImage中提取設備樹文件)
petalinux-boot --qemu --image ./images/linux/zImage --dtb ./images/linux/system.dtb

3.2 jtga啟動

首先需要將啟動方式改為JTAG啟動。

與3.1命令類似,僅僅是將 "qemu"替換為"jtag"即可

petalinux-boot --jtag --prebuilt 3

 

除此之外也可以單獨下載部分代碼:

#下載bit文件
 petalinux-boot --jtag --fpga --bitstream <BITSTREAM>

#下載uboot代碼(image/linux/u-boot.elf)
petalinux-boot --jtag --u-boot

#下載內核文件(image/linux/zImage)
 petalinux-boot --jtag --kernel

#查看啟動的詳細信息
petalinux-boot --jtag --u-boot -v

#下載pmu 固件
 petalinux-boot --jtag --pmufw <PATH_TO_PMUFW_ELF> --u-boot

#獲取xmd日志信息
 petalinux-boot --jtag --prebuilt 3 --tcl test.txt

3.3使用tftp啟動目標板

在配置好tftp服務器的基礎上,需要運行命令:

petalinux-config

#進入 "Image Packaging Configuration".
#選中  "Copy final images to tftpboot"
#默認服務器文件位於“/tftpboot”,若不同還需要設置"tftpboot directory"

目標板需要連接網線,並且已經運行了U-boot(通過sd卡載入等)。在u-boot下進行如下設置:

#設置服務器ip
 set serverip <HOST IP ADDRESS>; saveenv

#啟動
run netboot

3.3固件打包

固件打包用於將工程文件(fsbl+bit+ssbl+linux)打包成為.tar.gz文件

petalinux-package --firmware --bootbin=<BOOT_BIN> --linux

#BOOT_BIN-> boot.bin文件所在位置
#linux自動引用./images/linux/image.ub文件

3.4 bsp打包

將當前工程打包為一個bsp文件,形成結構和其他開發板商提供的bsp包一樣。

在工程包外執行命令:

petalinux-package --bsp -p <plnx-proj-root> --output <name>

#<name>即為bsp包名稱(比如name = exercise,則會生成exercise.bsp文件)

 

3.5工程配置

petalinux提供了kconfig配置界面,能夠很詳細的配置系統很多參數。使用命令:

 petalinux-config

具體配置說明及操作從手冊第52頁往后都有說明。

 3.6基於petalinux的app開發

使用命令生成工程:

 petalinux-create -t apps [--template TYPE] --name <user-application-name> --enable

--template TYPE :可以選擇模板類型
<user-application-name> :工程名稱

#創建一個C模版應用
petalinux-create -t apps --template c --name myapp --enable

#創建一個C++模版應用
petalinux-create -t apps --template c++ --name myapp --enable

 

生成的工程位於./components/apps,在此工程模板的基礎上編輯源代碼,當有新文件需要修改當前目錄下的Makefile。

1、當要添加更多的源文件,可以簡單粗暴的添加對應的.o文件名

2、當要添加其他配置文件,在"install"目標下加入

#將myfile.conf 固化進 /etc目錄下
$(TARGETINST) myfile.conf  /etc

#將字符串"some text here" 固化進 /etc/system.conf下
$(TARGETINST) -a "some test here" /etc/system.conf

 

同時在petalinux配置菜單里面也會出現這項,可以通過修改kconfig來配置APP選項。

#進入配置界面后,Applications選項可以找到APP,並使能
petalinux-config -c rootfs

#使用命令編譯重新編譯,並將bin文件固化進文件系統
petalinux-build

當需要完全編譯整個系統時,使用:

LANG=C petalinux-build

當僅僅需要修改根文件系統時,在petalinux工程目錄下使用:

#假設app工程名為myapp
 petalinux-build -c rootfs -x do_gen_sysroot
 petalinux-build -c rootfs/myapp
 LANG=C petalinux-build -x package

此app便被加入了文件系統,可以使用以下命令來選擇app是否被編譯

petalinux-config -c rootfs

3.7 在文件系統中增加庫

 

3.8 自動登錄(開機自動運行APP)

創建一個新的app,並做如下修改:

#修改app內容
#include <unistd.h>
#include <stdio.h>
int main()
{
   execlp( "login", "login", "-f", "root", 0);
}

#修改makefile 的install 目標內容,這樣可以開機自動運行
$(TARGETINST) -d -p 0755 autologin /etc/init.d/autologin
$(TARGETINST) -s /etc/init.d/autologin /etc/rc5.d/S99autologin

 

注意:當需要設置一個APP開機運行且不會退出時,應當以守護進程的方式啟動它。

3.9 調試內核

使用GDB在QEMU仿真的支持下調試

#1.啟動仿真內核
petalinux-boot --qemu --kernel

#2.在QEMU啟動輸出的前幾行中,可以找到gdb 的 tcp端口號
-gdb tcp:<TCP_PORT>

#3.啟動linux另外一個命令行窗口,進入images/linux目錄

#4.啟動gdb調試
 petalinux-util --gdb vmlinux

#5.在GDB中使用剛才顯示的端口號
(gdb) target remote :9000

#6.然后盡情調試吧,折騰吧

 

注意:可以在配置菜單中打開內核調試選項:

petalinux-config--kernel > Kernel hacking > Kernel debugging


3.10 通過SDK下的TCF工具調試APP(未驗證通過)

首先生成執行文件

#1.進入根文件配置界面
petalinux-config -c rootfs

#2.在 Filesystem Packages 中進入base 子菜單

#3. 使能 tcf-agent 選項

#4.進入上層的  console/network 子菜單

#5.使能 dropbear-openssh-sftp-server 子菜單

#6.重新編譯

 

然后進行調試

#1.使用QEMU或者硬件啟動系統

#2.啟動SDK並新建工程

#3.在新建工程中選擇硬件描述符文件,位於"<plnx-proj-root>
#/subsystems/linux/hw-description/system.hdf"

#4.新建linux類型的debug

 

3.11 修改設備樹

設備樹的編輯在文件system-top.dts下,此文件位於subsystems/linux/configs/device-tree文件夾下。

設備樹的文檔位於內核跟目錄下的:Documentation/devicetree

3.12 u-boot配置

 若需要在u-boot下打開某些命令或選項,官方建議編輯 ./subsystems/linux/configs/u-boot/platform-top.h 文件,然后重新編譯u-boot

#編譯u-boot
petalinux-build -c u-boot

#生成u-boot.bin
petalinux-package --boot --fsbl <FSBL image> --fpga <FPGA bitstream> --u-boot

3.13 深度定制

關於需要修改最底層的驅動、源碼等等,需要將自己生成的uboot、linux源碼等放在當前工程根目錄的components目錄下操作

4 petalinux 工作流程

4.1基於官方提供的bsp上開發

在官方bsp開發可以提高開發速度,使用以下命令關聯bsp:

#關聯bsp,並在當前目錄創建工程
petalinux-create -t project -s <path-to-bsp>
#編譯生成最終的鏡像文件
LANG=C petalinux-build

在./build/build.log中有具體的編譯日志,在./images有編譯文件,在/tftpboot(tftp服務區文件夾,默認為此路徑)中也復制了一份。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM