flashrom读写flash bin文件

时间:2021-09-01
本文章向大家介绍flashrom读写flash bin文件,主要包括flashrom读写flash bin文件使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1、设备树中添加spidev0.0


&spi0 {
	/* Disable SPI NOR by default: it optional on Orange Pi Zero boards */
	pinctrl-names = "default";
 	pinctrl-0 = <&spi0_pins>;
 	status = "okay";

	spidev@0{
		compatible = "Allwinner,sun8i-h2-spi0";
		reg = <0>;
		spi-max-frequency = <40000000>;
		
		// 128M spi-nor flash layout
 		partition@00000000 {
 			label = "u-boot";
 			reg = <0x00000000 0x000C0000>;
 		};
 	
 		partition@000C0000 {
 			label = "bootenv";
 			reg = <0x000C0000 0x00020000>;
 		};
 
 		partition@000E0000 {
 			label = "dtb";
 			reg = <0x000E0000 0x00020000>;
 		};
 	
 		partition@00100000 {
 			label = "kernel";
 			reg = <0x00100000 0x00500000>;
 		};
 
 		partition@00600000 {
 			label = "rootfs";
 			reg = <0x00600000 0x00A00000>;
 		};
	};
};  

2、驱动中添加compatiable

3、uboot配置

u-boot/configs/nano_c1_defconfig:

CONFIG_SPI_SUNXI=y
CONFIG_SPL_SPI_FLASH_SUPPORT=y

4、make menuconfig -->utils-配置flashrom包

CONFIG_PACKAGE_flashrom=y

5、(查看读写的flash型号flashrom是否已经添加,没有添加自己需要添加)增加要读写的flash信息(以XMC为例)

//flashchips.c文件


{
		.vendor		= "XinXin",
		.name		= "XM25QH128C",
		.bustype	= BUS_SPI,
		.manufacture_id	= ST_ID,
		.model_id	= ST_XM25QH128C,
		.total_size	= 16384,
		.page_size	= 256,
		/* OTP: 1536B total; read 0x48; write 0x42, erase 0x44 */
		/* QPI: enable 0x38, disable 0xFF */
		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP | FEATURE_QPI,
		.tested		= TEST_OK_PREW,
		.probe		= probe_spi_rdid,
		.probe_timing	= TIMING_ZERO,
		.block_erasers	=
		{
			{
				.eraseblocks = { {4 * 1024, 4096} },
				.block_erase = spi_block_erase_20,
			}, {
				.eraseblocks = { {32 * 1024, 512} },
				.block_erase = spi_block_erase_52,
			}, {
				.eraseblocks = { {64 * 1024, 256} },
				.block_erase = spi_block_erase_d8,
			}, {
				.eraseblocks = { {16 * 1024 * 1024, 1} },
				.block_erase = spi_block_erase_60,
			}, {
				.eraseblocks = { {16 * 1024 * 1024, 1} },
				.block_erase = spi_block_erase_c7,
			}
		},
		/* TODO: 2nd status reg (read 0x35, write 0x31) and 3rd status reg (read 0x15, write 0x11) */
		.printlock	= spi_prettyprint_status_register_bp4_srwd,
		.unlock		= spi_disable_blockprotect_bp4_srwd,
		.write		= spi_chip_write_256,
		.read		= spi_chip_read, /* Fast read (0x0B) and multi I/O supported */
		.voltage	= {2700, 3600},
	},

 定义设备和厂商ID

//flashchips.h文件
#define ST_XM25QH128C 0x4018

6、系统编译成功后会在/usr/sbin下生成flashrom工具

根据一下命令读写:

read flash:    flashrom -p linux_spi:dev=/dev/spidev0.0 -r  flash.bin
write flash:   flashrom -p linux_spi:dev=/dev/spidev0.0 -w  flash.bin

 其他命令也可以flashrom -h去查看

root@OpenWrt:/# flashrom -h
flashrom v1.2 on Linux 5.4.124 (armv7l)
flashrom is free software, get the source code at https://flashrom.org

Usage: flashrom [-h|-R|-L|
        -p <programmername>[:<parameters>] [-c <chipname>]
                (--flash-name|--flash-size|
                 [-E|(-r|-w|-v) <file>]
                 [(-l <layoutfile>|--ifd| --fmap|--fmap-file <file>) [-i <imagename>]...]
                 [-n] [-N] [-f])]
        [-V[V[V]]] [-o <logfile>]

 -h | --help                        print this help text
 -R | --version                     print version (release)
 -r | --read <file>                 read flash and save to <file>
 -w | --write <file>                write <file> to flash
 -v | --verify <file>               verify flash against <file>
 -E | --erase                       erase flash memory
 -V | --verbose                     more verbose output
 -c | --chip <chipname>             probe only for specified flash chip
 -f | --force                       force specific operations (see man page)
 -n | --noverify                    don't auto-verify
 -N | --noverify-all                verify included regions only (cf. -i)
 -l | --layout <layoutfile>         read ROM layout from <layoutfile>
      --flash-name                  read out the detected flash name
      --flash-size                  read out the detected flash size
      --fmap                        read ROM layout from fmap embedded in ROM
      --fmap-file <fmapfile>        read ROM layout from fmap in <fmapfile>
      --ifd                         read layout from an Intel Firmware Descriptor
 -i | --image <name>                only flash image <name> from flash layout
 -o | --output <logfile>            log output to <logfile>
      --flash-contents <ref-file>   assume flash contents to be <ref-file>
 -L | --list-supported              print supported devices
 -p | --programmer <name>[:<param>] specify the programmer device. One of
    internal, dummy, gfxnvidia, drkaiser, satasii, atavia, it8212, ft2232_spi,
    serprog, buspirate_spi, dediprog, developerbox, pony_spi, nicintel,
    nicintel_spi, nicintel_eeprom, ogp_spi, linux_mtd, linux_spi,
    usbblaster_spi, mstarddc_spi, pickit2_spi, ch341a_spi, digilent_spi,
    stlinkv3_spi.

You can specify one of -h, -R, -L, -E, -r, -w, -v or no operation.
If no operation is specified, flashrom will only probe for flash chips.

 

原文地址:https://www.cnblogs.com/yuanqiangfei/p/15215662.html