Search code examples
openbmc

"image is too large" keeps on happening to openbmc image for Raspberrypi platform


Could someone please give me advice to make an openbmc image for Raspberrypi platform ? Before I tried, I looked through related documents and believed an openbmc image can be worked on Raspberrypi. Like OpenBMC with Raspberry Pi (2 or 3) and build bmcweb? and https://kevinleeblog.github.io/project1/2019/11/25/openbmc-for-raspberry-pi-zero/.

So, I followed these instructions and tried the following steps.

#1: Git clone openbmc.git to my local PC.

tm@tm-VB1:~/Rpi4-64$ git clone https://github.com/openbmc/openbmc.git

Snip the logs but it looks no problem.

Receiving objects: 100% (182121/182121), 84.10 MiB | 5.55 MiB/s, done.

Resolving deltas: 100% (96860/96860), done.

#2: set TEMPLATECONF for raspberrypi

tm@tm-VB1:~/Rpi4-64$ export TEMPLATECONF=meta-evb/meta-evb-raspberrypi/conf

tm@tm-VB1:~/Rpi4-64$ echo $TEMPLATECONF

meta-evb/meta-evb-raspberrypi/conf

#3: set up the environment by "openbmc-env"

tm@tm-VB1:~/Rpi4-64/openbmc$ . openbmc-env 

### Initializing OE build env ###

Snip the logs but it looks no problem. As you know, the script automatically creates a subdirectory,build, under openbmc.


Common targets are:
  obmc-phosphor-image

tm@tm-VB1:~/Rpi4-64/openbmc/build$

#4: Change the directory and edit local.conf for my Raspberrypi platform.

tm@tm-VB1:~/Rpi4-64/openbmc/build$ cat ./conf/local.conf

Snip the log for unchanged part.

MACHINE ??= "raspberrypi4-64"   <<< Change here for my platform.

DL_DIR ?= "/home/tm/Yocto/downloads"           <<< Add here for build-time reduction at retry.

SSTATE_DIR ?= "/home/tm/Yocto/sstate-cache"   <<< Add here for build-time reduction at retry.

#5: Change FLASH_SIZE variable based on the following sugestion. https://github.com/openbmc/openbmc/issues/3590

tm@tm-VB1:~/Rpi4-64/openbmc/meta-phosphor/classes$ cat image_types_phosphor.bbclass 

Snip the log.

# Flash characteristics in KB unless otherwise noted

FLASH_SIZE ?= "131072"        <<< I changed only this variable from 32768 to 131072.

#6: bitbake starts.

tm@tm-VB1:~/Rpi4-64/openbmc/bitbake obmc-phosphor-image

Then, ERROR happened.

ERROR: Logfile of failure stored in: /home/tm/Rpi/openbmc/build/tmp/work/raspberrypi-openbmc-linux-gnueabi/obmc-phosphor-image/1.0-r0/temp/log.do_generate_static.2055074
DEBUG: Executing python function do_generate_static
DEBUG: Executing shell function do_mk_static_nor_image
32768+0 records in
32768+0 records out
33554432 bytes (34 MB, 32 MiB) copied, 0.09147 s, 367 MB/s
DEBUG: Shell function do_mk_static_nor_image finished
DEBUG: Considering file size=495980 name=/home/tm/Rpi/openbmc/build/tmp/deploy/images/raspberrypi/u-boot.bin
DEBUG: Spanning start=0K end=512K
DEBUG: Compare needed=495980 available=524288 margin=28308
484+1 records in
484+1 records out
495980 bytes (496 kB, 484 KiB) copied, 0.00120141 s, 413 MB/s
DEBUG: Considering file size=8266960 name=/home/tm/Rpi/openbmc/build/tmp/deploy/images/raspberrypi/fitImage-obmc-phosphor-initramfs-raspberrypi-raspberrypi
DEBUG: Spanning start=512K end=4864K
>>>DEBUG: Compare needed=8266960 available=4456448 margin=-3810512
ERROR: Image '/home/tm/Rpi/openbmc/build/tmp/deploy/images/raspberrypi/fitImage-obmc-phosphor-initramfs-raspberrypi-raspberrypi' is too large!
DEBUG: Python function do_generate_static finished

It said margin=-3810512.

Now, my 2nd try. I removed the whole openbmc directory and did the same steps above. But this time, I change FLASH_SIZE from 32768 to 262144. It is the same result like below.

ERROR: obmc-phosphor-image-1.0-r0 do_generate_static: Image '/home/tm/Rpi4/openbmc/build/tmp/deploy/images/raspberrypi4/u-boot.bin' is too large!
ERROR: Logfile of failure stored in: /home/tm/Rpi4/openbmc/build/tmp/work/raspberrypi4-openbmc-linux-gnueabi/obmc-phosphor-image/1.0-r0/temp/log.do_generate_static.2061792
ERROR: Task (/openbmc/meta-phosphor/recipes-phosphor/images/obmc-phosphor-image.bb:do_generate_static) failed with exit code '1'
NOTE: Tasks Summary: Attempted 3915 tasks of which 2633 didn't need to be rerun and 1 failed.

Summary: 1 task failed:
/openbmc/meta-phosphor/recipes-phosphor/images/obmc-phosphor-image.bb:do_generate_static
Summary: There were 2 WARNING messages shown.
Summary: There was 1 ERROR message shown, returning a non-zero exit code.

