1.kernel
实际操作时候,下面两条命令就够了。
make ARCH=arm xilinx_zynq_defconfig
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- uImage LOADADDR=0x00008000
2.文件系统
下载
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842473/Build+and+Modify+a+Rootfs
实际操作命令:
gunzip ramdisk.image.gz
mkdir file_tmp
sudo mount arm_ramdisk.image -o loop ./file_tmp/
sudo umount ./file_tmp
gzip ramdisk.image
sudo apt-get install u-boot-tools
sudo mkimage -A arm -T ramdisk -C gzip -d ramdisk.image.gz uramdisk.image.gz
3.devicetree
设备树编译出错
https://blog.csdn.net/qq_28398969/article/details/85235534
a.错误信息
$ ./scripts/dtc/dtc -I dts -O dtb -o devicetree.dtb ./arch/arm/boot/dts/zynq-zc706.dts
Error: ./arch/arm/boot/dts/zynq-zc706.dts:7.1-9 syntax error
FATAL ERROR: Unable to parse input tree
b.原因
根据提示,是zynq-zed.dts这个文件的15行出错。
将该行修改为 /include/ “zynq-7000.dtsi”
c.重新执行命令
./scripts/dtc/dtc -I dts -O dtb -o devicetree.dtb ./arch/arm/boot/dts/zynq-zc706.dts
可以在顶层目录看到生成的 devicetree.dtb 设备树文件
d.另一个解决方法:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_zynq_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
在./arch/arm/boot/dts/目录下会生成zynq-zed.dtb文件,
两个设备树文件内容是一样的,只是文件名不同。
实际操作执行以下命令:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs (一路Y)
在路径/home/zhangyi/work/linux-xlnx-master/arch/arm/boot/dts下生成zynq-zc706.dtb
改名为devicetree.dtb
将BOOT.bin devicetree.dtb uImage uramdisk.image.gz 拷贝到sd卡 然后上电
Hooray!
Zynq>
- 5.当然还是要体验一把helloworld了
在电脑linux环境中,创建一个hello.c:
#include <stdio.h>
int main()
{
printf("hello hlf
");
return 0;
}
在hello.c路径下,生成可执行文件:
cd /home/hlf/mnt/zynq_pro #hello.c所在目录
source /opt/Xilinx/SDK/2017.1/settings64.sh #定位
arm-xilinx-linux-gnueabi-gcc hello.c -o hello -static #生成执行文件
zynq> mkdir -p /mnt/mmc
zynq> mount /dev/mmcblk0p1 /mnt/mmc
zynq> cd ./mnt/mmc/
zynq> ./zynq_hello
hello hlf
hello hlf