Changeset 14707


Ignorieren:
Zeitstempel:
03.06.2018 19:43:14 (vor 3 Wochen)
Autor:
er13
Nachricht:

yourfritz-akc: adjust to the changed format of _kernel_modulmemory_config

update 06.98 kernel patches accordingly

Ort:
trunk
Dateien:
1 hinzugefügt
8 bearbeitet

Legende:

Unverändert
Hinzugefügt
Entfernt
  • trunk/make/linux/patches/3.10.107/170-avm_kernel_config.PeterPawn.patch

    r14705 r14707  
    2727--- /dev/null 
    2828+++ linux-3.10/arch/mips/kernel/avm_kernel_config_macros.h 
    29 @@ -0,0 +1,66 @@ 
     29@@ -0,0 +1,85 @@ 
    3030+/* vi: set tabstop=4 syntax=asm : */ 
    3131+#ifndef _AVM_KERNEL_CONFIG_MACROS_H 
     
    8585+   .endm 
    8686+ 
     87+   .macro  AVM_MODULE_MEMORY4 index, module, size, unknown1, unknown2 
     88+       .ifeq   \index 
     89+           .int        0 
     90+           .int        0 
     91+           .int        0 
     92+           .int        0 
     93+       .else 
     94+           .pushsection    "configareastrings", "a", %progbits 
     95+.L_avm_module_memory_\index: 
     96+           .asciz      "\module" 
     97+           .align      2 
     98+           .popsection 
     99+           .int        .L_avm_module_memory_\index 
     100+           .int        \size 
     101+           .int        \unknown1 
     102+           .int        \unknown2 
     103+       .endif 
     104+   .endm 
     105+ 
    87106+   .macro  AVM_DEVICE_TREE_BLOB subrevision 
    88107+   .endm 
  • trunk/tools/make/yourfritz-akc-host/src/avm_kernel_config.bin2asm.c

    r14628 r14707  
    8080} 
    8181 
    82 void processModuleMemoryEntry(struct _avm_kernel_config* entry) 
     82void processModuleMemoryEntry(struct _avm_kernel_config* entry, uint32_t moduleStructSize) 
    8383{ 
    8484    if (entry == NULL) 
     
    8787        return; 
    8888 
    89     struct _kernel_modulmemory_config * module = (struct _kernel_modulmemory_config *) entry->config; 
    9089    int mod_no = 0; 
    9190 
    9291    fprintf(stdout, "\n.L_avm_module_memory:\n"); 
    93     while (module->name != NULL) 
    94     { 
    95         fprintf(stdout, "\tAVM_MODULE_MEMORY\t%u, \"%s\", %u\n", ++mod_no, module->name, module->size); 
    96         module++; 
    97     } 
    98     fprintf(stdout, "\tAVM_MODULE_MEMORY\t0\n"); 
     92 
     93    if (moduleStructSize == 2) { 
     94        struct _kernel_modulmemory_config2 * module = (struct _kernel_modulmemory_config2 *) entry->config; 
     95        while (module->name != NULL) 
     96        { 
     97            fprintf(stdout, "\tAVM_MODULE_MEMORY\t%u, \"%s\", %u\n", ++mod_no, module->name, module->size); 
     98            module++; 
     99        } 
     100        fprintf(stdout, "\tAVM_MODULE_MEMORY\t0\n"); 
     101    } else if (moduleStructSize == 4) { 
     102        struct _kernel_modulmemory_config4 * module = (struct _kernel_modulmemory_config4 *) entry->config; 
     103        while (module->name != NULL) 
     104        { 
     105            fprintf(stdout, "\tAVM_MODULE_MEMORY4\t%u, \"%s\", %u, %u, %u\n", ++mod_no, module->name, module->size, module->unknown1, module->unknown2); 
     106            module++; 
     107        } 
     108        fprintf(stdout, "\tAVM_MODULE_MEMORY4\t0\n"); 
     109    } 
    99110} 
    100111 
     
    126137} 
    127138 
    128 int processConfigArea(struct _avm_kernel_config * *configArea) 
     139int processConfigArea(struct _avm_kernel_config * *configArea, uint32_t moduleStructSize) 
    129140{ 
    130141    struct _avm_kernel_config *moduleMemoryEntry = findEntryByTag(configArea, avm_kernel_config_tags_modulememory); 
     
    176187    } 
    177188    processVersionInfoEntry(versionInfoEntry); 
    178     processModuleMemoryEntry(moduleMemoryEntry); 
     189    processModuleMemoryEntry(moduleMemoryEntry, moduleStructSize); 
    179190 
    180191    fprintf(stdout, "\n\tAVM_KERNEL_CONFIG_END\n\n"); 
     
    196207    if (openMemoryMappedFile(&input, argv[1], "input", O_RDONLY | O_SYNC, PROT_WRITE, MAP_PRIVATE)) 
    197208    { 
    198         struct _avm_kernel_config ** configArea = relocateConfigArea(input.fileBuffer, input.fileStat.st_size); 
     209        uint32_t moduleStructSize; 
     210        struct _avm_kernel_config ** configArea = relocateConfigArea(input.fileBuffer, input.fileStat.st_size, &moduleStructSize); 
    199211 
    200212        if (configArea != NULL) 
    201213        { 
    202             returnCode = processConfigArea(configArea); 
     214            returnCode = processConfigArea(configArea, moduleStructSize); 
    203215        } 
    204216        else 
  • trunk/tools/make/yourfritz-akc-host/src/avm_kernel_config.extract.c

    r14628 r14707  
    6262        void *configArea = targetPtr2HostPtr(kernelSegmentStart, kernelLoadAddr, kernelBuffer); // host address space 
    6363 
    64         if (isConsistentConfigArea(configArea, size, NULL)) 
     64        if (isConsistentConfigArea(configArea, size, NULL, NULL)) 
    6565            return configArea; 
    6666    } 
  • trunk/tools/make/yourfritz-akc-host/src/avm_kernel_config.h

    r14628 r14707  
    282282#endif 
    283283 
    284 struct _kernel_modulmemory_config { 
     284struct _kernel_modulmemory_config2 { 
    285285    char *name; 
    286286    unsigned int size; 
     287}; 
     288 
     289struct _kernel_modulmemory_config4 { 
     290    char *name; 
     291    unsigned int size; 
     292    unsigned int unknown1; 
     293    unsigned int unknown2; 
    287294}; 
    288295 
  • trunk/tools/make/yourfritz-akc-host/src/avm_kernel_config_macros.h

    r14628 r14707  
    5656    .endm 
    5757 
     58    .macro  AVM_MODULE_MEMORY4 index, module, size, unknown1, unknown2 
     59        .ifeq   \index 
     60            .int        0 
     61            .int        0 
     62            .int        0 
     63            .int        0 
     64        .else 
     65            .pushsection    "configareastrings", "a", %progbits 
     66.L_avm_module_memory_\index: 
     67            .asciz      "\module" 
     68            .align      2 
     69            .popsection 
     70            .int        .L_avm_module_memory_\index 
     71            .int        \size 
     72            .int        \unknown1 
     73            .int        \unknown2 
     74        .endif 
     75    .endm 
     76 
    5877    .macro  AVM_DEVICE_TREE_BLOB subrevision 
    5978    .endm 
  • trunk/tools/make/yourfritz-akc-host/src/lib_avm_kernel_config.c

    r14628 r14707  
    2222 
    2323#include <stdlib.h> 
     24#include <stdio.h> 
    2425 
    2526#include <libfdt.h> 
     
    3839} 
    3940 
    40 bool isConsistentConfigArea(void *configArea, size_t configSize, bool *swapNeeded) 
     41bool isConsistentConfigArea(void *configArea, size_t configSize, bool *swapNeeded, uint32_t *moduleStructSize) 
    4142{ 
    4243    uint32_t *                  arrayStart = NULL; 
     
    5152 
    5253    bool                        assumeSwapped = false; 
     54    uint32_t                    _moduleStructSize = 0; 
    5355 
    5456    //  - a 32-bit value with more than one byte containing a non-zero value 
     
    141143        if (!(kernelSegmentStart <= ptrValue && ptrValue < (kernelSegmentStart+configSize))) 
    142144            return false; 
     145 
     146        { 
     147            uint32_t tag = entry->tag; 
     148            swapEndianness(assumeSwapped, &tag); 
     149            if (tag == avm_kernel_config_tags_modulememory) 
     150            { 
     151                uint32_t *module_0_ptr = targetPtr2HostPtr(ptrValue, kernelSegmentStart, configArea); 
     152 
     153                uint32_t module_0 = *(module_0_ptr + 0); 
     154                swapEndianness(assumeSwapped, &module_0); 
     155 
     156                uint32_t module_2 = *(module_0_ptr + 2); 
     157                swapEndianness(assumeSwapped, &module_2); 
     158 
     159                uint32_t module_4 = *(module_0_ptr + 4); 
     160                swapEndianness(assumeSwapped, &module_4); 
     161 
     162                fprintf(stderr, "0=0x%08x 2=0x%08x 4=0x%08x\n", module_0, module_2, module_4); 
     163                // we assume "modulememory array" contains at least 2 entries 
     164                if ((module_0 & 0xFFFFF000) == (module_2 & 0xFFFFF000)) { 
     165                    _moduleStructSize = 2; 
     166                } else if ((module_0 & 0xFFFFF000) == (module_4 & 0xFFFFF000)) { 
     167                    _moduleStructSize = 4; 
     168                } 
     169            } 
     170        } 
    143171    } 
    144172 
     
    147175        *swapNeeded = assumeSwapped; 
    148176 
     177    if (moduleStructSize) 
     178        *moduleStructSize = _moduleStructSize; 
     179 
    149180    return true; 
    150181} 
    151182 
    152 struct _avm_kernel_config* * relocateConfigArea(void *configArea, size_t configSize) 
     183struct _avm_kernel_config* * relocateConfigArea(void *configArea, size_t configSize, uint32_t *moduleStructSize) 
    153184{ 
    154185    bool swapNeeded; 
     186    uint32_t _moduleStructSize; 
    155187    uint32_t kernelSegmentStart; 
    156188    struct _avm_kernel_config * entry; 
     
    161193    //    the start address of the area in the linked kernel 
    162194 
    163     if (!isConsistentConfigArea(configArea, configSize, &swapNeeded)) 
     195    if (!isConsistentConfigArea(configArea, configSize, &swapNeeded, &_moduleStructSize)) 
    164196        return NULL; 
    165197 
     
    180212        { 
    181213            // only _kernel_modulmemory_config entries need relocation of members 
    182             struct _kernel_modulmemory_config * module = (struct _kernel_modulmemory_config *) entry->config; 
    183  
    184             while (module->name != NULL) 
    185             { 
    186                 swapEndianness(swapNeeded, (uint32_t *) &module->name); 
    187                 module->name = (char *) targetPtr2HostPtr((uint32_t)module->name, kernelSegmentStart, configArea); 
    188                 swapEndianness(swapNeeded, &module->size); 
    189  
    190                 module++; 
     214 
     215            if (_moduleStructSize == 2) { 
     216                struct _kernel_modulmemory_config2 * module = (struct _kernel_modulmemory_config2 *) entry->config; 
     217 
     218                while (module->name != NULL) 
     219                { 
     220                    swapEndianness(swapNeeded, (uint32_t *) &module->name); 
     221                    module->name = (char *) targetPtr2HostPtr((uint32_t)module->name, kernelSegmentStart, configArea); 
     222                    swapEndianness(swapNeeded, &module->size); 
     223 
     224                    module++; 
     225                } 
     226            } else if (_moduleStructSize == 4) { 
     227                struct _kernel_modulmemory_config4 * module = (struct _kernel_modulmemory_config4 *) entry->config; 
     228 
     229                while (module->name != NULL) 
     230                { 
     231                    swapEndianness(swapNeeded, (uint32_t *) &module->name); 
     232                    module->name = (char *) targetPtr2HostPtr((uint32_t)module->name, kernelSegmentStart, configArea); 
     233                    swapEndianness(swapNeeded, &module->size); 
     234                    swapEndianness(swapNeeded, &module->unknown1); 
     235                    swapEndianness(swapNeeded, &module->unknown2); 
     236 
     237                    module++; 
     238                } 
     239            } else { 
     240                fprintf(stderr, "Error: unknown _kernel_modulmemory_config size\n"); 
    191241            } 
    192242        } 
     
    196246    } 
    197247 
     248    if (moduleStructSize) 
     249        *moduleStructSize = _moduleStructSize; 
     250 
    198251    return (struct _avm_kernel_config **)configArea; 
    199252} 
     
    206259void* targetPtr2HostPtr(uint32_t targetAddressSpacePtr, uint32_t targetAddressSpaceBasePtr, void* hostAddressSpaceBasePtr) 
    207260{ 
     261    if (!(targetAddressSpaceBasePtr <= targetAddressSpacePtr)) { 
     262        fprintf(stderr, "Warning: targetAddressSpaceBasePtr(0x%08x) <= targetAddressSpacePtr(0x%08x) violated, doing no conversion\n", targetAddressSpaceBasePtr, targetAddressSpacePtr); 
     263        return (void*)targetAddressSpacePtr; 
     264    } 
     265 
    208266    return (void*) ((char *)hostAddressSpaceBasePtr + (targetAddressSpacePtr - targetAddressSpaceBasePtr)); 
    209267} 
  • trunk/tools/make/yourfritz-akc-host/src/lib_avm_kernel_config.h

    r14628 r14707  
    1212#endif 
    1313 
    14 bool isConsistentConfigArea(void *configArea, size_t configSize, bool *swapNeeded); 
    15 struct _avm_kernel_config* * relocateConfigArea(void *configArea, size_t configSize); 
     14bool isConsistentConfigArea(void *configArea, size_t configSize, bool *swapNeeded, uint32_t *moduleStructSize); 
     15struct _avm_kernel_config* * relocateConfigArea(void *configArea, size_t configSize, uint32_t *moduleStructSize); 
    1616 
    1717uint32_t determineConfigAreaKernelSegment(uint32_t targetAddressSpacePtr); 
  • trunk/tools/make/yourfritz-akc-host/src/patches/902-kernel_config_macros.patch

    r14628 r14707  
    11--- /dev/null 
    22+++ linux-3.10/arch/mips/kernel/avm_kernel_config_macros.h 
    3 @@ -0,0 +1,66 @@ 
     3@@ -0,0 +1,85 @@ 
    44+/* vi: set tabstop=4 syntax=asm : */ 
    55+#ifndef _AVM_KERNEL_CONFIG_MACROS_H 
     
    5959+   .endm 
    6060+ 
     61+   .macro  AVM_MODULE_MEMORY4 index, module, size, unknown1, unknown2 
     62+       .ifeq   \index 
     63+           .int        0 
     64+           .int        0 
     65+           .int        0 
     66+           .int        0 
     67+       .else 
     68+           .pushsection    "configareastrings", "a", %progbits 
     69+.L_avm_module_memory_\index: 
     70+           .asciz      "\module" 
     71+           .align      2 
     72+           .popsection 
     73+           .int        .L_avm_module_memory_\index 
     74+           .int        \size 
     75+           .int        \unknown1 
     76+           .int        \unknown2 
     77+       .endif 
     78+   .endm 
     79+ 
    6180+   .macro  AVM_DEVICE_TREE_BLOB subrevision 
    6281+   .endm 
Hinweis: Hilfe zur Verwendung der Changeset-Ansicht finden Sie unter TracChangeset.