User Tools

Site Tools


hw:zynq:linux:petalinux:boot_kernel

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
hw:zynq:linux:petalinux:boot_kernel [2019/03/20 11:32]
jakub.moron created
hw:zynq:linux:petalinux:boot_kernel [2021/04/21 14:57] (current)
jakub.moron
Line 1: Line 1:
-====== Boot and Kernel configure & build with PetaLinux without BSP (board support package) ​ ======+====== Boot and Kernel configure & build with PetaLinux ​2018.3 ​without BSP (board support package) ​ ======
  
-  - Create Vivado design and export the hardware with bitstream.\\ ​Default bitstream location is: <​code>​ +  - Create Vivado design and export the hardware with bitstream.\\ Default hdf (hardware description file) location is: <​code>​
-<​project_directory>/<​project_name>​.runs/​impl_1/​ +
-</​code> ​Default hdf (hardware description file) location is: <​code>​+
 <​project_directory>/<​project_name>​.sdk/​ <​project_directory>/<​project_name>​.sdk/​
 +</​code>​ In case you need it (but usually you shouldn'​t),​ default bitstream location is: <​code>​
 +<​project_directory>/<​project_name>​.runs/​impl_1/​
 </​code>​ </​code>​
-  - Setup PetaLinux enviroment (see [[hw:​zynq:​linux:​petalinux:​start|Install PetaLinux]])+  - Setup PetaLinux enviroment (see [[hw:​zynq:​linux:​petalinux:​start|Install PetaLinux]])\\ \\
   - Create PetaLinux project: <​code>​   - Create PetaLinux project: <​code>​
 petalinux-create --type project --template zynq --name <​boot_project_name>​ petalinux-create --type project --template zynq --name <​boot_project_name>​
 cd <​boot_project_name>​ cd <​boot_project_name>​
 +</​code>​ For UltraScale+:​ <​code>​
 +petalinux-create -t project --template zynqMP --name <​boot_project_name>​
 +</​code>​
 +  - Get hardware description from Vivado project: <​code>​
 +petalinux-config --get-hw-description <​path_to_vivado_project_directory>/<​project_name>​.sdk/​
 +</​code>​
 +  - Set booting from SD card by navigating through settings tree and choosing the proper options: <​code>​
 +Subsystem AUTO Hardware Settings -> Advanced bootable images storage Settings -> boot image settings ​ : set ‘image storage media’ option to ‘primary sd’
 +                                                                              -> kernel image settings: set ‘image storage media’ option to ‘primary sd’
 +                                                                              -> dtb image settings ​  : set ‘image storage media’ option to ‘primary sd’
 +Image Packaging Configurations:​ set ‘Root filesystem type’ option to ‘SD card’
 +                              : uncheck 'Copy final images to tfpboot'​
 +</​code>​ Select ''​Exit''​ to write the configuration.\\ \\ In case you want to reconfigure boot settings, run: <​code>​
 +petalinux-config
 +</​code>​
 +  - Check whether all required drivers/​modules are enabled in kernel config: <​code>​
 +petalinux-config -c kernel
 +</​code>​ Hint: you can use vim-like search ''/<​search_string>''​ to list all enabled drivers/​modules.\\ **Remember to __Save__ changes before exit -- it seems that there is no autosave!** \\
 +  - In order to use the generic UIO driver ''​uio_pdrv_genirq''​ enable kernel modules in kernel config: <​code>​
 +petalinux-config -c kernel
 +</​code>​ by navigating through settings tree and enabling modules (there should be '<​M>',​ not '<​*>'​):​ <​code>​
 +Device Drivers -> <*> Userspace I/O drivers -> <M> Userspace I/O platform driver with generic IRQ handling
 +                                               <​M>​ Userspace platform driver with generic irq and dynamic memory
 +</​code>​
 +  - In order to use the generic UIO driver modify the device tree to assign the compatibility with this driver to your hardware: <​code>​
 +vim ./​project-spec/​meta-user/​recipes-bsp/​device-tree/​files/​system-user.dtsi
 +</​code>​ and add the entry at the end of this file: <​code>​
 +&​axi_gpio_0 {
 + compatible = "​generic-uio";​
 +};
 +</​code>​ for every hardware module you have.\\ Please notice that ''​axi_gpio_0''​ __is only an example__ of module name!
 +  - Fix the u-boot bug -- a typo in default boot command.\\ The proper boot configure entry: <​code>​
 +default_bootcmd=run uenvboot; run cp_kernel2ram && bootm ${netstart}
 +</​code>​ is created by PetaLinux as <​code>​
 +default_bootcmd=run uenvboot; run cp_kernel2ram && run cp_dtb2ram && booti ${netstart} - ${dtbnetstart}
 +</​code>​ with the typo in ''​booti''​ instead of ''​bootm''​ command.\\ \\ To fix this bug, edit the ''​platform-top.h''​ file (it would not be overwrite if you reconfigure the boot or kernel): <​code>​
 +vim ./​project-spec/​meta-user/​recipes-bsp/​u-boot/​files/​platform-top.h
 +</​code>​ and add the following entry at the end: <​code>​
 +/* Due to a bug where having u-boot load dtb from SD card causes the boot
 + * command to default to using booti instead of bootm on Zynq, the defult build
 + * fails to boot. This boot command override is a temporary workaround.
 +*/
 +#ifdef CONFIG_BOOTCOMMAND
 +#undef CONFIG_BOOTCOMMAND
 +#define CONFIG_BOOTCOMMAND "​run uenvboot; run cp_kernel2ram && run cp_dtb2ram && bootm ${netstart} - ${dtbnetstart}"​
 +#endif
 +</​code>​
 +  - Build the boot and kernel: <​code>​
 +petalinux-build
 +</​code>​
 +  - Determinate the bit file name in PetaLinux project (it is copied automatically from Vivado design by ''​--get-hw-description''​):​ <​code>​
 +ls ./​images/​linux/​*.bit
 </​code>​ </​code>​
 +  - Create ''​BOOT.BIN''​ image: <​code>​
 +petalinux-package --boot --format BIN --fsbl ./​images/​linux/​zynq_fsbl.elf --fpga ./​images/​linux/<​bit_filename>​.bit --u-boot
 +</​code> ​
/services/www/http/wiki/data/attic/hw/zynq/linux/petalinux/boot_kernel.1553077948.txt.gz · Last modified: 2019/03/20 11:32 by jakub.moron