u-boot: load a kernel that's in a ubi volume

anoo anoo at linux.vnet.ibm.com
Tue Aug 8 07:44:05 AEST 2017


Milton got mtdparts working by enabling the macro CONFIG_FLASH_CFI_MTD 
plus the u-boot patch I just sent to the mailing list.
Something to discuss would be where to add the UBI and MTD macros 
(instead of ast-g5-ncsi.h). Perhaps a new header file but maybe not 
generic a generic base one so that it's off by default.

On 2017-08-07 12:39, Rick Altherr wrote:
> I'm surprised you are putting the kernel in a bare UBI volume.  AFAIK,
> U-Boot can load kernels from UBIFS.  Why wouldn't you create a UBIFS
> volume for /boot and put the fitImage in there?

Is there an advantage with UBIFS? Talking with Milton there’s no need 
to access it during runtime, and we’d just have a couple kernels as 
static volumes.

> On Mon, Aug 7, 2017 at 8:34 AM, anoo <anoo at linux.vnet.ibm.com> wrote:
>> On 2017-08-07 02:36, Joel Stanley wrote:
>>> 
>>> On Mon, Aug 7, 2017 at 1:39 PM, anoo <anoo at linux.vnet.ibm.com> wrote:
>>>> 
>>>> Hi Joel,
>>>> 
>>>> Per our discussion, here are the details of what we’re trying to 
>>>> do and
>>>> the
>>>> things I’ve tried.
>>> 
>>> 
>>> Thanks. I spent the afternoon attempting to recreate your results.
>>> 
>>>> 
>>>> Goal: Have u-boot load a kernel that's in a ubi volume.
>>>> 
>>>> 1. Added ubi support to uboot by adding the following macros to
>>>> include/configs/ast-g5-ncsi.h temporarily for testing purposes (a 
>>>> new
>>>> config
>>>> header would probably need to be created for a final 
>>>> implementation):
>>>> 
>>>> | +#define CONFIG_CMD_UBI
>>>> | +#define CONFIG_CMD_UBIFS
>>>> | +#define CONFIG_RBTREE
>>>> | +#define CONFIG_MTD_DEVICE
>>>> | +#define CONFIG_MTD_PARTITIONS
>>>> | +#define CONFIG_CMD_MTDPARTS
>>>> | +#define CONFIG_LZO
>>> 
>>> 
>>> I replicated this. I noted that this increases the size of the u-boot
>>> image a lot:
>>> 
>>> Old size: 232632
>>> New size: 358320
>>> 
>>> This is an extra 122kB, or a 54% increase in the u-boot size.
>>> 
>>> It does still fit in the partition we have, which is 384 KB.
>> 
>> 
>> Definitely something to keep in mind.
>> 
>>> 
>>>> 
>>>> 2. Built a romulus image with the above u-boot change plus commit
>>>> https://gerrit.openbmc-project.xyz/#/c/5812/ which is the top-most 
>>>> commit
>>>> for a set of changes to remove the initramfs and create a flash 
>>>> image
>>>> that
>>>> builds the kernel and rootsfs into ubi volumes.
>>> 
>>> 
>>> Why Romulus? Isn't this work being done for Witherspoon?
>> 
>> 
>> Yeah, this is being done for witherspoon. I've tested with witherspoon 
>> as
>> well but also Romulus in case there were device tree changes that 
>> needed to
>> be done that's a smaller system.
>> 
>>>> 3. Used the generated obmc-phosphor-image-romulus.ubi.mtd to boot 
>>>> qemu.
>>> 
>>> 
>>> What was the Qemu command line you used?
>> 
>> 
>> After cloning the openbmc/qemu repo and building (using as reference
>> https://github.com/openbmc/docs/blob/master/cheatsheet.md#using-qemu):
>> 
>> ./build/arm-softmmu/qemu-system-arm -m 256 -M romulus-bmc -nographic 
>> -drive
>> file=/<path_to>/obmc-phosphor-image-romulus.ubi.mtd,format=raw,if=mtd 
>> -net
>> nic -net
>> user,hostfwd=:127.0.0.1:2222-:22,hostfwd=:127.0.0.1:2443-:443,hostfwd=:127.0.0.1:2300-:3000,hostname=qemu
>> 
>> For witherspoon, I use the same command, just pointing to a withespoon
>> image.
>> 
>>> 
>>> Can you share a mkfs.ubifs command line that I can use to create a 
>>> ubi
>>> image?
>> 
>> 
>> You can create a config test file (named ubi.cfg in this example) in a
>> directory where you have the kernel fit image fitImage-<system>.bin, 
>> ex:
>> 
>> $ cat ubi.cfg
>> [kernel0]
>> mode=ubi
>> image=fitImage-<system>.bin
>> vol_type=static
>> vol_name=kernel0
>> vol_id=0
>> 
>> Then use ubinize command:
>> $ ubinize -p 64 -m 1 -o <outputfilename> ubi.cfg
>> 
>> The ubinize command is being added to the openbmc build with this 
>> commit:
>> https://gerrit.openbmc-project.xyz/#/c/5801/3/meta-phosphor/classes/image_types_phosphor.bbclass
>> 
>> The rwfs is built with:
>> "UBIFS_RWFS_CMD = "mkfs.ubifs -r ubifs -c ${FLASH_UBI_RWFS_LEBS} -m
>> ${FLASH_PAGE_SIZE} -e ${FLASH_LEB_SIZE}KiB rwfs.ubifs"
>> 
>> Then the ubi image is built with:
>> "ubinize -p ${FLASH_PEB_SIZE}KiB -m ${FLASH_PAGE_SIZE} -o ubi-img 
>> $cfg"
>> 
>>> 
>>> When I tried to boot the image I downloaded from the gerrit job, none
>>> of the uboot commands you listed worked:
>> 
>> 
>> An image needs to built with the u-boot changes that enable ubi, since 
>> that
>> is not in gerrit. You'd need to build an openbmc image with the u-boot
>> recipe pointing to a local u-boot repo that has the ubi macros 
>> enabled.
>> 
>> I'll pass you in a separate msg the image I have built.
>> 
>> 
>>> 
>>> U-Boot 2016.07 (Jul 27 2017 - 21:13:25 +0000)
>>> 
>>>        Watchdog enabled
>>> DRAM:  496 MiB
>>> Flash: 32 MiB
>>> *** Warning - bad CRC, using default environment
>>> 
>>> In:    serial
>>> Out:   serial
>>> Err:   serial
>>> Net:   aspeednic#0
>>> Error: aspeednic#0 address not set.
>>> 
>>> Hit any key to stop autoboot:  0
>>> libfdt fdt_check_header(): FDT_ERR_BADMAGIC
>>> Wrong Image Format for bootm command
>>> ERROR: can't get kernel image!
>>> ast# mtdparts
>>> Unknown command 'mtdparts' - try 'help'
>>> ast# ubi part kernel0
>>> Unknown command 'ubi' - try 'help'
>>> 
>>> 
>>>> 
>>>> 4. To be able to use ubi in u-boot, the mtdparts and mtdids 
>>>> variables
>>>> need
>>>> to be set (reference:
>>>> https://fossies.org/linux/qemu/roms/u-boot/doc/README.ubi).
>>>> 
>>>> Here is where I’ve been unable to get u-boot to recognize the 
>>>> existing
>>>> mtd.
>>>> I’ve tried multiple combinations for mtdids, such as nor0=bmc,
>>>> nor0=<addr>.flash, etc etc. But when running “mtdparts” command 
>>>> from
>>>> u-boot,
>>>> or a ubi command, always get "Device nor0 not found!”. Ex:
>>>> 
>>>> ast# mtdparts
>>>> Device nor0 not found!
>>>> 
>>>> ast# ubi part kernel0
>>>> Device nor0 not found!
>>>> Error initializing mtdparts!
>>>> 
>>>> I’ve also taken a stab at adding the romulus device tree to u-boot 
>>>> to see
>>>> if
>>>> that may be the reason, by copying from the kernel and adding to 
>>>> u-boot
>>>> the
>>>> files arch/arm/dts/aspeed-g5.dtsi, aspeed-bmc-opp-flash-layout.dtsi,
>>>> aspeed-bmc-opp-romulus.dts, and adding the dts to the Makefile. Also
>>>> added a
>>>> CONFIG_DEFAULT_DEVICE_TREE macro. This might not be the correct or
>>>> complete
>>>> way to add the device tree to the openbmc version of u-boot.
>>> 
>>> 
>>> Can you explain what you were trying to do there?
>> 
>> 
>> I was trying to add the system device tree to u-boot. The device trees 
>> for
>> the openbmc systems are defined in the kernel, but they may be 
>> required to
>> be defined in u-boot for u-boot to find the mtd partitions.
>> 
>>> 
>>> Cheers,
>>> 
>>> Joel
>> 
>> 



More information about the openbmc mailing list