diff options
author | George McCollister <george.mccollister@gmail.com> | 2016-07-15 15:40:54 -0500 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-08-10 10:46:33 +0100 |
commit | 749d7771ce54703916fe62ab8753b177969e603a (patch) | |
tree | 55343e3b9c57657102874191bee9c329f22861b9 | |
parent | ec755d2524fcbd9dfded23a576f25c990d405a6c (diff) | |
download | poky-749d7771ce54703916fe62ab8753b177969e603a.tar.gz |
kernel-fitimage: Add x86 support
For x86, bzImage must be built instead of zImage.
Include setup.bin (which is required to boot the kernel) in the fitimage
and always use a load/boot address of 0x00090000.
For details see:
http://git.denx.de/?p=u-boot.git;a=blob;f=doc/uImage.FIT/x86-fit-boot.txt
(From OE-Core rev: 1a65d11d4b8f056fdf22c31a92d1e58dec6d89f6)
Signed-off-by: George McCollister <george.mccollister@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | meta/classes/kernel-fitimage.bbclass | 112 |
1 files changed, 82 insertions, 30 deletions
diff --git a/meta/classes/kernel-fitimage.bbclass b/meta/classes/kernel-fitimage.bbclass index f05d8a54b5..8580247f82 100644 --- a/meta/classes/kernel-fitimage.bbclass +++ b/meta/classes/kernel-fitimage.bbclass | |||
@@ -7,12 +7,17 @@ python __anonymous () { | |||
7 | depends = "%s u-boot-mkimage-native dtc-native" % depends | 7 | depends = "%s u-boot-mkimage-native dtc-native" % depends |
8 | d.setVar("DEPENDS", depends) | 8 | d.setVar("DEPENDS", depends) |
9 | 9 | ||
10 | if d.getVar("UBOOT_ARCH", True) == "x86": | ||
11 | replacementtype = "bzImage" | ||
12 | else: | ||
13 | replacementtype = "zImage" | ||
14 | |||
10 | # Override KERNEL_IMAGETYPE_FOR_MAKE variable, which is internal | 15 | # Override KERNEL_IMAGETYPE_FOR_MAKE variable, which is internal |
11 | # to kernel.bbclass . We have to override it, since we pack zImage | 16 | # to kernel.bbclass . We have to override it, since we pack zImage |
12 | # (at least for now) into the fitImage . | 17 | # (at least for now) into the fitImage . |
13 | typeformake = d.getVar("KERNEL_IMAGETYPE_FOR_MAKE", True) or "" | 18 | typeformake = d.getVar("KERNEL_IMAGETYPE_FOR_MAKE", True) or "" |
14 | if 'fitImage' in typeformake.split(): | 19 | if 'fitImage' in typeformake.split(): |
15 | d.setVar('KERNEL_IMAGETYPE_FOR_MAKE', typeformake.replace('fitImage', 'zImage')) | 20 | d.setVar('KERNEL_IMAGETYPE_FOR_MAKE', typeformake.replace('fitImage', replacementtype)) |
16 | 21 | ||
17 | image = d.getVar('INITRAMFS_IMAGE', True) | 22 | image = d.getVar('INITRAMFS_IMAGE', True) |
18 | if image: | 23 | if image: |
@@ -138,6 +143,33 @@ EOF | |||
138 | } | 143 | } |
139 | 144 | ||
140 | # | 145 | # |
146 | # Emit the fitImage ITS setup section | ||
147 | # | ||
148 | # $1 ... .its filename | ||
149 | # $2 ... Image counter | ||
150 | # $3 ... Path to setup image | ||
151 | fitimage_emit_section_setup() { | ||
152 | |||
153 | setup_csum="sha1" | ||
154 | |||
155 | cat << EOF >> ${1} | ||
156 | setup@${2} { | ||
157 | description = "Linux setup.bin"; | ||
158 | data = /incbin/("${3}"); | ||
159 | type = "x86_setup"; | ||
160 | arch = "${UBOOT_ARCH}"; | ||
161 | os = "linux"; | ||
162 | compression = "none"; | ||
163 | load = <0x00090000>; | ||
164 | entry = <0x00090000>; | ||
165 | hash@1 { | ||
166 | algo = "${setup_csum}"; | ||
167 | }; | ||
168 | }; | ||
169 | EOF | ||
170 | } | ||
171 | |||
172 | # | ||
141 | # Emit the fitImage ITS ramdisk section | 173 | # Emit the fitImage ITS ramdisk section |
142 | # | 174 | # |
143 | # $1 ... .its filename | 175 | # $1 ... .its filename |
@@ -171,6 +203,7 @@ EOF | |||
171 | # $2 ... Linux kernel ID | 203 | # $2 ... Linux kernel ID |
172 | # $3 ... DTB image ID | 204 | # $3 ... DTB image ID |
173 | # $4 ... ramdisk ID | 205 | # $4 ... ramdisk ID |
206 | # $5 ... config ID | ||
174 | fitimage_emit_section_config() { | 207 | fitimage_emit_section_config() { |
175 | 208 | ||
176 | conf_csum="sha1" | 209 | conf_csum="sha1" |
@@ -179,24 +212,25 @@ fitimage_emit_section_config() { | |||
179 | fi | 212 | fi |
180 | 213 | ||
181 | # Test if we have any DTBs at all | 214 | # Test if we have any DTBs at all |
182 | if [ -z "${3}" -a -z "${4}" ] ; then | 215 | conf_desc="Linux kernel" |
183 | conf_desc="Boot Linux kernel" | 216 | kernel_line="kernel = \"kernel@${2}\";" |
184 | fdt_line="" | 217 | fdt_line="" |
185 | ramdisk_line="" | 218 | ramdisk_line="" |
186 | elif [ -z "${4}" ]; then | 219 | |
187 | conf_desc="Boot Linux kernel with FDT blob" | 220 | if [ -n "${3}" ]; then |
188 | fdt_line="fdt = \"fdt@${3}\";" | 221 | conf_desc="${conf_desc}, FDT blob" |
189 | ramdisk_line="" | ||
190 | elif [ -z "${3}" ]; then | ||
191 | conf_desc="Boot Linux kernel with ramdisk" | ||
192 | fdt_line="" | ||
193 | ramdisk_line="ramdisk = \"ramdisk@${4}\";" | ||
194 | else | ||
195 | conf_desc="Boot Linux kernel with FDT blob, ramdisk" | ||
196 | fdt_line="fdt = \"fdt@${3}\";" | 222 | fdt_line="fdt = \"fdt@${3}\";" |
223 | fi | ||
224 | |||
225 | if [ -n "${4}" ]; then | ||
226 | conf_desc="${conf_desc}, ramdisk" | ||
197 | ramdisk_line="ramdisk = \"ramdisk@${4}\";" | 227 | ramdisk_line="ramdisk = \"ramdisk@${4}\";" |
198 | fi | 228 | fi |
199 | kernel_line="kernel = \"kernel@${2}\";" | 229 | |
230 | if [ -n "${5}" ]; then | ||
231 | conf_desc="${conf_desc}, setup" | ||
232 | setup_line="setup = \"setup@${5}\";" | ||
233 | fi | ||
200 | 234 | ||
201 | cat << EOF >> ${1} | 235 | cat << EOF >> ${1} |
202 | default = "conf@1"; | 236 | default = "conf@1"; |
@@ -205,6 +239,7 @@ fitimage_emit_section_config() { | |||
205 | ${kernel_line} | 239 | ${kernel_line} |
206 | ${fdt_line} | 240 | ${fdt_line} |
207 | ${ramdisk_line} | 241 | ${ramdisk_line} |
242 | ${setup_line} | ||
208 | hash@1 { | 243 | hash@1 { |
209 | algo = "${conf_csum}"; | 244 | algo = "${conf_csum}"; |
210 | }; | 245 | }; |
@@ -212,16 +247,22 @@ EOF | |||
212 | 247 | ||
213 | if [ ! -z "${conf_sign_keyname}" ] ; then | 248 | if [ ! -z "${conf_sign_keyname}" ] ; then |
214 | 249 | ||
215 | if [ -z "${3}" -a -z "${4}" ] ; then | 250 | sign_line="sign-images = \"kernel\"" |
216 | sign_line="sign-images = \"kernel\";" | 251 | |
217 | elif [ -z "${4}" ]; then | 252 | if [ -n "${3}" ]; then |
218 | sign_line="sign-images = \"fdt\", \"kernel\";" | 253 | sign_line="${sign_line}, \"fdt\"" |
219 | elif [ -z "${3}" ]; then | 254 | fi |
220 | sign_line="sign-images = \"ramdisk\", \"kernel\";" | 255 | |
221 | else | 256 | if [ -n "${4}" ]; then |
222 | sign_line="sign-images = \"ramdisk\", \"fdt\", \"kernel\";" | 257 | sign_line="${sign_line}, \"ramdisk\"" |
223 | fi | 258 | fi |
224 | 259 | ||
260 | if [ -n "${5}" ]; then | ||
261 | sign_line="${sign_line}, \"setup\"" | ||
262 | fi | ||
263 | |||
264 | sign_line="${sign_line};" | ||
265 | |||
225 | cat << EOF >> ${1} | 266 | cat << EOF >> ${1} |
226 | signature@1 { | 267 | signature@1 { |
227 | algo = "${conf_csum},rsa2048"; | 268 | algo = "${conf_csum},rsa2048"; |
@@ -246,6 +287,7 @@ fitimage_assemble() { | |||
246 | kernelcount=1 | 287 | kernelcount=1 |
247 | dtbcount="" | 288 | dtbcount="" |
248 | ramdiskcount=${3} | 289 | ramdiskcount=${3} |
290 | setupcount="" | ||
249 | rm -f ${1} arch/${ARCH}/boot/${2} | 291 | rm -f ${1} arch/${ARCH}/boot/${2} |
250 | 292 | ||
251 | fitimage_emit_fit_header ${1} | 293 | fitimage_emit_fit_header ${1} |
@@ -279,7 +321,15 @@ fitimage_assemble() { | |||
279 | fi | 321 | fi |
280 | 322 | ||
281 | # | 323 | # |
282 | # Step 3: Prepare a ramdisk section. | 324 | # Step 3: Prepare a setup section. (For x86) |
325 | # | ||
326 | if test -e arch/${ARCH}/boot/setup.bin ; then | ||
327 | setupcount=1 | ||
328 | fitimage_emit_section_setup ${1} "${setupcount}" arch/${ARCH}/boot/setup.bin | ||
329 | fi | ||
330 | |||
331 | # | ||
332 | # Step 4: Prepare a ramdisk section. | ||
283 | # | 333 | # |
284 | if [ "x${ramdiskcount}" = "x1" ] ; then | 334 | if [ "x${ramdiskcount}" = "x1" ] ; then |
285 | copy_initramfs | 335 | copy_initramfs |
@@ -290,21 +340,23 @@ fitimage_assemble() { | |||
290 | 340 | ||
291 | # Force the first Kernel and DTB in the default config | 341 | # Force the first Kernel and DTB in the default config |
292 | kernelcount=1 | 342 | kernelcount=1 |
293 | dtbcount=1 | 343 | if test -n "${dtbcount}"; then |
344 | dtbcount=1 | ||
345 | fi | ||
294 | 346 | ||
295 | # | 347 | # |
296 | # Step 4: Prepare a configurations section | 348 | # Step 5: Prepare a configurations section |
297 | # | 349 | # |
298 | fitimage_emit_section_maint ${1} confstart | 350 | fitimage_emit_section_maint ${1} confstart |
299 | 351 | ||
300 | fitimage_emit_section_config ${1} ${kernelcount} ${dtbcount} ${ramdiskcount} | 352 | fitimage_emit_section_config ${1} "${kernelcount}" "${dtbcount}" "${ramdiskcount}" "${setupcount}" |
301 | 353 | ||
302 | fitimage_emit_section_maint ${1} sectend | 354 | fitimage_emit_section_maint ${1} sectend |
303 | 355 | ||
304 | fitimage_emit_section_maint ${1} fitend | 356 | fitimage_emit_section_maint ${1} fitend |
305 | 357 | ||
306 | # | 358 | # |
307 | # Step 5: Assemble the image | 359 | # Step 6: Assemble the image |
308 | # | 360 | # |
309 | uboot-mkimage \ | 361 | uboot-mkimage \ |
310 | ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \ | 362 | ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \ |
@@ -312,7 +364,7 @@ fitimage_assemble() { | |||
312 | arch/${ARCH}/boot/${2} | 364 | arch/${ARCH}/boot/${2} |
313 | 365 | ||
314 | # | 366 | # |
315 | # Step 6: Sign the image and add public key to U-Boot dtb | 367 | # Step 7: Sign the image and add public key to U-Boot dtb |
316 | # | 368 | # |
317 | if [ "x${UBOOT_SIGN_ENABLE}" = "x1" ] ; then | 369 | if [ "x${UBOOT_SIGN_ENABLE}" = "x1" ] ; then |
318 | uboot-mkimage \ | 370 | uboot-mkimage \ |