Changeset 13821


Ignore:
Timestamp:
02/03/10 01:25:49 (3 years ago)
Author:
BrainSlayer
Message:

guess the bootloader size

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/linux/pb42/linux-2.6.23/drivers/mtd/devices/ar7100_flash.c

    r13760 r13821  
    170170        return 0; 
    171171} 
    172  
     172int guessbootsize(void *offset,unsigned int maxscan) 
     173{ 
     174unsigned int i; 
     175unsigned int *ofs = (unsigned int *)offset; 
     176maxscan-=65536; 
     177maxscan/=4; 
     178for (i=0;i<maxscan;i+=16384) 
     179    { 
     180    if (ofs[i] == 0x6d000080) 
     181        { 
     182        printk(KERN_EMERG "redboot or compatible detected\n"); 
     183        return i; // redboot, lzma image 
     184        } 
     185    if (ofs[i] == 0x27051956) 
     186        { 
     187        printk(KERN_EMERG "uboot detected\n"); 
     188        return i; // uboot, lzma image 
     189        } 
     190    } 
     191return -1; 
     192} 
    173193static struct mtd_partition dir_parts[] = { 
    174194#ifdef CONFIG_MTD_FLASH_16MB 
     
    274294                int compex = 0; 
    275295                if (!strncmp((char *)(buf + 0x295a), "myloram.bin", 11)) { 
    276 /*        { name: "RedBoot", offset: 0, size: 0x40000, },//, mask_flags: MTD_WRITEABLE, }, 
    277         { name: "linux", offset: 0x40000, size: 0x390000, }, 
    278 #endif 
    279         { name: "rootfs", offset: 0x0, size: 0x2b0000,}, //must be detected 
    280         { name: "ddwrt", offset: 0x0, size: 0x2b0000,}, //must be detected 
    281         { name: "nvram", offset: 0x3d0000, size: 0x10000, }, 
    282         { name: "FIS directory", offset: 0x3e0000, size: 0x10000, }, 
    283         { name: "board_config", offset: 0x3f0000, size: 0x10000, }, 
    284         { name: "fullflash", offset: 0x3f0000, size: 0x10000, }, 
    285         { name: NULL, },*/ 
    286296                        printk(KERN_EMERG "Compex WP543 device detected\n"); 
    287297                        dir_parts[0].size = 0x30000; 
     
    293303                        dir_parts[6].offset = mtd->size - mtd->erasesize; 
    294304                        compex = 1; 
     305                }else{ 
     306                int guess = guessbootsize(buf,mtd->size); 
     307                if (guess>0) 
     308                    { 
     309                    printk(KERN_EMERG "bootloader size = %X\n",guess); 
     310                    dir_parts[0].size = guess; 
     311                    dir_parts[0].offset = 0; 
     312                    dir_parts[1].offset = guess; 
     313                    dir_parts[1].size = 0; 
     314                    } 
     315                 
    295316                } 
    296317 
     
    339360                                rootsize = dir_parts[4].offset - offset;        //size of rootfs aligned to nvram offset 
    340361#ifdef CONFIG_AR9100 
    341                                         dir_parts[1].offset = 0x40000; 
     362//                                      dir_parts[1].offset = 0x40000; 
    342363                                        dir_parts[1].size = (dir_parts[2].offset - dir_parts[1].offset) + rootsize; 
    343364                                        break; 
Note: See TracChangeset for help on using the changeset viewer.