This shows you the differences between two versions of the page.
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> |