使用的工具為vivado2016.4,sdk也是2016.4.
準(zhǔn)備工作:
首先下載如下的目標(biāo)文件:
1.下載xilinx官方的bootloader文件
$ git clone https://github.com/Xilinx/u-boot-xlnx.git boot_loader-generator
2.下載xilinx device tree生成工具
git clone https://github.com/Xilinx/device-tree-xlnx.git device_tree-generator
3.下載dtc編譯工具
git clone https://git.kernel.org/pub/scm/utils/dtc/dtc.git dtc
4.下載linux kernel
git clone https://github.com/Xilinx/linux-xlnx.git linux_kernel-sources
5.下載root file system
$ git clone git://git.buildroot.net/buildroot file_system
6.拷貝用戶空間AXIDMA測(cè)試程序
git clone https://github.com/bperez77/xilinx_axidma
PL端
1.創(chuàng)建PL端工程
這里給一張圖,按圖在vivado里設(shè)置該工程,(我用的是zedboard)
2.創(chuàng)建設(shè)備樹(shù)
a)在生成bit文件并export后的vivado工程中,選擇file--》launch sdk---》點(diǎn)擊ok
b)在菜單欄中選擇Xilinx Tools --》 Repositories
c)在彈窗中選擇New,并添加在第一小節(jié)中下載的device tree,如下圖所示。
d)接下來(lái)創(chuàng)建BSP
選擇File--》New--》Board Support Package,在Board Support Package框中選擇 device tree,然后點(diǎn)擊Finish。在跳出的窗口中選擇bootargs,并填入如下:
console=ttyPS0,115200 root=/dev/mmcblk0p2 rw rootfstype=ext4 earlyprintk rootwait
完成后會(huì)多出如下內(nèi)容:
生成的設(shè)備樹(shù)位于axidma_user/axidma_user.sdk/device_tree_bsp_0:
其中pl.dtsi是PL側(cè)設(shè)備樹(shù)信息,正確的工程生成的設(shè)備樹(shù)如下:
/*
* CAUTION: This file is automatically generated by Xilinx.
* Version:
* Today is: Sun Apr 2 18:20:15 2017
*/
/ {
amba_pl: amba_pl {
#address-cells = 《1》;
#size-cells = 《1》;
compatible = “simple-bus”;
ranges ;
axi_dma_0: dma@40400000 {
#dma-cells = 《1》;
clock-names = “s_axi_lite_aclk”, “m_axi_sg_aclk”, “m_axi_mm2s_aclk”, “m_axi_s2mm_aclk”;
clocks = 《&clkc 15》, 《&clkc 15》, 《&clkc 15》, 《&clkc 15》;
compatible = “xlnx,axi-dma-1.00.a”;
interrupt-parent = 《&intc》;
interrupts = 《0 29 4 0 30 4》;
reg = 《0x40400000 0x10000》;
xlnx,addrwidth = 《0x20》;
dma-channel@40400000 {
compatible = “xlnx,axi-dma-mm2s-channel”;
dma-channels = 《0x1》;
interrupts = 《0 29 4》;
xlnx,datawidth = 《0x20》;
xlnx,device-id = 《0x0》;
};
dma-channel@40400030 {
compatible = “xlnx,axi-dma-s2mm-channel”;
dma-channels = 《0x1》;
interrupts = 《0 30 4》;
xlnx,datawidth = 《0x20》;
xlnx,device-id = 《0x0》;
};
};
axi_gpio_0: gpio@41200000 {
#gpio-cells = 《2》;
compatible = “xlnx,xps-gpio-1.00.a”;
gpio-controller ;
reg = 《0x41200000 0x10000》;
xlnx,all-inputs = 《0x0》;
xlnx,all-inputs-2 = 《0x0》;
xlnx,all-outputs = 《0x1》;
xlnx,all-outputs-2 = 《0x0》;
xlnx,dout-default = 《0x00000000》;
xlnx,dout-default-2 = 《0x00000000》;
xlnx,gpio-width = 《0x8》;
xlnx,gpio2-width = 《0x20》;
xlnx,interrupt-present = 《0x0》;
xlnx,is-dual = 《0x0》;
xlnx,tri-default = 《0xFFFFFFFF》;
xlnx,tri-default-2 = 《0xFFFFFFFF》;
};
};
};
生成FSBL
依然是剛剛打開(kāi)的skd中。
a)File-》New-》Application Project.注意:按如下方式核對(duì)一下。無(wú)誤后點(diǎn)擊finish。
b)在Project explorer中右鍵FSBL,然后選擇Bulid Configuration項(xiàng),然后選擇Set Active -》Release。再一次右鍵FSBL,然后選擇Clean Project,然后在郵件FSBL,然后選擇Build Project。
如果順利console窗口的輸出如下:
其所在目錄和device tree在統(tǒng)一個(gè)目錄下:
編譯u-boot
按如下方式修改u-boot,使用SD上的文件系統(tǒng)而非ramdisk文件系統(tǒng)
導(dǎo)出xilinx路徑:
export PATH=/opt/Xilinx/SDK/2016.4/gnu/arm/lin/bin:$PATH
export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
然后編譯
gsc@gsc-250:~/zynq7000/ZedBoard/resources/boot_loader/boot_loader-generator$ make distclean
gsc@gsc-250:~/zynq7000/ZedBoard/resources/boot_loader/boot_loader-generator$ make zynq_zed_config
編譯完成以后,u-boot跟目錄變成:
我們需要圖中綠色的u-boot文件,這里將其重命名成u-boot.elf。下一小節(jié)將使用它。
生成二進(jìn)制文件
依然是SDK里。選擇Xilinx Tools-》Create Boot Image,切記相關(guān)配置。
其中-boot.elf,F(xiàn)SBL.elf以及bit文件是前面生成的。
最終將在output path下指定的路徑里將生成Boot.bin文件供后面使用。至此可以退出SDK。
編譯linux
導(dǎo)出xilinx路徑:
export PATH=/opt/Xilinx/SDK/2016.4/gnu/arm/lin/bin:$PATH
export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
配置linux
$ make distclean
$make ARCH=arm xilinx_zynq_defconfig
$ make ARCH=arm menuconfig
$ export PATH=/home/gsc/zynq7000/ZedBoard/projects/boot_loader/tools/:$PATH(這個(gè)是前面編譯生成uboot下的tools路徑)
$make ARCH=arm UIAMGE_LOADDR=0x8000 uImage
這里需要配置linux,具體來(lái)說(shuō)就是去掉ramdisk的支持,并且開(kāi)啟代碼的支持。
文件太長(zhǎng)不單獨(dú)列出,有需要,下載地址:
編譯完成后
生成linux加載使用的設(shè)備樹(shù)
如果沒(méi)錯(cuò),則生成的設(shè)備樹(shù)在如下目錄:
使使用如下命令生成設(shè)備樹(shù)
gsc@gsc-250:~/zynq7000/ZedBoard/projects/linux_kernel/scripts/dtc$ dtc -O dtb -I dts -o devicetree.dtb /home/gsc/zynq7000/ZedBoard/projects/hardware_design/axidma_user/axidma_user.sdk/device_tree_bsp_0/system.dts
生成文件系統(tǒng)
導(dǎo)出xilinx路徑:
export PATH=/opt/Xilinx/SDK/2016.4/gnu/arm/lin/bin:$PATH
export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
make xconfig
make
整個(gè)編譯過(guò)程會(huì)根據(jù)配置先下載相關(guān)工具,然后進(jìn)行編譯。
在生成的目錄中
file_system/output/images/rootfs.ext4
編譯DMA測(cè)試程序:
make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm KBUILD_DIR= driver
拷貝到SD中
1.拷貝跟文件系統(tǒng)到ext4分區(qū):
sudo mount -t ext4 -o loop XXX/rootfs.ext4 /mnt
sudo cp -rf /mnt/* ${Where you mount SD card}
sudo umount -l /mnt
將生成的DMA測(cè)試程序拷貝到SD卡的/media目錄下
2.拷貝系統(tǒng)鏡像到FAT分區(qū)
boot.bin
devicetree.dtb
uIamge
-
dma
+關(guān)注
關(guān)注
3文章
559瀏覽量
100429 -
Zynq
+關(guān)注
關(guān)注
9文章
608瀏覽量
47126
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論