1SUMMARY = "Universal Boot Loader for embedded devices" 2PROVIDES = "virtual/bootloader" 3 4B = "${WORKDIR}/build" 5 6PACKAGE_ARCH = "${MACHINE_ARCH}" 7 8DEPENDS += "kern-tools-native" 9 10inherit uboot-config uboot-extlinux-config uboot-sign deploy cml1 python3native 11 12DEPENDS += "swig-native" 13 14EXTRA_OEMAKE = 'CROSS_COMPILE=${TARGET_PREFIX} CC="${TARGET_PREFIX}gcc ${TOOLCHAIN_OPTIONS}" V=1' 15EXTRA_OEMAKE += 'HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}"' 16EXTRA_OEMAKE += 'STAGING_INCDIR=${STAGING_INCDIR_NATIVE} STAGING_LIBDIR=${STAGING_LIBDIR_NATIVE}' 17 18PACKAGECONFIG ??= "openssl" 19# u-boot will compile its own tools during the build, with specific 20# configurations (aka when CONFIG_FIT_SIGNATURE is enabled) openssl is needed as 21# a host build dependency. 22PACKAGECONFIG[openssl] = ",,openssl-native" 23 24# Allow setting an additional version string that will be picked up by the 25# u-boot build system and appended to the u-boot version. If the .scmversion 26# file already exists it will not be overwritten. 27UBOOT_LOCALVERSION ?= "" 28 29# Some versions of u-boot use .bin and others use .img. By default use .bin 30# but enable individual recipes to change this value. 31UBOOT_SUFFIX ??= "bin" 32UBOOT_IMAGE ?= "u-boot-${MACHINE}-${PV}-${PR}.${UBOOT_SUFFIX}" 33UBOOT_SYMLINK ?= "u-boot-${MACHINE}.${UBOOT_SUFFIX}" 34UBOOT_MAKE_TARGET ?= "all" 35 36# Output the ELF generated. Some platforms can use the ELF file and directly 37# load it (JTAG booting, QEMU) additionally the ELF can be used for debugging 38# purposes. 39UBOOT_ELF ?= "" 40UBOOT_ELF_SUFFIX ?= "elf" 41UBOOT_ELF_IMAGE ?= "u-boot-${MACHINE}-${PV}-${PR}.${UBOOT_ELF_SUFFIX}" 42UBOOT_ELF_BINARY ?= "u-boot.${UBOOT_ELF_SUFFIX}" 43UBOOT_ELF_SYMLINK ?= "u-boot-${MACHINE}.${UBOOT_ELF_SUFFIX}" 44 45# Some versions of u-boot build an SPL (Second Program Loader) image that 46# should be packaged along with the u-boot binary as well as placed in the 47# deploy directory. For those versions they can set the following variables 48# to allow packaging the SPL. 49SPL_BINARY ?= "" 50SPL_BINARYNAME ?= "${@os.path.basename(d.getVar("SPL_BINARY"))}" 51SPL_IMAGE ?= "${SPL_BINARYNAME}-${MACHINE}-${PV}-${PR}" 52SPL_SYMLINK ?= "${SPL_BINARYNAME}-${MACHINE}" 53 54# Additional environment variables or a script can be installed alongside 55# u-boot to be used automatically on boot. This file, typically 'uEnv.txt' 56# or 'boot.scr', should be packaged along with u-boot as well as placed in the 57# deploy directory. Machine configurations needing one of these files should 58# include it in the SRC_URI and set the UBOOT_ENV parameter. 59UBOOT_ENV_SUFFIX ?= "txt" 60UBOOT_ENV ?= "" 61UBOOT_ENV_BINARY ?= "${UBOOT_ENV}.${UBOOT_ENV_SUFFIX}" 62UBOOT_ENV_IMAGE ?= "${UBOOT_ENV}-${MACHINE}-${PV}-${PR}.${UBOOT_ENV_SUFFIX}" 63UBOOT_ENV_SYMLINK ?= "${UBOOT_ENV}-${MACHINE}.${UBOOT_ENV_SUFFIX}" 64 65# U-Boot EXTLINUX variables. U-Boot searches for /boot/extlinux/extlinux.conf 66# to find EXTLINUX conf file. 67UBOOT_EXTLINUX_INSTALL_DIR ?= "/boot/extlinux" 68UBOOT_EXTLINUX_CONF_NAME ?= "extlinux.conf" 69UBOOT_EXTLINUX_SYMLINK ?= "${UBOOT_EXTLINUX_CONF_NAME}-${MACHINE}-${PR}" 70 71# Set Device tree from the machine config automatically 72UBOOT_MAKE_TARGET += '${@"" if d.getVar("UBOOT_DEVICETREE") is None \ 73 else " DEVICE_TREE=" + d.getVar("UBOOT_DEVICETREE")}' 74 75# returns all the elements from the src uri that are .cfg files 76def find_cfgs(d): 77 sources=src_patches(d, True) 78 sources_list=[] 79 for s in sources: 80 if s.endswith('.cfg'): 81 sources_list.append(s) 82 83 return sources_list 84 85do_configure () { 86 if [ -z "${UBOOT_CONFIG}" ]; then 87 if [ -n "${UBOOT_MACHINE}" ]; then 88 oe_runmake -C ${S} O=${B} ${UBOOT_MACHINE} 89 else 90 oe_runmake -C ${S} O=${B} oldconfig 91 fi 92 merge_config.sh -m .config ${@" ".join(find_cfgs(d))} 93 cml1_do_configure 94 fi 95} 96 97do_compile () { 98 if [ "${@bb.utils.filter('DISTRO_FEATURES', 'ld-is-gold', d)}" ]; then 99 sed -i 's/$(CROSS_COMPILE)ld$/$(CROSS_COMPILE)ld.bfd/g' ${S}/config.mk 100 fi 101 102 unset LDFLAGS 103 unset CFLAGS 104 unset CPPFLAGS 105 106 if [ ! -e ${B}/.scmversion -a ! -e ${S}/.scmversion ] 107 then 108 echo ${UBOOT_LOCALVERSION} > ${B}/.scmversion 109 echo ${UBOOT_LOCALVERSION} > ${S}/.scmversion 110 fi 111 112 if [ -n "${UBOOT_CONFIG}" ] 113 then 114 unset i j k 115 for config in ${UBOOT_MACHINE}; do 116 i=$(expr $i + 1); 117 for type in ${UBOOT_CONFIG}; do 118 j=$(expr $j + 1); 119 if [ $j -eq $i ] 120 then 121 oe_runmake -C ${S} O=${B}/${config} ${config} 122 oe_runmake -C ${S} O=${B}/${config} ${UBOOT_MAKE_TARGET} 123 for binary in ${UBOOT_BINARIES}; do 124 k=$(expr $k + 1); 125 if [ $k -eq $i ]; then 126 cp ${B}/${config}/${binary} ${B}/${config}/u-boot-${type}.${UBOOT_SUFFIX} 127 fi 128 done 129 unset k 130 fi 131 done 132 unset j 133 done 134 unset i 135 else 136 oe_runmake -C ${S} O=${B} ${UBOOT_MAKE_TARGET} 137 fi 138 139} 140 141do_install () { 142 if [ -n "${UBOOT_CONFIG}" ] 143 then 144 for config in ${UBOOT_MACHINE}; do 145 i=$(expr $i + 1); 146 for type in ${UBOOT_CONFIG}; do 147 j=$(expr $j + 1); 148 if [ $j -eq $i ] 149 then 150 install -d ${D}/boot 151 install -m 644 ${B}/${config}/u-boot-${type}.${UBOOT_SUFFIX} ${D}/boot/u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} 152 ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARY}-${type} 153 ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARY} 154 fi 155 done 156 unset j 157 done 158 unset i 159 else 160 install -d ${D}/boot 161 install -m 644 ${B}/${UBOOT_BINARY} ${D}/boot/${UBOOT_IMAGE} 162 ln -sf ${UBOOT_IMAGE} ${D}/boot/${UBOOT_BINARY} 163 fi 164 165 if [ -n "${UBOOT_ELF}" ] 166 then 167 if [ -n "${UBOOT_CONFIG}" ] 168 then 169 for config in ${UBOOT_MACHINE}; do 170 i=$(expr $i + 1); 171 for type in ${UBOOT_CONFIG}; do 172 j=$(expr $j + 1); 173 if [ $j -eq $i ] 174 then 175 install -m 644 ${B}/${config}/${UBOOT_ELF} ${D}/boot/u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} 176 ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${D}/boot/${UBOOT_BINARY}-${type} 177 ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${D}/boot/${UBOOT_BINARY} 178 fi 179 done 180 unset j 181 done 182 unset i 183 else 184 install -m 644 ${B}/${UBOOT_ELF} ${D}/boot/${UBOOT_ELF_IMAGE} 185 ln -sf ${UBOOT_ELF_IMAGE} ${D}/boot/${UBOOT_ELF_BINARY} 186 fi 187 fi 188 189 if [ -e ${WORKDIR}/fw_env.config ] ; then 190 install -d ${D}${sysconfdir} 191 install -m 644 ${WORKDIR}/fw_env.config ${D}${sysconfdir}/fw_env.config 192 fi 193 194 if [ -n "${SPL_BINARY}" ] 195 then 196 if [ -n "${UBOOT_CONFIG}" ] 197 then 198 for config in ${UBOOT_MACHINE}; do 199 i=$(expr $i + 1); 200 for type in ${UBOOT_CONFIG}; do 201 j=$(expr $j + 1); 202 if [ $j -eq $i ] 203 then 204 install -m 644 ${B}/${config}/${SPL_BINARY} ${D}/boot/${SPL_IMAGE}-${type}-${PV}-${PR} 205 ln -sf ${SPL_IMAGE}-${type}-${PV}-${PR} ${D}/boot/${SPL_BINARYNAME}-${type} 206 ln -sf ${SPL_IMAGE}-${type}-${PV}-${PR} ${D}/boot/${SPL_BINARYNAME} 207 fi 208 done 209 unset j 210 done 211 unset i 212 else 213 install -m 644 ${B}/${SPL_BINARY} ${D}/boot/${SPL_IMAGE} 214 ln -sf ${SPL_IMAGE} ${D}/boot/${SPL_BINARYNAME} 215 fi 216 fi 217 218 if [ -n "${UBOOT_ENV}" ] 219 then 220 install -m 644 ${WORKDIR}/${UBOOT_ENV_BINARY} ${D}/boot/${UBOOT_ENV_IMAGE} 221 ln -sf ${UBOOT_ENV_IMAGE} ${D}/boot/${UBOOT_ENV_BINARY} 222 fi 223 224 if [ "${UBOOT_EXTLINUX}" = "1" ] 225 then 226 install -Dm 0644 ${UBOOT_EXTLINUX_CONFIG} ${D}/${UBOOT_EXTLINUX_INSTALL_DIR}/${UBOOT_EXTLINUX_CONF_NAME} 227 fi 228 229} 230 231FILES:${PN} = "/boot ${sysconfdir} ${datadir}" 232 233do_deploy () { 234 if [ -n "${UBOOT_CONFIG}" ] 235 then 236 for config in ${UBOOT_MACHINE}; do 237 i=$(expr $i + 1); 238 for type in ${UBOOT_CONFIG}; do 239 j=$(expr $j + 1); 240 if [ $j -eq $i ] 241 then 242 install -d ${DEPLOYDIR} 243 install -m 644 ${B}/${config}/u-boot-${type}.${UBOOT_SUFFIX} ${DEPLOYDIR}/u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} 244 cd ${DEPLOYDIR} 245 ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_SYMLINK}-${type} 246 ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_SYMLINK} 247 ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_BINARY}-${type} 248 ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_BINARY} 249 fi 250 done 251 unset j 252 done 253 unset i 254 else 255 install -d ${DEPLOYDIR} 256 install -m 644 ${B}/${UBOOT_BINARY} ${DEPLOYDIR}/${UBOOT_IMAGE} 257 cd ${DEPLOYDIR} 258 rm -f ${UBOOT_BINARY} ${UBOOT_SYMLINK} 259 ln -sf ${UBOOT_IMAGE} ${UBOOT_SYMLINK} 260 ln -sf ${UBOOT_IMAGE} ${UBOOT_BINARY} 261 fi 262 263 if [ -n "${UBOOT_ELF}" ] 264 then 265 if [ -n "${UBOOT_CONFIG}" ] 266 then 267 for config in ${UBOOT_MACHINE}; do 268 i=$(expr $i + 1); 269 for type in ${UBOOT_CONFIG}; do 270 j=$(expr $j + 1); 271 if [ $j -eq $i ] 272 then 273 install -m 644 ${B}/${config}/${UBOOT_ELF} ${DEPLOYDIR}/u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} 274 ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_BINARY}-${type} 275 ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_BINARY} 276 ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_SYMLINK}-${type} 277 ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_SYMLINK} 278 fi 279 done 280 unset j 281 done 282 unset i 283 else 284 install -m 644 ${B}/${UBOOT_ELF} ${DEPLOYDIR}/${UBOOT_ELF_IMAGE} 285 ln -sf ${UBOOT_ELF_IMAGE} ${DEPLOYDIR}/${UBOOT_ELF_BINARY} 286 ln -sf ${UBOOT_ELF_IMAGE} ${DEPLOYDIR}/${UBOOT_ELF_SYMLINK} 287 fi 288 fi 289 290 291 if [ -n "${SPL_BINARY}" ] 292 then 293 if [ -n "${UBOOT_CONFIG}" ] 294 then 295 for config in ${UBOOT_MACHINE}; do 296 i=$(expr $i + 1); 297 for type in ${UBOOT_CONFIG}; do 298 j=$(expr $j + 1); 299 if [ $j -eq $i ] 300 then 301 install -m 644 ${B}/${config}/${SPL_BINARY} ${DEPLOYDIR}/${SPL_IMAGE}-${type}-${PV}-${PR} 302 rm -f ${DEPLOYDIR}/${SPL_BINARYNAME} ${DEPLOYDIR}/${SPL_SYMLINK}-${type} 303 ln -sf ${SPL_IMAGE}-${type}-${PV}-${PR} ${DEPLOYDIR}/${SPL_BINARYNAME}-${type} 304 ln -sf ${SPL_IMAGE}-${type}-${PV}-${PR} ${DEPLOYDIR}/${SPL_BINARYNAME} 305 ln -sf ${SPL_IMAGE}-${type}-${PV}-${PR} ${DEPLOYDIR}/${SPL_SYMLINK}-${type} 306 ln -sf ${SPL_IMAGE}-${type}-${PV}-${PR} ${DEPLOYDIR}/${SPL_SYMLINK} 307 fi 308 done 309 unset j 310 done 311 unset i 312 else 313 install -m 644 ${B}/${SPL_BINARY} ${DEPLOYDIR}/${SPL_IMAGE} 314 rm -f ${DEPLOYDIR}/${SPL_BINARYNAME} ${DEPLOYDIR}/${SPL_SYMLINK} 315 ln -sf ${SPL_IMAGE} ${DEPLOYDIR}/${SPL_BINARYNAME} 316 ln -sf ${SPL_IMAGE} ${DEPLOYDIR}/${SPL_SYMLINK} 317 fi 318 fi 319 320 321 if [ -n "${UBOOT_ENV}" ] 322 then 323 install -m 644 ${WORKDIR}/${UBOOT_ENV_BINARY} ${DEPLOYDIR}/${UBOOT_ENV_IMAGE} 324 rm -f ${DEPLOYDIR}/${UBOOT_ENV_BINARY} ${DEPLOYDIR}/${UBOOT_ENV_SYMLINK} 325 ln -sf ${UBOOT_ENV_IMAGE} ${DEPLOYDIR}/${UBOOT_ENV_BINARY} 326 ln -sf ${UBOOT_ENV_IMAGE} ${DEPLOYDIR}/${UBOOT_ENV_SYMLINK} 327 fi 328 329 if [ "${UBOOT_EXTLINUX}" = "1" ] 330 then 331 install -m 644 ${UBOOT_EXTLINUX_CONFIG} ${DEPLOYDIR}/${UBOOT_EXTLINUX_SYMLINK} 332 ln -sf ${UBOOT_EXTLINUX_SYMLINK} ${DEPLOYDIR}/${UBOOT_EXTLINUX_CONF_NAME}-${MACHINE} 333 ln -sf ${UBOOT_EXTLINUX_SYMLINK} ${DEPLOYDIR}/${UBOOT_EXTLINUX_CONF_NAME} 334 fi 335} 336 337addtask deploy before do_build after do_compile 338