Übergeben Sie eine große Menge von Binärdaten von U-Boot an den Linux-Kernel

Es gibt einige Probleme beim Übertragen einer großen Datenmenge (3 MB) von Uboot auf den Linux-Kernel 2.6.35.3 auf dem imx50-ARM-Board. Diese Daten werden für die Kernel-Gerätetreiber-Testfunktion benötigt und sollten dann freigegeben werden. Zuerst ubooten Sie die Daten vom Flash ins RAM, dann übergeben Sie die physikalische Adresse für den Linux-Kernel mit Hilfe von Bootargs. Im Kernel versuche ich, mit reserve_resource () in der Datei arch / arm / kernel / setup.c eine bestimmte Menge an Speicher zu reservieren:

--- 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) {

Damit versuche ich dem Kernel mitzuteilen, dass dieser Speicherbereich reserviert ist und diese Daten nicht vom Kernel geändert werden sollten.

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

Im Fahrerioremap(0x77c00000, AREA_SIZE) wird verwendet, um die Kernel-Speicheradresse abzurufen. Aber wenn ich den Speicherinhalt entleere, gibt es nur Nullen. Wenn Boot-Kernel mitmem=120M (128 MB RAM sind insgesamt verfügbar). Dann befinden sich meine Daten über der Kernel-System-RAM-Region. Dann erhalte ich die erwarteten Daten.

Also meine Fragen:

Warum bekomme ich Nullen und wie gebe ich eine große Menge von Binärdaten von Uboot an den Linux-Kernel weiter?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage