## # Build U-boot bootloader specific uImage/image.itb # # \param --image-uboot-no-gzip do not gzip the uImage # \param --image-uboot-fit build image.itb FIT image # ## # Check if the uImage should be gzipped # proc image_uboot_use_no_gzip { } { return [get_cmd_switch --image-uboot-no-gzip] } proc image_uboot_use_fit { } { return [get_cmd_switch --image-uboot-fit] } ## # Make gzip compression more aggressive # # Using this option reduces the image size by circa 10%. But it comes at the # cost of significantly slowing down the gzip step for large images (e.g., 6 # seconds instead of 2 seconds for a image of 13 MiB). The option is suitable # when building a release. But for quick build-test cycles, it is best keep # it disabled. # proc image_uboot_gzip_opt { } { if {[get_cmd_switch --image-uboot-gzip-best]} { return "--best" } else { return "--fast" } } ## # Build U-boot bootloader specific uImage # proc run_image { } { set elf_img [file join [run_dir] boot image.elf] # parse ELF entrypoint and load address set entrypoint [exec [cross_dev_prefix]readelf -h $elf_img | \ grep "Entry point address: " | \ sed -e "s/.*Entry point address: *//"] set load_addr [exec [cross_dev_prefix]readelf -l $elf_img | \ grep -m 1 "LOAD"] set load_addr [lindex [regexp -inline -all -- {\S+} $load_addr] 3] set bin_img [file join [run_dir] boot image.bin] exec [cross_dev_prefix]objcopy -O binary $elf_img $bin_img set use_gzip [expr ![image_uboot_use_no_gzip]] set compress_type none set bin_ext "" # compress ELF if $use_gzip { exec gzip [image_uboot_gzip_opt] --force $bin_img set bin_ext .gz set compress_type gzip } set arch "arm" if {[have_spec arm_64]} { set arch "arm64" } if {[image_uboot_use_fit]} { # create image.itb set uboot_img [file join [run_dir] boot image.itb] exec mkimage -f auto -A $arch -O linux -T kernel -C $compress_type -a $load_addr \ -e $entrypoint -d $bin_img$bin_ext $uboot_img } else { # create uImage set uboot_img [file join [run_dir] boot uImage] exec mkimage -A $arch -O linux -T kernel -C $compress_type -a $load_addr \ -e $entrypoint -d $bin_img$bin_ext $uboot_img } exec rm -rf $bin_img$bin_ext $elf_img }