Problema con el selector de arranque de Barebox/integración de estado de Raspberry Pi 3

Problema con el selector de arranque de Barebox/integración de estado de Raspberry Pi 3

Tengo un problema con respecto a la integración de estado/selector de arranque barebox para Raspberry Pi 3 (utilizado para múltiples actualizaciones de software rootfs + RAUC).

Estoy usando lo siguiente: Yocto Pyro 2.3.2, barebox 2018.12.0. He configurado correctamente barebox, puedo ver el resultado en la consola de depuración.

Rpi 3 no tiene ninguna otra memoria no volátil (excepto la tarjeta SD). ¿Cómo puedo almacenar el estado de la caja vacía en la tarjeta SD? Para otras placas, el estado de la caja básica se almacena en EEPROM/eMMC/NAND integrado (incluso en la tarjeta SD), que ya se describe en la fuente del árbol de dispositivos. La tarjeta SD para RPI (mci0) se detecta al iniciar la caja básica y no se describe en el DTS (consulte el resultado de devinfo a continuación):

barebox@RaspberryPi 3 Model B:/ devinfo
`-- global
`-- nv
`-- platform
   `-- soc
      `-- 3f003000.timer@7e003000
      `-- 3f004000.txp@7e004000
      `-- 3f007000.dma@7e007000
      `-- 3f00b200.interrupt-controller@7e00b200
      `-- 3f100000.watchdog@7e100000
         `-- wdog0
      `-- 3f101000.cprman@7e101000
      `-- 3f104000.rng@7e104000
      `-- 3f00b880.mailbox@7e00b880
      `-- 3f200000.gpio@7e200000
      `-- 3f202000.mmc@7e202000
      `-- 3f205000.i2c@7e205000
      `-- 3f206000.pixelvalve@7e206000
      `-- 3f207000.pixelvalve@7e207000
      `-- 3f209000.dsi@7e209000
      `-- 3f212000.thermal@7e212000
      `-- 3f215000.aux@7e215000
      `-- 3f215040.serial@7e215040
      `-- 3f20c000.pwm@7e20c000
      `-- 3f300000.sdhci@7e300000
         `-- mci0
            `-- 0x00000000-0x76e47ffff (  29.7 GiB): /dev/disk0
            `-- 0x00001000-0x022c1fff (  34.8 MiB): /dev/disk0.0
            `-- 0x022c2000-0xfbc5bbff (   3.9 GiB): /dev/disk0.1
            `-- 0xfbc5c000-0x1f55f5bff (   3.9 GiB): /dev/disk0.2
            `-- 0x1f55f5c00-0x2149f5fff (   500 MiB): /dev/disk0.3
            `-- 0x1f55f5e00-0x1fb9f5dff (   100 MiB): /dev/disk0.4
            `-- 0x1fb9f6000-0x2149f5fff (   400 MiB): /dev/disk0.5
            `-- fat0
      `-- 3f400000.hvs@7e400000
      `-- 3f804000.i2c@7e804000
      `-- 3f805000.i2c@7e805000
      `-- 3f806000.vec@7e806000
      `-- 3f807000.pixelvalve@7e807000
      `-- 3f902000.hdmi@7e902000
      `-- 3f980000.usb@7e980000
      `-- 3fc00000.v3d@7ec00000
      `-- soc:gpu
      `-- 40000000.local_intc@40000000
      `-- soc:firmware
         `-- soc:firmware:gpio
      `-- soc:power
      `-- 3f00b840.mailbox@7e00b840
   `-- clocks
      `-- clocks:clock@3
      `-- clocks:clock@4
   `-- phy
   `-- arm-pmu
   `-- timer
   `-- leds
   `-- wifi-pwrseq
   `-- regulator-bcm2835
   `-- mem0
      `-- 0x00000000-0x3b3fffff (   948 MiB): /dev/ram0
   `-- mem1
      `-- 0x00000000-0xfffffffe (     4 GiB): /dev/mem
   `-- bcm2835_fb0
`-- amba
   `-- 3f201000.serial@7e201000
      `-- cs0
         `-- 0x00000000-0xffffffffffffffff (   0 Bytes): /dev/cs0
`-- spi
`-- fs
   `-- ramfs0
   `-- devfs0

Además, la documentación básica establece lo siguiente (con respecto al almacenamiento del estado de la tarjeta SD): "Tenga en cuenta que actualmente no hay soporte para tablas de particiones en el disco. En su lugar, se debe utilizar una descripción de partición ofpart. Debe asegurarse de que esta partición no no entre en conflicto con ninguna otra partición en la tabla de particiones".

¿Estaría bien si defino el nodo mci0 en la fuente del árbol de dispositivos? ¿Cómo debería hacerlo? La documentación básica proporciona un ejemplo, pero eso no ayuda demasiado en mi caso:

backend_state_sd: part@100000 {
        label = "state";
        reg = <0x100000 0x20000>;
};

aliases {
        state = &state_sd;
};

state_sd: state_memory {
        #address-cells = <1>;
        #size-cells = <1>;
        compatible = "barebox,state";
        magic = <0xab67421f>;
        backend-type = "raw";
        backend = <&backend_state_sd>;
        backend-stridesize = <0x40>;

        variable@0 {
                reg = <0x0 0x1>;
                type ="uint8";
                default = <0x1>;
        };
};

¡Muchas gracias!

Saludos Vali.

Respuesta1

¿Estaría bien si defino el nodo mci0 en la fuente del árbol de dispositivos?

Sí, esto es exactamente lo que sugiere la documentación.

¿Cómo debería hacerlo? La documentación barebox proporciona un ejemplo, pero eso no ayuda demasiado en mi caso.

Mira cómo se hace para elPlaca de Aquiles SoCFPGA Arria10:

&mmc {
        partitions {
                compatible = "fixed-partitions";
                #size-cells = <1>;
                #address-cells = <1>;

                state_mmc: partition@400000 {
                        label = "state";
                        reg = <0x400000 0x8000>;
                };
        };
};

PD: Hay una lista de correo básica y un canal freenode, con una mayor densidad de personas que podrían responder preguntas básicas. :)

información relacionada