1SUMMARY = "Universal Boot Loader for embedded devices" 2PROVIDES = "virtual/bootloader" 3 4PACKAGE_ARCH = "${MACHINE_ARCH}" 5 6DEPENDS += "${@bb.utils.contains('UBOOT_ENV_SUFFIX', 'scr', 'u-boot-mkimage-native', '', d)}" 7 8inherit uboot-config uboot-extlinux-config uboot-sign deploy python3native kernel-arch 9 10DEPENDS += "swig-native" 11 12EXTRA_OEMAKE = 'CROSS_COMPILE=${TARGET_PREFIX} CC="${TARGET_PREFIX}gcc ${TOOLCHAIN_OPTIONS} ${DEBUG_PREFIX_MAP}" V=1' 13EXTRA_OEMAKE += 'HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}"' 14EXTRA_OEMAKE += 'STAGING_INCDIR=${STAGING_INCDIR_NATIVE} STAGING_LIBDIR=${STAGING_LIBDIR_NATIVE}' 15 16PACKAGECONFIG ??= "openssl" 17# u-boot will compile its own tools during the build, with specific 18# configurations (aka when CONFIG_FIT_SIGNATURE is enabled) openssl is needed as 19# a host build dependency. 20PACKAGECONFIG[openssl] = ",,openssl-native" 21 22# Allow setting an additional version string that will be picked up by the 23# u-boot build system and appended to the u-boot version. If the .scmversion 24# file already exists it will not be overwritten. 25UBOOT_LOCALVERSION ?= "" 26 27require u-boot-configure.inc 28 29do_savedefconfig() { 30 bbplain "Saving defconfig to:\n${B}/defconfig" 31 oe_runmake -C ${B} savedefconfig 32} 33do_savedefconfig[nostamp] = "1" 34addtask savedefconfig after do_configure 35UBOOT_ARCH_DIR = "${@'arm' if d.getVar('UBOOT_ARCH').startswith('arm') else d.getVar('UBOOT_ARCH')}" 36do_compile () { 37 if [ "${@bb.utils.filter('DISTRO_FEATURES', 'ld-is-gold', d)}" ]; then 38 sed -i 's/$(CROSS_COMPILE)ld$/$(CROSS_COMPILE)ld.bfd/g' ${S}/config.mk 39 fi 40 41 unset LDFLAGS 42 unset CFLAGS 43 unset CPPFLAGS 44 45 if [ ! -e ${B}/.scmversion -a ! -e ${S}/.scmversion ] 46 then 47 echo ${UBOOT_LOCALVERSION} > ${B}/.scmversion 48 echo ${UBOOT_LOCALVERSION} > ${S}/.scmversion 49 fi 50 51 if [ -n "${UBOOT_CONFIG}" -o -n "${UBOOT_DELTA_CONFIG}" ] 52 then 53 unset i j k 54 for config in ${UBOOT_MACHINE}; do 55 i=$(expr $i + 1); 56 for type in ${UBOOT_CONFIG}; do 57 j=$(expr $j + 1); 58 if [ $j -eq $i ] 59 then 60 oe_runmake -C ${S} O=${B}/${config} ${UBOOT_MAKE_TARGET} 61 for binary in ${UBOOT_BINARIES}; do 62 k=$(expr $k + 1); 63 if [ $k -eq $i ]; then 64 cp ${B}/${config}/${binary} ${B}/${config}/${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX} 65 fi 66 done 67 68 # Generate the uboot-initial-env 69 if [ -n "${UBOOT_INITIAL_ENV}" ]; then 70 oe_runmake -C ${S} O=${B}/${config} u-boot-initial-env 71 cp ${B}/${config}/u-boot-initial-env ${B}/${config}/u-boot-initial-env-${type} 72 fi 73 74 unset k 75 fi 76 done 77 unset j 78 done 79 unset i 80 else 81 oe_runmake -C ${S} O=${B} ${UBOOT_MAKE_TARGET} 82 83 # Generate the uboot-initial-env 84 if [ -n "${UBOOT_INITIAL_ENV}" ]; then 85 oe_runmake -C ${S} O=${B} u-boot-initial-env 86 fi 87 fi 88 89 if [ -n "${UBOOT_ENV}" ] && [ "${UBOOT_ENV_SUFFIX}" = "scr" ] 90 then 91 ${UBOOT_MKIMAGE} -C none -A ${UBOOT_ARCH} -T script -d ${WORKDIR}/${UBOOT_ENV_SRC} ${WORKDIR}/${UBOOT_ENV_BINARY} 92 fi 93} 94 95do_install () { 96 if [ -n "${UBOOT_CONFIG}" ] 97 then 98 for config in ${UBOOT_MACHINE}; do 99 i=$(expr $i + 1); 100 for type in ${UBOOT_CONFIG}; do 101 j=$(expr $j + 1); 102 if [ $j -eq $i ] 103 then 104 install -D -m 644 ${B}/${config}/${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} 105 ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARY}-${type} 106 ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARY} 107 108 # Install the uboot-initial-env 109 if [ -n "${UBOOT_INITIAL_ENV}" ]; then 110 install -D -m 644 ${B}/${config}/u-boot-initial-env-${type} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} 111 ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${MACHINE}-${type} 112 ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${type} 113 ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV} 114 fi 115 fi 116 done 117 unset j 118 done 119 unset i 120 else 121 install -D -m 644 ${B}/${UBOOT_BINARY} ${D}/boot/${UBOOT_IMAGE} 122 ln -sf ${UBOOT_IMAGE} ${D}/boot/${UBOOT_BINARY} 123 124 # Install the uboot-initial-env 125 if [ -n "${UBOOT_INITIAL_ENV}" ]; then 126 install -D -m 644 ${B}/u-boot-initial-env ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} 127 ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${MACHINE} 128 ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV} 129 fi 130 fi 131 132 if [ -n "${UBOOT_ELF}" ] 133 then 134 if [ -n "${UBOOT_CONFIG}" ] 135 then 136 for config in ${UBOOT_MACHINE}; do 137 i=$(expr $i + 1); 138 for type in ${UBOOT_CONFIG}; do 139 j=$(expr $j + 1); 140 if [ $j -eq $i ] 141 then 142 install -m 644 ${B}/${config}/${UBOOT_ELF} ${D}/boot/u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} 143 ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${D}/boot/${UBOOT_BINARY}-${type} 144 ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${D}/boot/${UBOOT_BINARY} 145 fi 146 done 147 unset j 148 done 149 unset i 150 else 151 install -m 644 ${B}/${UBOOT_ELF} ${D}/boot/${UBOOT_ELF_IMAGE} 152 ln -sf ${UBOOT_ELF_IMAGE} ${D}/boot/${UBOOT_ELF_BINARY} 153 fi 154 fi 155 156 if [ -e ${WORKDIR}/fw_env.config ] ; then 157 install -d ${D}${sysconfdir} 158 install -m 644 ${WORKDIR}/fw_env.config ${D}${sysconfdir}/fw_env.config 159 fi 160 161 if [ -n "${SPL_BINARY}" ] 162 then 163 if [ -n "${UBOOT_CONFIG}" ] 164 then 165 for config in ${UBOOT_MACHINE}; do 166 i=$(expr $i + 1); 167 for type in ${UBOOT_CONFIG}; do 168 j=$(expr $j + 1); 169 if [ $j -eq $i ] 170 then 171 install -m 644 ${B}/${config}/${SPL_BINARY} ${D}/boot/${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} 172 ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${D}/boot/${SPL_BINARYFILE}-${type} 173 ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${D}/boot/${SPL_BINARYFILE} 174 fi 175 done 176 unset j 177 done 178 unset i 179 else 180 install -m 644 ${B}/${SPL_BINARY} ${D}/boot/${SPL_IMAGE} 181 ln -sf ${SPL_IMAGE} ${D}/boot/${SPL_BINARYFILE} 182 fi 183 fi 184 185 if [ -n "${UBOOT_ENV}" ] 186 then 187 install -m 644 ${WORKDIR}/${UBOOT_ENV_BINARY} ${D}/boot/${UBOOT_ENV_IMAGE} 188 ln -sf ${UBOOT_ENV_IMAGE} ${D}/boot/${UBOOT_ENV_BINARY} 189 fi 190 191 if [ "${UBOOT_EXTLINUX}" = "1" ] 192 then 193 install -Dm 0644 ${UBOOT_EXTLINUX_CONFIG} ${D}/${UBOOT_EXTLINUX_INSTALL_DIR}/${UBOOT_EXTLINUX_CONF_NAME} 194 fi 195} 196 197PACKAGE_BEFORE_PN += "${PN}-env ${PN}-extlinux" 198 199RPROVIDES:${PN}-env += "u-boot-default-env" 200ALLOW_EMPTY:${PN}-env = "1" 201FILES:${PN}-env = " \ 202 ${@ '${sysconfdir}/${UBOOT_INITIAL_ENV}*' if d.getVar('UBOOT_INITIAL_ENV') else ''} \ 203 ${sysconfdir}/fw_env.config \ 204" 205 206FILES:${PN}-extlinux = "${UBOOT_EXTLINUX_INSTALL_DIR}/${UBOOT_EXTLINUX_CONF_NAME}" 207RDEPENDS:${PN} += "${@bb.utils.contains('UBOOT_EXTLINUX', '1', '${PN}-extlinux', '', d)}" 208 209SYSROOT_DIRS += "/boot" 210FILES:${PN} = "/boot ${datadir}" 211RDEPENDS:${PN} += "${PN}-env" 212 213do_deploy () { 214 if [ -n "${UBOOT_CONFIG}" ] 215 then 216 for config in ${UBOOT_MACHINE}; do 217 i=$(expr $i + 1); 218 for type in ${UBOOT_CONFIG}; do 219 j=$(expr $j + 1); 220 if [ $j -eq $i ] 221 then 222 install -D -m 644 ${B}/${config}/${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX} ${DEPLOYDIR}/${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} 223 cd ${DEPLOYDIR} 224 ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_SYMLINK}-${type} 225 ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_SYMLINK} 226 ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_BINARY}-${type} 227 ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_BINARY} 228 229 # Deploy the uboot-initial-env 230 if [ -n "${UBOOT_INITIAL_ENV}" ]; then 231 install -D -m 644 ${B}/${config}/u-boot-initial-env-${type} ${DEPLOYDIR}/${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} 232 cd ${DEPLOYDIR} 233 ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${UBOOT_INITIAL_ENV}-${MACHINE}-${type} 234 ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${UBOOT_INITIAL_ENV}-${type} 235 fi 236 fi 237 done 238 unset j 239 done 240 unset i 241 else 242 install -D -m 644 ${B}/${UBOOT_BINARY} ${DEPLOYDIR}/${UBOOT_IMAGE} 243 244 cd ${DEPLOYDIR} 245 rm -f ${UBOOT_BINARY} ${UBOOT_SYMLINK} 246 ln -sf ${UBOOT_IMAGE} ${UBOOT_SYMLINK} 247 ln -sf ${UBOOT_IMAGE} ${UBOOT_BINARY} 248 249 # Deploy the uboot-initial-env 250 if [ -n "${UBOOT_INITIAL_ENV}" ]; then 251 install -D -m 644 ${B}/u-boot-initial-env ${DEPLOYDIR}/${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} 252 cd ${DEPLOYDIR} 253 ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} ${UBOOT_INITIAL_ENV}-${MACHINE} 254 ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} ${UBOOT_INITIAL_ENV} 255 fi 256 fi 257 258 if [ -e ${WORKDIR}/fw_env.config ] ; then 259 install -D -m 644 ${WORKDIR}/fw_env.config ${DEPLOYDIR}/fw_env.config-${MACHINE}-${PV}-${PR} 260 cd ${DEPLOYDIR} 261 ln -sf fw_env.config-${MACHINE}-${PV}-${PR} fw_env.config-${MACHINE} 262 ln -sf fw_env.config-${MACHINE}-${PV}-${PR} fw_env.config 263 fi 264 265 if [ -n "${UBOOT_ELF}" ] 266 then 267 if [ -n "${UBOOT_CONFIG}" ] 268 then 269 for config in ${UBOOT_MACHINE}; do 270 i=$(expr $i + 1); 271 for type in ${UBOOT_CONFIG}; do 272 j=$(expr $j + 1); 273 if [ $j -eq $i ] 274 then 275 install -m 644 ${B}/${config}/${UBOOT_ELF} ${DEPLOYDIR}/u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} 276 ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_BINARY}-${type} 277 ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_BINARY} 278 ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_SYMLINK}-${type} 279 ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_SYMLINK} 280 fi 281 done 282 unset j 283 done 284 unset i 285 else 286 install -m 644 ${B}/${UBOOT_ELF} ${DEPLOYDIR}/${UBOOT_ELF_IMAGE} 287 ln -sf ${UBOOT_ELF_IMAGE} ${DEPLOYDIR}/${UBOOT_ELF_BINARY} 288 ln -sf ${UBOOT_ELF_IMAGE} ${DEPLOYDIR}/${UBOOT_ELF_SYMLINK} 289 fi 290 fi 291 292 293 if [ -n "${SPL_BINARY}" ] 294 then 295 if [ -n "${UBOOT_CONFIG}" ] 296 then 297 for config in ${UBOOT_MACHINE}; do 298 i=$(expr $i + 1); 299 for type in ${UBOOT_CONFIG}; do 300 j=$(expr $j + 1); 301 if [ $j -eq $i ] 302 then 303 install -m 644 ${B}/${config}/${SPL_BINARY} ${DEPLOYDIR}/${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} 304 rm -f ${DEPLOYDIR}/${SPL_BINARYFILE} ${DEPLOYDIR}/${SPL_SYMLINK} 305 ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_BINARYFILE}-${type} 306 ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_BINARYFILE} 307 ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_SYMLINK}-${type} 308 ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_SYMLINK} 309 fi 310 done 311 unset j 312 done 313 unset i 314 else 315 install -m 644 ${B}/${SPL_BINARY} ${DEPLOYDIR}/${SPL_IMAGE} 316 ln -sf ${SPL_IMAGE} ${DEPLOYDIR}/${SPL_BINARYNAME} 317 ln -sf ${SPL_IMAGE} ${DEPLOYDIR}/${SPL_SYMLINK} 318 fi 319 fi 320 321 if [ -n "${UBOOT_ENV}" ] 322 then 323 install -m 644 ${WORKDIR}/${UBOOT_ENV_BINARY} ${DEPLOYDIR}/${UBOOT_ENV_IMAGE} 324 ln -sf ${UBOOT_ENV_IMAGE} ${DEPLOYDIR}/${UBOOT_ENV_BINARY} 325 ln -sf ${UBOOT_ENV_IMAGE} ${DEPLOYDIR}/${UBOOT_ENV_SYMLINK} 326 fi 327 328 if [ "${UBOOT_EXTLINUX}" = "1" ] 329 then 330 install -m 644 ${UBOOT_EXTLINUX_CONFIG} ${DEPLOYDIR}/${UBOOT_EXTLINUX_SYMLINK} 331 ln -sf ${UBOOT_EXTLINUX_SYMLINK} ${DEPLOYDIR}/${UBOOT_EXTLINUX_CONF_NAME}-${MACHINE} 332 ln -sf ${UBOOT_EXTLINUX_SYMLINK} ${DEPLOYDIR}/${UBOOT_EXTLINUX_CONF_NAME} 333 fi 334 335 if [ -n "${UBOOT_DTB}" ] 336 then 337 install -m 644 ${B}/arch/${UBOOT_ARCH_DIR}/dts/${UBOOT_DTB_BINARY} ${DEPLOYDIR}/ 338 fi 339} 340 341addtask deploy before do_build after do_compile 342