u-boot.inc 16 KB

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