genode/tool/run/image/uboot

70 lines
1.8 KiB
Plaintext
Raw Normal View History

2015-01-08 21:08:48 +00:00
##
# Build U-boot bootloader specific uImage
#
# \param --image-uboot-no-gzip do not gzip the uImage
#
##
# Check if the uImage should be gzipped
#
proc image_uboot_use_no_gzip { } { return [get_cmd_switch --image-uboot-no-gzip] }
##
# 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"
}
}
2015-01-08 21:08:48 +00:00
##
# Build U-boot bootloader specific uImage
#
# \param elf_img ELF binary to build uImage from
#
proc run_image {elf_img} {
2015-01-08 21:08:48 +00:00
# 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 "[run_dir]/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
2015-01-08 21:08:48 +00:00
set bin_ext .gz
set compress_type gzip
}
set arch "arm"
if {[have_spec arm_64]} { set arch "arm64" }
2015-01-08 21:08:48 +00:00
# create uImage
set uboot_img [run_dir]/uImage
exec mkimage -A $arch -O linux -T kernel -C $compress_type -a $load_addr \
2015-01-08 21:08:48 +00:00
-e $entrypoint -d $bin_img$bin_ext $uboot_img
exec rm -rf $bin_img$bin_ext
}