本帖最后由 天涯 于 2009-9-3 16:34 编辑
最近准备在board.c中加入一个读取flash任意offset数据的功能。
一直在坛子里问说有没有办法不安装ejtag读取整个Flash的内容。但是没有人回答。
现在自己分析了kernel之后发现根本没有办法。
所以自己改个程序是唯 ...
icewalkleader 发表于 2009-8-31 10:24 
如果只是想读取整个flash的内容,最好的办法是重新做个mtd mapping驱动模块,加载以后用dd就可以dump整个flash内容。
hugebird 发表于 2009-8-31 11:17 
https://www.chinadsl.net/thread-19482-1-1.html这个帖子中提到的办法,我看过那个网站,找到如下代码,供各位需要的朋友参考.
- /*
- * 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
- */
- #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 *mymtd;
- __u8 brcm_physmap_read8(struct map_info *map, unsigned long ofs)
- {
- return __raw_readb(map->map_priv_1 + ofs);
- }
- __u16 brcm_physmap_read16(struct map_info *map, unsigned long ofs)
- {
- return __raw_readw(map->map_priv_1 + ofs);
- }
- __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)",
- buswidth: 2,
- read8: brcm_physmap_read8,
- read16: brcm_physmap_read16,
- read32: brcm_physmap_read32,
- copy_from: brcm_physmap_copy_from
- };
- int __init init_brcm_physmap(void)
- {
- printk("Trying to map whole flash\n");
- brcm_physmap_map.size = 0x200000;
- brcm_physmap_map.map_priv_1 = 0xBFC00000;
- mymtd = do_map_probe("map_rom", &brcm_physmap_map);
- if (mymtd) {
- mymtd->module = THIS_MODULE;
- add_mtd_device(mymtd);
- return 0;
- }
- return -ENXIO;
- }
- static void __exit cleanup_brcm_physmap(void)
- {
- if (mymtd) {
- del_mtd_device(mymtd);
- map_destroy(mymtd);
- }
- 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");
复制代码 |