linux下vivado编译卡死,vivado+zedboard之Linux编译
本文將介紹如何利用上節搭建好的交叉編譯環境編譯嵌入式Linux所需的文件,包括u-boot、uImage(內核)、uramdisk.image.gz(文件系統)和devicetree.dtb(設備樹)。
原料:
u-boot-xlnx.git
linux-xlnx.git
device-tree-xlnx-xilinx-v2014.4.zip
編譯
1. U-Boot
~$ mkdir ZYNQ
~$ cd ZYNQ/
~/ZYNQ$ mkdir buildxil2014.4
~/ZYNQ$ cd buildxil2014.4/
~/ZYNQ/buildxil2014.4$ git clone https://github.com/Xilinx/u-boot-xlnx.git //或者先下載好,直接copy、解壓
cd u-boot-xlnx
在編譯之前,先進行配置,配置文件在u-boot-xlnx/include/configs下,打開zynq_common.h可查看信息。包括所需要的幾個文件的名稱等
make zynq_zed_config
make
cp u-boot u-boot.elf
如果需要安裝python:
sudo apt-get --reinstall install python-minimal
在u-boot-xlnx/include/configs下,查看zynq_common.h,zynq_zed.h(優先),決定了內核等文件的名稱。
本例使用zynq_zed_config:
“ethaddr=00:0a:35:00:01:22\0” \
“kernel_image=uImage\0” \
“kernel_load_address=0x2080000\0” \
“ramdisk_image=uramdisk.image.gz\0” \
“ramdisk_load_address=0x4000000\0” \
“devicetree_image=devicetree.dtb\0” \
“devicetree_load_address=0x2000000\0” \
“bitstream_image=system.bit.bin\0” \
“boot_image=BOOT.bin\0” \
2. uImage
使用配置文件:xilinx_zynq_defconfig(arch/arm/configs)
cd ~/ZYNQ/buildxil2014.4
git clone https://github.com/Xilinx/linux-xlnx.git //或直接copy下載好的linux-xlnx-xilinx-v2014.4.tar.gz
cd ~/ZYNQ/buildxil2014.4/u-boot-xlnx-xilinx-v2014.4/ //需要先安裝u-boot-tools
sudo apt-get install u-boot-tools
cd ~/ZYNQ/buildxil2014.4/linux-xlnx-xilinx-v2014.4
make ARCH=arm xilinx_zynq_defconfig
make ARCH=arm UIMAGE_LOADADDR=0x8000 uImage
cp arch/arm/boot/uImage
3. uramdisk.image.gz文件系統
這里不進行編譯了,直接使用官網的:http://www.wiki.xilinx.com/Build+and+Modify+a+Rootfs
或:
wget http://www.wiki.xilinx.com/file/view/arm_ramdisk.image.gz/41943558/arm_ramdisk.image.gz
修改根文件系統
cp arm_ramdisk.image.gz ramdisk.image.gz
gunzip ramdisk.image.gz
mkdir file_tmp
sudo mount ramdisk.image -o loop ./file_tmp/
這樣可以在file_tmp目錄中對文件系統進行修改,修改完成之后umount并重新壓縮即可
sudo umount file_tmp/
gzip ramdisk.image
//添加u-boot頭部
sudo apt-get install u-boot-tools
mkimage -A arm -T ramdisk -C gzip -d ramdisk.image.gz uramdisk.image.gz
如果需要進行修改,可以先將uramdisk.image.gz解壓為uramdisk.image,再掛載到指定目錄
4. devicetree.dtb
建議:
建立一個devicetree目錄,將/scripts/dtc/dtc工具copy過來,每次使用時在其下建立工程目錄;
將所需要的dts,dtsi文件copy到其下的工程目錄下;
然后對工程目錄打開終端:../dtc -I dts -O dtb -o devicetree.dtb system.dts即可;
如果只有ARM,沒有使用PL部分:
在linux-xlnx/arch/arm/boot/dts/下,找到zynq-zed.dts及相關dtsi文件,copy到上述devicetree/xil2014.4/下:
../dtc -I dts -O dtb -o devicetree.dtb zynq-zed.dts
為PL配置devicetree
自己寫的PL程序對于ARM來說相當于是新的外設,在xil提供的Linux內核中的dts是沒有的,需要自己制作匹配的dts文件。SDK提供了根據在vivado中的硬件設計文件來生成設備樹的工具。也可以自己手工編寫或作出調整。
使用SDK制作和PL相匹配的devicetree。
SDK設置
下載device-tree-xlnx-xilinx-v2014.4.tar.gz,解壓將device-tree-xlnx-xilinx-v2014.4文件夾。
添加至:bsp repo=D:\Xilinx\SDK\2014.1\data\embeddedsw\lib\bsp下,
使用SDK添加下載好的目錄:SDK Menu: Xilinx Tools > Repositories > New… (bsp repo) > OK
注:由于device-tree-xlnx-xilinx-v2014.4.tar.gz,但是有win下路徑\的問題;重新在https://github.com/Xilinx/device-tree-xlnx下載,device-tree-xlnx-xilinx-v2014.4.zip(clone in desktop),解決
SDK使用
新建:SDK Menu: File > New > Board Support Package > Board Support Package OS: device-tree > Finish
在彈出的的對話框中修改參數;比如bootargs內核的命令行參數,內核啟動時傳給內核,可設置為:console=ttyPS0,115200 root=/dev/ram rw earlyprintk
編譯完成后在工程的\HW\Lab2-LedIP\Lab2-LedIP.sdk\device_tree_bsp_0下可以找到system.dts文件
將所有的dts,dtsi文件copy到虛擬機下的buildxil2014.4/linux-xlnx-xilinx-v2014.4下,使用dtc工具生成devicetree.dtb
../dtc -I dts -O dtb -o devicetree.dtb system.dts
注:這種方法在測試的時候有效,可以使用;但是在做HDMI的時候不能用了,沒搞明白怎么回事。只有手工編寫dts文件了。
小結
至此,已經編譯了xil2014.4-Linux所需的文件了。當然現在還不能啟動Linux,還需要制作BOOT.bin文件。這些方法適用于其他硬件,需要確定合適的配置文件。 在實際操作的過程中,由于工具版本、源代碼出處及版本等問題,折騰了很多次才選擇這種方法,而且經過后續驗證有效。在參考陸佳華的書、前輩博客、各種論壇的過程中,遇到過xilinx、xup、zedboard、digilent、AD等出的源碼或者編譯好的文件,有的是面向ISE的(比如ISE、Vivado的設備樹定義不一樣,甚至vivado2014.1和2014.4都不完全一樣),在參考資料和手頭源碼加個人關于這塊不甚了解的情況下,經歷了N次痛苦的過程。 由于時間問題,個中細節就不再詳述了,看錯誤信息、查論壇一般可以解決。
總結
以上是生活随笔為你收集整理的linux下vivado编译卡死,vivado+zedboard之Linux编译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解惑图数据库!你知道什么是图数据库吗?
- 下一篇: 五种IO模型:阻塞IO和非阻塞IO、同步