참고 : https://www.flashrom.org/Development_Guidelines#Adding.2Freviewing_a_new_flash_chip
내가 만들 chip : MX25L3233F
참고 chip : MX25L3273E
git 을 통해 https://github.com/flashrom/flashrom 를 설치한다. flashrom 에서 현재 지원되지 않는 칩의 경우 추가할 수 있는데, 그 방법을 확인해보고 해보았다.
새로운 칩 정보를 넣는 방법은 아래 링크에 자세히 써있다.
https://www.flashrom.org/Development_Guidelines#Adding.2Freviewing_a_new_flash_chip
저 링크의 내용을 따라 새로운 칩 정보를 넣어본것을 아래에 정리해본다.
3. First, find the best* IDs in the datasheet (*FIXME: this needs to be explained together with the probing somewhere else in detail) and check if the ID exists in flashchips.h already
>> #define MACRONIX_MX25L3205 0x2016 이런식으로 되어있는데, 여기서 0x2016의 의미는 데이터 시트에 보면 ID Definitions 값 중 RDID 값이 있다. 앞부분 1비트는 장비 제조사 비트, 다음 2비트가 모델 비트다. 여기에 RDID 2번째 비트 값을 의미한다.
7. We encode various features of flash chips in a bitmask named .feature_bits. The various possibilities can be found in flash.h.
>> MX25L3273E에 FEATURE_WRSR_WREN | FEATURE_OTP,로 되어있고, DataSheet에 otp 검색하니까 있어서 똑같이넣음
8. .tested is used to indicate if the code was tested to work with real hardware, its possible values are defined in flash.h. Without any tests it should be set to TEST_UNTESTED.
>> TEST_UNTESTED 로 설정
9. .probe indicates which function is called to fetch IDs from the chip and to compare them with the ones in .manufacture_id and .model_id. This requires some knowledge or source reading. For most SPI flash chips probe_spi_rdid is the right one if the datasheets mentions 0x9f as an identification/probing opcode.
>> 9f 검색하니까 rdid 커맨드 지원해서 그대로 납둠
11. .block_erasers stores an array of pairs of erase functions (.block_erase) with their respective layout (.eraseblocks).
- .block_erase is similar to the probing function. You should at least check that the opcode named in the function name is matching the respective opcode in the datasheet.
>> Block Lock Protection에 있는 정보를 비교해서 작성함. 두개의 칩이 같은 내용이 적혀있어 그대로 진행...
13, .unlock is called before flashrom wants to modify the chip's contents to disable possible write protections. It is tightly related to the .printlock function as it tries to change some of the bits displayed by .printlock.
>> 잘 모르겠음..ㅠㅠ 일단 그대로 둠
14. .write and .read are function pointers with the obvious meaning. Currently flashrom does only support a single function each. The one that is best supported by existing programmers should be used for now, but others should be noted in a comment if available.
>> 참고 칩의 256이 page 단위길래 검색했더니 같음. read도 0x0b로 fastread 값이 동일함
15. .voltage defines the upper and lower bounds of the supply voltage of the chip. If there are multiple chip models with different allowed voltage ranges, the intersection should be used and an appropriate comment added.
>> minimum, maximum 값이다. 동일함
flashchips.c 에 수정한값.
{
.vendor = "Macronix", /*HANA*/
.name = "MX25L3233F",
.bustype = BUS_SPI,
.manufacture_id = MACRONIX_ID,
.model_id = MACRONIX_MX25L3205,
.total_size = 4096,
.page_size = 256,
/* OTP: 64B total; enter 0xB1, exit 0xC1 */
.feature_bits = FEATURE_WRSR_WREN | FEATURE_OTP,
.tested = TEST_UNTESTED,
.probe = probe_spi_rdid,
.probe_timing = TIMING_ZERO,
.block_erasers =
{
{
.eraseblocks = { {4 * 1024, 1024} },
.block_erase = spi_block_erase_20,
}, {
.eraseblocks = { {32 * 1024, 128} },
.block_erase = spi_block_erase_52,
}, {
.eraseblocks = { {64 * 1024, 64} },
.block_erase = spi_block_erase_d8,
}, {
.eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_60,
}, {
.eraseblocks = { {4 * 1024 * 1024, 1} },
.block_erase = spi_block_erase_c7,
},
},
.printlock = spi_prettyprint_status_register_bp3_srwd,
.unlock = spi_disable_blockprotect_bp3_srwd,
.write = spi_chip_write_256,
.read = spi_chip_read, /* Fast read (0x0B) and dual I/O supported */
.voltage = {2700, 3600},
},
이렇게 해서 make 하면 됨..
./flashrom -p linux_spi:dev=/dev/spidev0.0 -V
근데 -V 옵션을 주고 보면 RDID 값을 확인할 수 있는데, 0x00 0x0000 으로 출력되는걸 보니 장비 칩이랑 SPI 통신이랑 원활하게 이루어 지지 않는것같다.
./flashrom -L 하면 방금 추가한 MX25L3233F 도 볼 수 있음.
'임베디드' 카테고리의 다른 글
ubuntu 에 searchsploit, findsploit 설치하기 (0) | 2017.09.01 |
---|---|
kali binwalk 삭제 후 다른버전 설치하기 (0) | 2017.02.15 |
glibc 버전 확인하기 (0) | 2016.03.24 |
lz4 latency 압축 해제하기 (0) | 2015.05.14 |
linux shadow, passwd (0) | 2015.05.13 |