Pase una gran cantidad de datos binarios de u-boot al kernel de Linux

Tiene algunos problemas con la transferencia de una gran cantidad de datos (3 MB) desde uboot hasta el kernel de Linux 2.6.35.3 en la placa ARM imx50. Estos datos son necesarios en la función de prueba del controlador de dispositivo del kernel y luego deben publicarse. Primero uboot carga datos desde flash a RAM, luego pasa la dirección física para el kernel de Linux usando bootargs. En el núcleo, trato de reservar cierta cantidad de memoria utilizando reserve_resource () en el archivo arch / arm / kernel / setup.c:

--- a/arch/arm/kernel/setup.c   Tue Jul 17 11:22:39 2012 +0300
+++ b/arch/arm/kernel/setup.c   Fri Jul 20 14:17:16 2012 +0300

struct resource my_mem_res = {
    .name = "My_Region",
    .start = 0x77c00000,
    .end = 0x77ffffff,
    .flags = IORESOURCE_MEM | IORESOURCE_BUSY,
};

@@ -477,6 +479,10 @@
    kernel_code.end     = virt_to_phys(_etext - 1);
    kernel_data.start   = virt_to_phys(_data);
    kernel_data.end     = virt_to_phys(_end - 1);
+   my_mem_res.start    = mi->bank[i].start + mi->bank[i].size - 0x400000;
+   my_mem_res.end      = mi->bank[i].start + mi->bank[i].size - 1;

    for (i = 0; i < mi->nr_banks; i++) {
        if (mi->bank[i].size == 0)
@@ -496,6 +502,8 @@
        if (kernel_data.start >= res->start &&
            kernel_data.end <= res->end)
            request_resource(res, &kernel_data);
+
+       request_resource(res, &my_mem_res);
    }

    if (mdesc->video_start) {

Con esto estoy tratando de decirle al kernel que esta área de memoria se reservó y estos datos no deberían ser modificados por el kernel.

70000000-77ffffff : System RAM
  70027000-7056ffff : Kernel text
  70588000-7062094f : Kernel data
  77c00000-77ffffff : My_Region

En conductorioremap(0x77c00000, AREA_SIZE) Se usa para obtener la dirección de memoria del kernel. Pero cuando vuelco el contenido de la memoria, solo hay ceros. Si arranca el kernel conmem=120M (el RAM total de 128MB está disponible), entonces mis datos están por encima de la región RAM del sistema del kernel, luego obtengo los datos que espero.

Entonces, mis preguntas:

¿Por qué obtengo ceros y cómo paso una gran cantidad de datos binarios de uboot a Linux kernel?

Respuestas a la pregunta(1)

Su respuesta a la pregunta