u-boot.inc 14 KB

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