Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Debian Linux on Zynq
Setup Flow
(Version March 2016 for Vivado 2015.4)
Shinya Takamaeda-Yamazaki
Nara Institute of Science...
Goal of this tutorial
n Constructing Zynq system with GPIO I/F and Debian Linux
l GPIO devices (LED and SW) are accessed f...
Setup flow for Debian Linux on Zynq
n Download and setup of FPGA board file (for Zybo)
n Hardware development on Vivado
n ...
Reference platform
n FPGA board: Digilent Zybo (Zynq XC7Z010)
l Almost same flow can be applied to ZedBoard and ZC706
n FP...
Download and setup FPGA board
file
Shinya T-Y, NAIST 5
FPGA board file for Zybo
n Zybo's board setting (I/O pins, …) is not included in Vivado.
Download and install it from Digi...
Install board file into Vivado system
n Unzip the download file and copy it into Vivado system
Shinya T-Y, NAIST 7
cp -a v...
Hardware development on
Vivado
Shinya T-Y, NAIST 8
Hardware development on Vivado
n Setup PATH
l If you use bash (default) or zsh
l If you use tcsh
n Create a working direct...
Create a new project
Shinya T-Y, NAIST 10
Shinya T-Y, NAIST 11
Shinya T-Y, NAIST 12
Shinya T-Y, NAIST 13
Shinya T-Y, NAIST 14
Shinya T-Y, NAIST 15
Shinya T-Y, NAIST 16
Shinya T-Y, NAIST 17
Select your board
Shinya T-Y, NAIST 18
Add a block design
Shinya T-Y, NAIST 19
Shinya T-Y, NAIST 20
Add IP
Shinya T-Y, NAIST 21
Add CPU
Shinya T-Y, NAIST 22
Add GPIO for LED and switch
Shinya T-Y, NAIST 23
Customize CPU
Shinya T-Y, NAIST 24
Double click
Connect to DRAM
Shinya T-Y, NAIST 25
Customize GPIO
Shinya T-Y, NAIST 26
Double click
Connect to LED and switches
Shinya T-Y, NAIST 27
Connect CPU and GPIO
Shinya T-Y, NAIST 28
Connect S_AXI and GPIO by auto
Shinya T-Y, NAIST 29
Connect LED and GPIO
Shinya T-Y, NAIST 30
Connect switches and GPIO2
Shinya T-Y, NAIST 31
Complete HW block design
Shinya T-Y, NAIST 32
Modify address value
Shinya T-Y, NAIST 33
0x43c0_0000 is recommended
Validate design
Shinya T-Y, NAIST 34
Create HDL wrapper
Shinya T-Y, NAIST 35
Then right click the block design,
and select "Create HDL Wrapper"
Shinya T-Y, NAIST 36
Generate Bitstream
Shinya T-Y, NAIST 37
Click "Generate Bitstream"
Bitstream has been Generated
Shinya T-Y, NAIST 38
Export Hardware with Bitstream (only once)
n This step is required only once for U-boot compilation
Shinya T-Y, NAIST 39
F...
Export Hardware with Bitstream (only once)
Shinya T-Y, NAIST 40
Prepare "ps7_init_gpl.{c,h}" by using "hsi"
(only once, for Zybo)
n Go to the SDK directory
n Launch "hsi"
n Open HW desig...
Prepare "ps7_init_gpl.{c,h}" by using "hsi"
(only once, for Zybo)
n Example in PNG
n If you use Zybo or other special boar...
Hardware development completed
n Your bitstream can be found at
zynq_debian/hw/zybo/zybo.runs/impl_1/zybo_wrapper.bit
n Co...
U-boot SPL and U-boot
Shinya T-Y, NAIST 44
Download U-boot and modify it
n Create a new working directory for software
n Clone from GitHub
n Checkout the tagged vers...
Edit "CONFIG_EXTRA_ENV_SETTINGS"
and "CONFIG_BOOTCOMMAND"
n CONFIG_EXTRA_ENV_SETTINGS
n CONFIG_BOOTCOMMAND
Shinya T-Y, NAI...
Edit "CONFIG_EXTRA_ENV_SETTINGS"
and "CONFIG_BOOTCOMMAND"
n Example in PNG (Check carefully!)
Shinya T-Y, NAIST 47
Build U-boot
n Setup PATH
l If you use bash (default) or zsh
l If you use tcsh
n Setup some parameters
l If you use bash o...
Build U-boot
n If you use Zybo (or an other board that its fsbl software
source code is NOT included in "u-boot-xlnx/board...
Build U-boot
n At u-boot-xlnx
l If you youse other boards, such as ZedBoard, please find its
corresponding config command ...
Build U-boot
n Example in PNG
n "u-boot.img" and "boot.bin" have been generated
at u-boot-xlnx
Shinya T-Y, NAIST 51
U-boot has been successfully generated
n Copy two files into somewhere
n Boot order is
(1) U-boot SPL -> (2) U-boot -> (3)...
Linux kernel
Shinya T-Y, NAIST 53
Download Linux kernel
n Move to the software directory
n Clone from GitHub
n Checkout the tagged version for Vivado 2015.4...
Edit device tree file
n Edit "zynz-zybo.dts"
l if you use other device, please find the
corresponding device tree file
in ...
Configure the kernel options
n At linux-xlnx, load the default options
n Configure the kernel options by menuconfig
Shinya...
Device Drivers->
Shinya T-Y, NAIST 57
Device Drivers->Userspace I/O drivers
Shinya T-Y, NAIST 58
Enable UIO
Shinya T-Y, NAIST 59
Device Drivers->Generic Driver Options
Shinya T-Y, NAIST 60
Edit Size in Mega Bytes of CMA
Shinya T-Y, NAIST 61
Set 256
(Option) File systems->Network File
Systems
Shinya T-Y, NAIST 62
Check "linux-xlnx/.config"
n At linux-xlnx
n Especially, check the size of
CMA
Shinya T-Y, NAIST 63
less .config
Build Linux kernel and device tree
n Setup PATH
l If you use bash (default) or zsh
l If you use tcsh
n Build the kernel im...
Build Linux kernel and device tree
n Example in PNG
Shinya T-Y, NAIST 65
Linux kernel and device tree have been
successfully generated
n Copy uImage and zynq-zybo.dtb to somewhere
n Even if you w...
Debian root file sytem
Shinya T-Y, NAIST 67
Setup environment
n Setup parameters (on bash)
n Build the root file system in $targetdir (= rootfs)
Shinya T-Y, NAIST 68
...
Build rootfs with QEMU
n Setup APT
Shinya T-Y, NAIST 69
distro=jessie
export LANG=C
/debootstrap/debootstrap --second-stag...
Build rootfs with QEMU
n Install applications and setup root password
n IP address
Shinya T-Y, NAIST 70
apt-get update
apt...
Build rootfs with QEMU
n resolve.conf
n sshd_config
l “PasswordAuthentication yes”
Shinya T-Y, NAIST 71
echo <<EOT >> /etc...
Build rootfs with QEMU
n Add a new admin user
l Enter, enter, …
n Edit sudo user
l Edit like below
Shinya T-Y, NAIST 72
ad...
Build rootfs with QEMU
n ntp.conf
n Insert a new server (in my case "ntp.nict.jp")
Shinya T-Y, NAIST 73
vi /etc/ntp.conf
#...
Build rootfs with QEMU
n rc.local
n Insert 3 lines for NTP setup
Shinya T-Y, NAIST 74
vi /etc/rc.local
service ntp stop
nt...
Build rootfs with QEMU
n fstab
n Insert 1 line (to mount 1st partition of SD card)
n Create a new directory for 1st partit...
Build rootfs with QEMU
n Permission rule of /dev/uio (Userspace I/O)
n Permission rule of /dev/xdevconfig (Configuration p...
Build rootfs with QEMU
n Hostname, etc.
n Install applications (if you need)
n Finish
Shinya T-Y, NAIST 77
echo debian-zyn...
Setup SD card
Shinya T-Y, NAIST 78
Format SD card
n Prepare SD card (> 8GB)
n Install and launch gparted
n Setup 2 partitions
l BOOT (64MB, FAT32, with "boot...
Copy the created files into the SD card
n Mount the formatted SD card
l /media/yourname/BOOT and /media/yourname/rootfs
n ...
Boot from SD card
Shinya T-Y, NAIST 81
Jumper pin (Zybo): Set SD boot
Shinya T-Y, NAIST 82
Jumper pin (ZedBoard)
Shinya T-Y, NAIST 83
Boot system from SD card
n Connect Zybo to network
l Or connect UART port to the host PC
n Insert SD card and power-on
n L...
Time zone and locale
n Change the time zone
l In my case, Asia -> Tokyo
n Change the locale
l Select "en_US.UTF-8", "ja_JP...
CMA (Continuous memory
allocator) driver
Shinya T-Y, NAIST 86
Copy linux-xlnx into the SD card
n Mount the formatted SD card
l /media/yourname/BOOT and /media/yourname/rootfs
n Copy li...
Build CMA driver
n Login
n Compile kernel modules
n Compile CMA driver
Shinya T-Y, NAIST 88
(on zynq) cd /usr/src/kernel
(...
Modify /etc/rc.local for CMA driver
n Edit /etc/rc.local
n Insert 1 line before "exit 0"
n Reboot
Shinya T-Y, NAIST 89
sh ...
Run test applications
Shinya T-Y, NAIST 90
Download applications and library
n Download "zynq-linux" from GitHub
n Copy zynq-linux to Zynq system
l Type password
n L...
Run GPIO test
n Compile "axis_test.c" and run it
l LED pattern is changed
l The value of switches is read
Shinya T-Y, NAIS...
Run CMA test
n Compile "cma_test.c" and run it
n RUN MODE 0: No CMA
n RUN MODE 1-3: CMA
l 1: Cache Enabled
l 2: Cache Disa...
How to replace the bitstream
Shinya T-Y, NAIST 94
Method1: Replace zynq.bit in /sdcard/
n The bitstream on SD card can be replaced on host PC
n Since 1st partition of SD ca...
Method2: Reconfigure via /dev/xdevcfg
n Logic part (PL) can be dynamically changed from SW
n If you change the CPU setting...
Reference
Shinya T-Y, NAIST 97
Reference
n Yet Another Guide to Running Linaro Ubuntu Linux Desktop
on Xilinx Zynq on the ZedBoard
l https://fpgacpu.word...
Upcoming SlideShare
Loading in …5
×

Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)

18,290 views

Published on

Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Version March 2016 for Vivado 2015.4)

Published in: Technology
  • $ sudo make scripts/kconfig/conf --silentoldconfig Kconfig CHK include/config.h GEN include/autoconf.mk In file included from include/linux/compiler.h:54:0, from include/linux/byteorder/little_endian.h:12, from ./arch/arm/include/asm/byteorder.h:29, from include/compiler.h:125, from include/image.h:19, from ./include/common.h:82: include/linux/compiler-gcc.h:114:30: fatal error: linux/compiler-gcc6.h: No such file or directory #include gcc_header(__GNUC__) ^ compilation terminated. scripts/Makefile.autoconf:72: recipe for target 'include/autoconf.mk' failed make[1]: *** [include/autoconf.mk] Error 1 make: *** No rule to make target 'include/config/auto.conf', needed by 'include/config/uboot.release'. Stop.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • I have followed all the steps until I found the problem at slide 50.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Thank you for your great work! As a minor comment, ps7_cortex9_0 should be ps7_cortexa9_0 in P.41.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)

  1. 1. Debian Linux on Zynq Setup Flow (Version March 2016 for Vivado 2015.4) Shinya Takamaeda-Yamazaki Nara Institute of Science and Technology (NAIST) E-mail: shinya_at_is.naist.jp
  2. 2. Goal of this tutorial n Constructing Zynq system with GPIO I/F and Debian Linux l GPIO devices (LED and SW) are accessed from software on CPU l (User IP can be added on PL part, if needed) Shinya T-Y, NAIST 2 ARM Core L1 L2 DRAM I/F ARM Core L1 PS PL GPIO User IP LED SW FPGA DRAM GP ACP HP
  3. 3. Setup flow for Debian Linux on Zynq n Download and setup of FPGA board file (for Zybo) n Hardware development on Vivado n U-boot SPL and U-boot (only once) n Linux kernel (only once) and device tree (only once) n Debian root file system (only once) n Setup SD card (only once) n Boot from SD card n CMA (Continuous memory allocator) driver (only once) n Run test applications n How to replace the bitstream Shinya T-Y, NAIST 3
  4. 4. Reference platform n FPGA board: Digilent Zybo (Zynq XC7Z010) l Almost same flow can be applied to ZedBoard and ZC706 n FPGA tool: Xilinx Vivado 2015.4 l License is "Web Pack" n Target OS: Debian 8.0 (Jessie) n Host OS: Ubuntu 14.04 Shinya T-Y, NAIST 4
  5. 5. Download and setup FPGA board file Shinya T-Y, NAIST 5
  6. 6. FPGA board file for Zybo n Zybo's board setting (I/O pins, …) is not included in Vivado. Download and install it from Digilent web page l https://reference.digilentinc.com/vivado:boardfiles/ l Follow the procedure on the web page Shinya T-Y, NAIST 6
  7. 7. Install board file into Vivado system n Unzip the download file and copy it into Vivado system Shinya T-Y, NAIST 7 cp -a vivado-boardfiles-master/new/boardfiles/* ¥ /opt/Xilinx/Vivado/2015.4/data/boards/board_files/
  8. 8. Hardware development on Vivado Shinya T-Y, NAIST 8
  9. 9. Hardware development on Vivado n Setup PATH l If you use bash (default) or zsh l If you use tcsh n Create a working directory and launch Vivado Shinya T-Y, NAIST 9 source /opt/Xilinx/Vivado/2015.4/settings64.sh source /opt/Xilinx/Vivado/2015.4/settings64.csh cd ~/ mkdir zybo_debian mkdir zybo_debian/hw cd zybo_debian/hw vivado &
  10. 10. Create a new project Shinya T-Y, NAIST 10
  11. 11. Shinya T-Y, NAIST 11
  12. 12. Shinya T-Y, NAIST 12
  13. 13. Shinya T-Y, NAIST 13
  14. 14. Shinya T-Y, NAIST 14
  15. 15. Shinya T-Y, NAIST 15
  16. 16. Shinya T-Y, NAIST 16
  17. 17. Shinya T-Y, NAIST 17 Select your board
  18. 18. Shinya T-Y, NAIST 18
  19. 19. Add a block design Shinya T-Y, NAIST 19
  20. 20. Shinya T-Y, NAIST 20
  21. 21. Add IP Shinya T-Y, NAIST 21
  22. 22. Add CPU Shinya T-Y, NAIST 22
  23. 23. Add GPIO for LED and switch Shinya T-Y, NAIST 23
  24. 24. Customize CPU Shinya T-Y, NAIST 24 Double click
  25. 25. Connect to DRAM Shinya T-Y, NAIST 25
  26. 26. Customize GPIO Shinya T-Y, NAIST 26 Double click
  27. 27. Connect to LED and switches Shinya T-Y, NAIST 27
  28. 28. Connect CPU and GPIO Shinya T-Y, NAIST 28
  29. 29. Connect S_AXI and GPIO by auto Shinya T-Y, NAIST 29
  30. 30. Connect LED and GPIO Shinya T-Y, NAIST 30
  31. 31. Connect switches and GPIO2 Shinya T-Y, NAIST 31
  32. 32. Complete HW block design Shinya T-Y, NAIST 32
  33. 33. Modify address value Shinya T-Y, NAIST 33 0x43c0_0000 is recommended
  34. 34. Validate design Shinya T-Y, NAIST 34
  35. 35. Create HDL wrapper Shinya T-Y, NAIST 35 Then right click the block design, and select "Create HDL Wrapper"
  36. 36. Shinya T-Y, NAIST 36
  37. 37. Generate Bitstream Shinya T-Y, NAIST 37 Click "Generate Bitstream"
  38. 38. Bitstream has been Generated Shinya T-Y, NAIST 38
  39. 39. Export Hardware with Bitstream (only once) n This step is required only once for U-boot compilation Shinya T-Y, NAIST 39 File -> Export -> Export Hardware
  40. 40. Export Hardware with Bitstream (only once) Shinya T-Y, NAIST 40
  41. 41. Prepare "ps7_init_gpl.{c,h}" by using "hsi" (only once, for Zybo) n Go to the SDK directory n Launch "hsi" n Open HW design n Generate application files l Type this command in 1 line! n Complete! Shinya T-Y, NAIST 41 cd ~/zybo_debian/hw/zybo/zybo.sdk hsi open_hw_design zybo_wrapper.hdf generate_app -hw zybo_wrapper -os standalone -proc ps7_cortex9_0 -app zynq_fsbl -sw fsbl -dir zynq_fsbl quit
  42. 42. Prepare "ps7_init_gpl.{c,h}" by using "hsi" (only once, for Zybo) n Example in PNG n If you use Zybo or other special boards unlike ZedBoard and ZC706, you must create ps7_init_gpl.* l ps7_init_gpl.* for ZedBoard and ZC706 are already included in U- boot as default n Generated "ps7_init_gpl.{c,h}" files are used later for building U-boot Shinya T-Y, NAIST 42
  43. 43. Hardware development completed n Your bitstream can be found at zynq_debian/hw/zybo/zybo.runs/impl_1/zybo_wrapper.bit n Copy the bitstream to somewhere (BOOT) Shinya T-Y, NAIST 43 mkdir ~/zybo_debian/BOOT cp ~/zybo_debian/hw/zybo/zybo.runs/impl_1/zybo_wrapper.bit ~/zybo_debian/BOOT
  44. 44. U-boot SPL and U-boot Shinya T-Y, NAIST 44
  45. 45. Download U-boot and modify it n Create a new working directory for software n Clone from GitHub n Checkout the tagged version for Vivado 2015.4 n Edit "zynq-common.h" Shinya T-Y, NAIST 45 mkdir ~/zybo_debian/sw cd ~/zybo_debian/sw git clone https://github.com/Xilinx/u-boot-xlnx.git emacs include/configs/zynq-common.h cd u-boot-xlnx git checkout xilinx-v2015.4
  46. 46. Edit "CONFIG_EXTRA_ENV_SETTINGS" and "CONFIG_BOOTCOMMAND" n CONFIG_EXTRA_ENV_SETTINGS n CONFIG_BOOTCOMMAND Shinya T-Y, NAIST 46 /* Default environment */ #define CONFIG_EXTRA_ENV_SETTINGS ¥ "fpgaload=load mmc 0 0x1000000 zynq.bit¥0 " ¥ "fpgaboot=fpga loadb 0 0x1000000 $filesize¥0 " ¥ "bootimage=uImage¥0" ¥ "fdtaddr=0x00000100¥0" ¥ "fdtimage=devicetree.dtb¥0" ¥ "loadaddr=0x8000¥0" ¥ "mmcloadcmd=fatload¥0" ¥ "mmcloadpart=1¥0" ¥ "mmcroot=/dev/mmcblk0p2¥0" ¥ "mmcload=mmc rescan; fatload mmc 0:1 ${loadaddr} ${bootimage}; fatload mmc 0:1 ${fdtaddr} ${fdtimage}¥0" ¥ "mmcboot=setenv bootargs console=ttyPS0,115200 root=${mmcroot} rw rootwait uio_pdrv_genirq.of_id=dmem-uio; bootm ${loadaddr} - ${fdtaddr}¥0" ¥ DFU_ALT_INFO /* default boot is according to the bootmode switch settings */ #define CONFIG_BOOTCOMMAND "run fpgaload; run fpgaboot; run mmcload; run mmcboot"
  47. 47. Edit "CONFIG_EXTRA_ENV_SETTINGS" and "CONFIG_BOOTCOMMAND" n Example in PNG (Check carefully!) Shinya T-Y, NAIST 47
  48. 48. Build U-boot n Setup PATH l If you use bash (default) or zsh l If you use tcsh n Setup some parameters l If you use bash or zsh l If you use tcsh Shinya T-Y, NAIST 48 source /opt/Xilinx/Vivado/2015.4/settings64.sh source /opt/Xilinx/Vivado/2015.4/settings64.csh export CROSS_COMPILE=arm-xilinx-linux-gnueabi- export ARCH=arm setenv CROSS_COMPILE arm-xilinx-linux-gnueabi- setenv ARCH arm
  49. 49. Build U-boot n If you use Zybo (or an other board that its fsbl software source code is NOT included in "u-boot-xlnx/board/zynq/"), copy "ps7_init_gpl.{c,h}" from SDK directory to "u-boot- xlnx/board/xilinx/zynq/custom_hw_platform" l Files for ZedBoard and ZC706 are included as default You can find these files, such like "u-boot-xlnx/board/xilinx/zynq/zed_hw_platform" n At "u-boot-xlnx" Shinya T-Y, NAIST 49 cp ~/zybo_debian/hw/zybo/zybo.sdk/ps7_init_gpl.* ¥ board/xilinx/zynq/custom_hw_platform
  50. 50. Build U-boot n At u-boot-xlnx l If you youse other boards, such as ZedBoard, please find its corresponding config command at u-boo-xlnx/configs, such as "configs/zynq_zed_defconfig" n Then, make Shinya T-Y, NAIST 50 make zynq_zybo_defconfig make
  51. 51. Build U-boot n Example in PNG n "u-boot.img" and "boot.bin" have been generated at u-boot-xlnx Shinya T-Y, NAIST 51
  52. 52. U-boot has been successfully generated n Copy two files into somewhere n Boot order is (1) U-boot SPL -> (2) U-boot -> (3) Linux Kernel n Even if you want to change the hardware design, no build of U-boot is required anymore Shinya T-Y, NAIST 52 cp u-boot.img ~/zybo_debian/BOOT/ cp boot.bin ~/zybo_debian/BOOT/
  53. 53. Linux kernel Shinya T-Y, NAIST 53
  54. 54. Download Linux kernel n Move to the software directory n Clone from GitHub n Checkout the tagged version for Vivado 2015.4 Shinya T-Y, NAIST 54 cd ~/zybo_debian/sw git clone https://github.com/Xilinx/linux-xlnx.git cd linux-xlnx git checkout xilinx-v2015.4.01
  55. 55. Edit device tree file n Edit "zynz-zybo.dts" l if you use other device, please find the corresponding device tree file in "linux-xlnx/arch/arm/boot/dts/" n Edit it to add UIO (user-space I/O) interfaces Shinya T-Y, NAIST 55 emacs arch/arm/boot/dts/zynq-zybo.dts axis0 { compatible = "dmem-uio"; reg = < 0x43c00000 0x010000 >; // (address, size) }; axis1 { compatible = "dmem-uio"; reg = < 0x43c10000 0x010000 >; // (address, size) }; axis2 { compatible = "dmem-uio"; reg = < 0x43c20000 0x010000 >; // (address, size) }; axis3 { compatible = "dmem-uio"; reg = < 0x43c30000 0x010000 >; // (address, size) }; axis4 { compatible = "dmem-uio"; reg = < 0x43c40000 0x010000 >; // (address, size) }; axis5 { compatible = "dmem-uio"; reg = < 0x43c50000 0x010000 >; // (address, size) }; axis6 { compatible = "dmem-uio"; reg = < 0x43c60000 0x010000 >; // (address, size) }; axis7 { compatible = "dmem-uio"; reg = < 0x43c70000 0x010000 >; // (address, size) }; Insert these lines
  56. 56. Configure the kernel options n At linux-xlnx, load the default options n Configure the kernel options by menuconfig Shinya T-Y, NAIST 56 make xilinx_zynq_defconfig make menuconfig
  57. 57. Device Drivers-> Shinya T-Y, NAIST 57
  58. 58. Device Drivers->Userspace I/O drivers Shinya T-Y, NAIST 58
  59. 59. Enable UIO Shinya T-Y, NAIST 59
  60. 60. Device Drivers->Generic Driver Options Shinya T-Y, NAIST 60
  61. 61. Edit Size in Mega Bytes of CMA Shinya T-Y, NAIST 61 Set 256
  62. 62. (Option) File systems->Network File Systems Shinya T-Y, NAIST 62
  63. 63. Check "linux-xlnx/.config" n At linux-xlnx n Especially, check the size of CMA Shinya T-Y, NAIST 63 less .config
  64. 64. Build Linux kernel and device tree n Setup PATH l If you use bash (default) or zsh l If you use tcsh n Build the kernel image and device tree Shinya T-Y, NAIST 64 export PATH=~/zybo_debian/sw/u-boot-xlnx/tools:$PATH make uImage LOADADDR=0x00008000 setenv PATH ~/zybo_debian/sw/u-boot-xlnx/tools:$PATH
  65. 65. Build Linux kernel and device tree n Example in PNG Shinya T-Y, NAIST 65
  66. 66. Linux kernel and device tree have been successfully generated n Copy uImage and zynq-zybo.dtb to somewhere n Even if you want to change the hardware design, no build of Linux kernel is required anymore l Device tree should be modified, if you change different address mapping Shinya T-Y, NAIST 66 cp arch/arm/boot/uImage ~/zybo_debian/BOOT cp arch/arm/boot/dts/zynq-zybo.dtb ~/zybo_debian/BOOT
  67. 67. Debian root file sytem Shinya T-Y, NAIST 67
  68. 68. Setup environment n Setup parameters (on bash) n Build the root file system in $targetdir (= rootfs) Shinya T-Y, NAIST 68 cd ~/zybo_debian sudo apt-get install qemu-user-static debootstrap binfmt-support export targetdir=rootfs export distro=jessie mkdir $targetdir sudo debootstrap --arch=armhf --foreign $distro $targetdir sudo cp /usr/bin/qemu-arm-static $targetdir/usr/bin sudo cp /etc/resolv.conf $targetdir/etc sudo chroot $targetdir
  69. 69. Build rootfs with QEMU n Setup APT Shinya T-Y, NAIST 69 distro=jessie export LANG=C /debootstrap/debootstrap --second-stage cat <<EOT > /etc/apt/sources.list deb http://ftp.jp.debian.org/debian $distro main contrib non-free deb-src http://ftp.jp.debian.org/debian $distro main contrib non-free deb http://ftp.debian.org/debian $distro-updates main contrib non-free deb-src http://ftp.debian.org/debian $distro-updates main contrib non-free deb http://security.debian.org/debian-security $distro/updates main contrib non-free deb-src http://security.debian.org/debian-security $distro/updates main contrib non-free EOT cat << EOT > /etc/apt/apt.conf.d/71-no-recommends APT::Install-Recommends "0"; APT::Install-Suggests "0"; EOT
  70. 70. Build rootfs with QEMU n Install applications and setup root password n IP address Shinya T-Y, NAIST 70 apt-get update apt-get install locales dialog dpkg-reconfigure locales apt-get install openssh-server ntpdate resolvconf sudo less hwinfo ntp tcsh zsh passwd echo <<EOT >> /etc/network/interfaces auto eth0 iface eth0 inet static hwaddress ether 00:0a:35:00:02:00 address 192.168.0.100 netmask 255.255.255.0 gateway 192.168.0.1 dns-nameservers 192.168.0.1 EOT
  71. 71. Build rootfs with QEMU n resolve.conf n sshd_config l “PasswordAuthentication yes” Shinya T-Y, NAIST 71 echo <<EOT >> /etc/resolv.conf nameserver 192.168.0.1 EOT vi /etc/ssh/sshd_config
  72. 72. Build rootfs with QEMU n Add a new admin user l Enter, enter, … n Edit sudo user l Edit like below Shinya T-Y, NAIST 72 adduser username editor=vi visudo # User privilege specification root ALL=(ALL:ALL) ALL username ALL=(ALL:ALL) ALL
  73. 73. Build rootfs with QEMU n ntp.conf n Insert a new server (in my case "ntp.nict.jp") Shinya T-Y, NAIST 73 vi /etc/ntp.conf #server 0.debian.pool.ntp.org iburst #server 1.debian.pool.ntp.org iburst #server 2.debian.pool.ntp.org iburst #server 3.debian.pool.ntp.org iburst server ntp.nict.jp
  74. 74. Build rootfs with QEMU n rc.local n Insert 3 lines for NTP setup Shinya T-Y, NAIST 74 vi /etc/rc.local service ntp stop ntpdate ntp.nict.jp service ntp start exit 0
  75. 75. Build rootfs with QEMU n fstab n Insert 1 line (to mount 1st partition of SD card) n Create a new directory for 1st partition of SD card Shinya T-Y, NAIST 75 vi /etc/fstab /dev/mmcblk0p1 /sdcard auto defaults 0 0 mkdir sdcard
  76. 76. Build rootfs with QEMU n Permission rule of /dev/uio (Userspace I/O) n Permission rule of /dev/xdevconfig (Configuration port) Shinya T-Y, NAIST 76 echo KERNEL=="uio*", MODE="0666",OWNER="root",GROUP="root" >> /etc/udev/rules.d/50-uio.rules echo KERNEL=="xdevcfg", MODE="0666",OWNER="root",GROUP="root" >> /etc/udev/rules.d/50-xdevcfg.rules
  77. 77. Build rootfs with QEMU n Hostname, etc. n Install applications (if you need) n Finish Shinya T-Y, NAIST 77 echo debian-zynq > /etc/hostname echo T0:2345:respawn:/sbin/getty -L ttyS0 115200 vt1000 >> /etc/inittab echo 127.0.0.1 debian-zynq >> /etc/hosts apt-get install build-essential apt-get install screen bash-completion time apt-get install python python-pip python3 python3-pip apt-get install nis nfs-common exit sudo rm -f $targetdir/usr/bin/qemu-arm-static
  78. 78. Setup SD card Shinya T-Y, NAIST 78
  79. 79. Format SD card n Prepare SD card (> 8GB) n Install and launch gparted n Setup 2 partitions l BOOT (64MB, FAT32, with "bootable" flag) ü 4MB empty space ahead l rootfs (rest all, ext4) Shinya T-Y, NAIST 79 sudo apt-get install gparted -y sudo gparted & empty (4MB) BOOT (64MB, FAT32, bootable) rootfs (rest, ext4)
  80. 80. Copy the created files into the SD card n Mount the formatted SD card l /media/yourname/BOOT and /media/yourname/rootfs n Copy bitstream, U-boot, Linux kernel, and device tree n Copy rootfs n Unmount BOOT and rootfs Shinya T-Y, NAIST 80 cp ~/zybo_debian/BOOT/boot.bin /media/yourname/BOOT/ cp ~/zybo_debian/BOOT/u-boot.img /media/yourname/BOOT/ cp ~/zybo_debian/BOOT/zybo_wrapper.bit /media/yourname/BOOT/zynq.bit cp ~/zybo_debian/BOOT/uImage /media/yourname/BOOT/ cp ~/zybo_debian/BOOT/zynq-zybo.dtb /media/yourname/BOOT/devicetree.dtb sudo cp -a ~/zybo_debian/rootfs/* /media/yourname/rootfs/
  81. 81. Boot from SD card Shinya T-Y, NAIST 81
  82. 82. Jumper pin (Zybo): Set SD boot Shinya T-Y, NAIST 82
  83. 83. Jumper pin (ZedBoard) Shinya T-Y, NAIST 83
  84. 84. Boot system from SD card n Connect Zybo to network l Or connect UART port to the host PC n Insert SD card and power-on n Login via SSH (type password) n Or login via UART: type username and password Shinya T-Y, NAIST 84 ssh username192.168.0.100
  85. 85. Time zone and locale n Change the time zone l In my case, Asia -> Tokyo n Change the locale l Select "en_US.UTF-8", "ja_JP.UTF-8", and "ja_JP.EUC-JP" l Then select "en_US.UTF-8" as default n Reboot Shinya T-Y, NAIST 85 (on zynq) sudo dpkg-reconfigure tzdata (on zynq) sudo dpkg-reconfigure locales (on zynq) sudo reboot
  86. 86. CMA (Continuous memory allocator) driver Shinya T-Y, NAIST 86
  87. 87. Copy linux-xlnx into the SD card n Mount the formatted SD card l /media/yourname/BOOT and /media/yourname/rootfs n Copy linux-xlnx into rootfs n Create symbolic link to "linux" n Download "udmabuf" from GitHub n Remove SD card and boot again from SD card Shinya T-Y, NAIST 87 sudo cp -a ~/zybo_debian/sw/linux-xlnx /media/yourname/rootfs/usr/src/linux sudo ln -s /media/yourname/rootfs/usr/src/linux /media/yourname/rootfs/usr/src/kernel git clone https://github.com/shtaxxx/udmabuf.git sudo mkdir /media/yourname/rootfs/drivers sudo cp -a udmabuf /media/yourname/rootfs/drivers/
  88. 88. Build CMA driver n Login n Compile kernel modules n Compile CMA driver Shinya T-Y, NAIST 88 (on zynq) cd /usr/src/kernel (on zynq) sudo make modules_prepare (on zynq) cd /drivers/udmabuf (on zynq) sudo make (on zynq) sudo cp udmabuf.ko /drivers/ (on zynq) sudo cp settings/setup_udmabuf.sh /drivers/
  89. 89. Modify /etc/rc.local for CMA driver n Edit /etc/rc.local n Insert 1 line before "exit 0" n Reboot Shinya T-Y, NAIST 89 sh /drivers/setup_udmabuf.sh exit 0 (on zynq) sudo vi /etc/rc.local (on zynq) sudo reboot
  90. 90. Run test applications Shinya T-Y, NAIST 90
  91. 91. Download applications and library n Download "zynq-linux" from GitHub n Copy zynq-linux to Zynq system l Type password n Login on Zynq and go to zynq-linux/sample Shinya T-Y, NAIST 91 (on zynq) cd zynq-linux/sample git clone https://github.com/PyHDI/zynq-linux.git scp -r zynq-linux username@192.168.0.100
  92. 92. Run GPIO test n Compile "axis_test.c" and run it l LED pattern is changed l The value of switches is read Shinya T-Y, NAIST 92 (on zynq) gcc -O2 -I ../lib/ -o axis.out axis_test.c (on zynq) ./axis.out 15 write: 15 read: 1
  93. 93. Run CMA test n Compile "cma_test.c" and run it n RUN MODE 0: No CMA n RUN MODE 1-3: CMA l 1: Cache Enabled l 2: Cache Disabled l 3: Cache Disabled, Write-merged Shinya T-Y, NAIST 93 (on zynq) gcc -O2 -I ../lib/ -o cma.out cma_test.c (on zynq) ./cma.out 10000000 0 (on zynq) ./cma.out 10000000 1 (on zynq) ./cma.out 10000000 2 (on zynq) ./cma.out 10000000 3
  94. 94. How to replace the bitstream Shinya T-Y, NAIST 94
  95. 95. Method1: Replace zynq.bit in /sdcard/ n The bitstream on SD card can be replaced on host PC n Since 1st partition of SD card is mounted on /sdcard/, the bistream can be replaced directly by Zynq software n No modifications of U-boot and Linux kernel are required n If you don't chage the address mapping for GPIO, no modification of device tree is required Shinya T-Y, NAIST 95 (on zynq) sudo cp new_zynq.bit /sdcard/zynq.bit (on zynq) sudo reboot
  96. 96. Method2: Reconfigure via /dev/xdevcfg n Logic part (PL) can be dynamically changed from SW n If you change the CPU settings, such as frequency, port configuration, etc., this flow is not perfect. Replace "zynq.bit" on SD card and reboot, instead of this flow Shinya T-Y, NAIST 96 (on zynq) cat new_zynq.bit > /dev/xdevcfg
  97. 97. Reference Shinya T-Y, NAIST 97
  98. 98. Reference n Yet Another Guide to Running Linaro Ubuntu Linux Desktop on Xilinx Zynq on the ZedBoard l https://fpgacpu.wordpress.com/2013/05/24/yet-another-guide-to- running-linaro-ubuntu-desktop-on-xilinx-zynq-on-the-zedboard/ n Building a pure Debian armhf rootfs l https://blog.night-shade.org.uk/2013/12/building-a-pure-debian- armhf-rootfs/ n FPGA Magazine (No.12, March 2016) l http://www.kumikomi.net/fpga/contents/0012.php Shinya T-Y, NAIST 98

×