tm@tm-VB1:~/Rpi4/openbmc/build$ cat /home/tm/Rpi4/openbmc/build/tmp/work/raspberrypi4-openbmc-linux-gnueabi/obmc-phosphor-image/1.0-r0/temp/log.do_generate_static.2061792
DEBUG: Executing python function do_generate_static
DEBUG: Executing shell function do_mk_static_nor_image
32768+0 records in
32768+0 records out
33554432 bytes (34 MB, 32 MiB) copied, 0.177223 s, 189 MB/s
DEBUG: Shell function do_mk_static_nor_image finished
DEBUG: Considering file size=548224 name=/home/tm/Rpi4/openbmc/build/tmp/deploy/images/raspberrypi4/u-boot.bin
DEBUG: Spanning start=0K end=512K
>>>DEBUG: Compare needed=548224 available=524288 margin=-23936
ERROR: Image '/home/tm/Rpi4/openbmc/build/tmp/deploy/images/raspberrypi4/u-boot.bin' is too large!
DEBUG: Python function do_generate_static finished
tm@tm-VB1:~/Rpi4/openbmc/build$ 

It said margin=-23936.

OK. Image is too large. So,my 3rd try. I removed the whole openbmc directory and did the same steps above. But this time, I change FLASH_SIZE from 32768 to 9437184. It is the same result like below.

ERROR: obmc-phosphor-image-1.0-r0 do_generate_static: Image '/home/tm/Rpi4/openbmc/build/tmp/deploy/images/raspberrypi4/u-boot.bin' is too large!
ERROR: Logfile of failure stored in: /home/tm/Rpi4/openbmc/build/tmp/work/raspberrypi4-openbmc-linux-gnueabi/obmc-phosphor-image/1.0-r0/temp/log.do_generate_static.2058361
ERROR: Task (/openbmc/meta-phosphor/recipes-phosphor/images/obmc-phosphor-image.bb:do_generate_static) failed with exit code '1'
NOTE: Tasks Summary: Attempted 3935 tasks of which 0 didn't need to be rerun and 1 failed.

Summary: 1 task failed:
/openbmc/meta-phosphor/recipes-phosphor/images/obmc-phosphor-image.bb:do_generate_static
Summary: There were 4 WARNING messages shown.
Summary: There was 1 ERROR message shown, returning a non-zero exit code.
tm@tm-VB1:~/Rpi4/openbmc$ 

tm@tm-VB1:~/Rpi4/openbmc$ cat /home/tm/Rpi4/openbmc/build/tmp/work/raspberrypi4-openbmc-linux-gnueabi/obmc-phosphor-image/1.0-r0/temp/log.do_generate_static.2058361
DEBUG: Executing python function do_generate_static
DEBUG: Executing shell function do_mk_static_nor_image
32768+0 records in
32768+0 records out
33554432 bytes (34 MB, 32 MiB) copied, 0.173685 s, 193 MB/s
DEBUG: Shell function do_mk_static_nor_image finished
DEBUG: Considering file size=548224 name=/home/tm/Rpi4/openbmc/build/tmp/deploy/images/raspberrypi4/u-boot.bin
DEBUG: Spanning start=0K end=512K
>>>DEBUG: Compare needed=548224 available=524288 margin=-23936
ERROR: Image '/home/tm/Rpi4/openbmc/build/tmp/deploy/images/raspberrypi4/u-boot.bin' is too large!
DEBUG: Python function do_generate_static finished
tm@tm-VB1:~/Rpi4/openbmc$ 

It said the same margin as 256MB case.

My 4th try. I removed the whole openbmc directory and did the same steps above. I changed MACHINE ??= "raspberrypi4-64" to "raspberrypi2" But this time, I change FLASH_SIZE from 32768 to 33554432.

It is the same result before.

My 5th try. I removed the whole openbmc directory and did the same steps above. I used MACHINE ??= "raspberrypi2" But this time, I change FLASH_SIZE from 32768 to 67108864.

It is the same result before.

After I tried several variations, it always said "image is too large" although I changed FLASH_SIZE to much much larger one. So, I am wondering if I have missed some important configuration or it needs another parameter to fix this except FLASH_SIZE. By the way, I tried romulus and made it.

My environment is ubuntu-20.04.2.0-desktop-amd64.

I really appreciate someone could kindly give me advice to make this work.


Solution

  • Interesting, I don't have a quick fix for you but I did notice the partition that is over sized is the uboot partition. The uboot is a smaller separate binary installed on the machine. It looks as if your uboot build is over 512k and the partition is set for 512k. Your flash size is massize FLASH_SIZE = 9437184" that is more then a gig, (because FLASH_SIZE is in K)

    If I were you I would first try to build an older version of openbmc for raspberry pi. (It used to work so you just need to find the commit before uboot grew to big). Use git to move back a month until you find it works.

    If that does not work I would try to modify the partition table. here is where you failing

    • this looks fine building the uboot image looks fine
    • increasing the kernel offset make if build, but the other targets in openbmc will not be happy with this solution. So maybe meta-raspberry-pi will have to override the partition table (if uboot can not be shrunk)

    What ever you do, open an issue on the github and share you changes. Also use the discord, and gerrit.

    I just replicated this issue. We should fix it