#1 16/09/2007 00:24:22

SGDA
Pachyderme
Lieu: 95170
Date d'inscription: 28/08/2007
Messages: 8462

Dumper la flash

J'ai voulu appliquer les recettes que je connaissais pour dumper la flash

1°)  sous telnet (nécessite d'avoir soit nc, soit un httpd indépendant)
mapper la flash suivant la technique de
http://www.piccato.it/openwgate/backup_ … g_del_dump
mais le module ne veut pas se monter (erreur 6)
(nota 1: la version magic d'un module montable est 2.6.8.1 preempt gcc-3.4 il faut donc modifier le version.h du kernel proposé par efixo quand on le compile)
nota 2: pour charger un fichier sur la box avec un accès telnet le très efficace octify.py de http://skaya.enix.org/wiki/KernelChmod est très utile)

A la relfexion c'est sans doute l'adresse privée qui est fausse
brcm_physmap_map.map_priv_1 = 0xBFC00000;  (0XBF000000 ??)


Code:

/*
 * A simple flash mapping code for BCM963xx board flash memory
 * It is simple because it only treats all the flash memory as ROM
 * It is used with chips/map_rom.c
 *
 *  Song Wang (songw@broadcom.com)
 *  Modified by J. Petazzoni to map whole flash memory for dumping purposes
 *  Modified by Titan for CIBox with 4MB Flash & adapted to kernel 2.6.x (05/09/06)
 *  Modiifed by SGDA for NB4Box with 8MB Flash
#include <asm/bcm963xx/board.h>
#include <asm/bcm963xx/bcmTag.h>
 */

#include <linux/module.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <asm/io.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/map.h>
#include <linux/config.h>
/*
#include <asm/bcm963xx/board.h>
#include <asm/bcm963xx/bcmTag.h>
*/
static struct mtd_info *my_mtd;
/*
__u8 brcm_physmap_read8(struct map_info *map, unsigned long ofs)
{
    return __raw_readb(map->map_priv_1 + ofs);
}
*/

static map_word brcm_physmap_read16(struct map_info *map, unsigned long ofs)
{
       map_word val;
       val.x[0] = __raw_readw(map->map_priv_1 + ofs);
       return val;
}

/*
__u32 brcm_physmap_read32(struct map_info *map, unsigned long ofs)
{
    return __raw_readl(map->map_priv_1 + ofs);
}
*/
void brcm_physmap_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len)
{
    memcpy_fromio(to, map->map_priv_1 + from, len);
}

struct map_info brcm_physmap_map = {
    name: "Physically mapped flash (whole)",
    bankwidth: 2,
    read: brcm_physmap_read16,
    copy_from: brcm_physmap_copy_from
};

int __init init_brcm_physmap(void)
{
        printk("Trying to map whole flash(8MB)\n");
    brcm_physmap_map.size = (8 << 20);
    brcm_physmap_map.map_priv_1 = 0xBFC00000;

    my_mtd = do_map_probe("map_rom", &brcm_physmap_map);
    if (my_mtd) {
        my_mtd->owner = THIS_MODULE;
        add_mtd_device(my_mtd);

        return 0;
    }

    return -ENIO;
}

static void __exit cleanup_brcm_physmap(void)
{
    if (my_mtd) {
        del_mtd_device(my_mtd);
        map_destroy(my_mtd);
    }
    if (brcm_physmap_map.map_priv_1) {
        brcm_physmap_map.map_priv_1 = 0;
    }
}

module_init(init_brcm_physmap);
module_exit(cleanup_brcm_physmap);

/*
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Song Wang songw@broadcom.com");
MODULE_DESCRIPTION("Configurable MTD map driver for read-only root file system");
*

2°) Utiliser la fonction commande dumpmem sous shell (nécessite juste l'accès telnet)
dumpmem  0xbf010100 256   (adresse longueur en décimal)
le résultat est dans le log kernel
donc relancer le syslog en envoyant log kernel vers l'extérieur et le récupérer avec un syslogger externe.
cela fonctionne...mais on perd trop de données (fonctionne très sous CI.Box

3°) utiliser la fonction memshow sous CFE (facile)
memshow 0xbf010100 100 (adresse longeuer en hexa)
fonctionne mais je ne dois pas taper dans les bonnes adresses
OK de 0xbf000000 à 0xbf006500 et idem décalé de 8M


Seule information valorisable, dans l'état actuel de ma flash elle démarre à l'adresse 0xbf00000 avec le CFE
0xbf010000  entête de l'image
0xbf010100 début du sqsh de l'image
je n'ai pas vérifié plus loin
et il y a la copie (ou l'original) 8M plusloin
0xbf800000 CFE
0xbf810000 entête
etc..

je serai absent peut-être qu'à mon retour on aura une image de la flash complète. L'idéal serait à partir du CFE car ainsi rien n'aurait été modifié

Dernière modification par SGDA (16/09/2007 07:38:46)


XP Pro/Fedora 19 (Schrödinger's cat)

Hors ligne

 

#2 20/09/2007 10:29:53

goundoulf
Administrateur
Date d'inscription: 21/08/2007
Messages: 4607
Site web

Re: Dumper la flash

J'étais parti dans la même direction que toi, mais en fait y'a plus simple :

Pour sauvegarder le CFE dans '''CFE.bin''' :

Code:

[root@Lost /var] cat /dev/mtdblock0 > /var/CFE.bin

Et ainsi de suite pour les autres mtdblock

http://www.neufbox4.org/wiki/index.php? … h#Avec_cat

Hors ligne

 

#3 20/09/2007 16:33:29

goundoulf
Administrateur
Date d'inscription: 21/08/2007
Messages: 4607
Site web

Hors ligne

 

#4 20/09/2007 16:44:52

goundoulf
Administrateur
Date d'inscription: 21/08/2007
Messages: 4607
Site web

Re: Dumper la flash

par contre à partir de CFE tu fais comment pour récupérer le dump ?

Hors ligne

 

Pied de page des forums