В продолжение темы eMMC Life Time Estimation - #5 от пользователя Aleksandr_Khlebnikov
прошу пользователей прислать скриншот виртуального устройства my_wirenboard/wb-rules/eMMC_Life_Time_Estimation/eMMC_Life_Time_Estimation.js at main · HexProf/my_wirenboard · GitHub
В выводе нет никаких персональных данных. Я собираю соответствие ID микросхем памяти eMMC и ревизии железа контроллера. Для того, чтобы сделать человекопонятное виртуальное устройство, которое будет предупреждать о приближающихся проблемах с флешкой контроллера.
Текущая реализация показывает в “заводских попугаях”. Я же хочу сделать нормальный вывод в понятной форме с алертом при наступлении критического значения.
Присылать или сюда или в телеграм hexprof или на почту me@hexprof.ru Куда удобнее.
Спасибо за Ваш вклад.
Добрый день.
Насколько я понимаю нужны
root@wirenboard-AYK5U4TB:~# cat /sys/block/mmcblk0/device/manfid
0x000032
root@wirenboard-AYK5U4TB:~# cat /sys/block/mmcblk0/device/name
MMC64G
Ну и партия, то есть
8.5.1B/2G 1.2C-2G
А данные из базы для этого не подойдут?
Там про флешку есть например
Name Field # CID_Slice
Manufacturer ID MID 8 [127:120] = 0x32
Reserved 6 [119:114] = 0x00
Device/BGA CBX 2 [113:112] = 0x1
OEM/Application ID OID 8 [111:104] = 0x01
Product name PNM 48 [103:56] = 0x4d4d43363447
Product revision PRV 8 [55:48] = 0x51
Product serial num PSN 32 [47:16] = 0xdab99be1
Manufacturing date MDT 8 [15:8] = (0x4b) 4 - 2024
CRC7 checksum CRC 7 [7:1] = 0x04
not used, always 1 1 [0:0] = 0x1
Да, и их соответствие аппаратной платформе. Но глобально - только они, так как по ним будет делаться выборка результата.
Там нет name, а по нему мне гуглить даташит.
Я просто оформил это как виртуальное устройство для упрощения пользователям. Вирт сделать проще, чем командная строка. Ну не для всех, конечно.
Вот:
| NULL | NULL | NULL |
|---|---|---|
| 008G70 | ХХ | 7.3.3E/3 669/1 |
| 008GB0 | ХХХ | 7.3.3E/6 667/1 |
| 58A43A | ХХХ | 7.4.3G/1G1 1D/L-2GS |
| 88A19C | ХХХ | 7.3.4B/2 679 |
| 88A398 | ХХХХХХХ | 7.3.4L/4 1D/E-1G |
| AJTD4R | Х | 8.4.4D/2G 1.2C-2G |
| AS08FC | ХХХХ | 7.3A_Test 637 |
| CJTD4R | ХХ | 7.3.3B/4 648 |
| CS004 | ХХХХ | 7.3.4E/7 1D/A |
| DG4008 | ХХХХХ | 7.3B/1 637 |
| IX2964 | ХХХ | 7.3B/2GI 633 |
| JS08AC | ХХХ | 7.3.4K/3 1D/E-1G |
| MMC64G | ХХХХХ | 7.3B/2GC 636 |
| Q2J55L | ХХХ | 7.2.1A 576 |
| SLD64G | ХХ | 7.3.4B/3 677 |
Количество я убрал. Это для WB7.
Вот я слепой. Вот же имя в ASCII.
А это что за база? У mmc другой формат вывода
База тестов. Вот тут про это немного.
То есть любое устройство тестируется, результаты тестирования складываются в SQL. Правда данные флешки в blob, но тоже можно посмотреть.
Спасибо! А Manufacturer ID можно в эту же табличку?
Я просто не знаю в пределах одного производителя данные одинаково интерпретируются или нет.
| NULL | NULL | NULL |
|---|---|---|
| 008G70 | 7.3.3E/3 669/1 | 8 [127:120] = 0x11 |
| 008GB0 | 7.3.3E/6 667/1 | 8 [127:120] = 0x11 |
| 58A43A | 7.4.3G/1G1 1D/L-2GS | 8 [127:120] = 0xd6 |
| 88A19C | 7.3.4B/2 679 | 8 [127:120] = 0x88 |
| 88A398 | 7.3.4L/4 1D/E-1G | 8 [127:120] = 0xd6 |
| AJTD4R | 8.4.4D/2G 1.2C-2G | 8 [127:120] = 0x15 |
| AS08FC | 7.3A_Test 637 | 8 [127:120] = 0x52 |
| CJTD4R | 7.3.3B/4 648 | 8 [127:120] = 0x15 |
| CS004 | 7.3.4E/7 1D/A | NULL |
| DG4008 | 7.3B/1 637 | 8 [127:120] = 0x45 |
| IX2964 | 7.3B/2GI 633 | 8 [127:120] = 0x70 |
| JS08AC | 7.3.4K/3 1D/E-1G | 8 [127:120] = 0xf2 |
| MMC64G | 7.3B/2GC 636 | 8 [127:120] = 0x32 |
| Q2J55L | 7.2.1A 576 | NULL |
| SLD64G | 7.3.4B/3 677 | 8 [127:120] = 0x88 |
Поиграл с substring_index для blob, почти выиграл. После “=” он и есть.
Спасибо огромное!
Я так понимаю никакой закономерности от номера партии. Полный random() ![]()
Но это собственно и не важно. Я думал есть взаимосвязь. Нет. Значит только manfid и name достаточно проверять.
Нет, такого чтобы в одной партии были разные emmc - такого нет.
Я немного другое имел ввиду. Номер партии для данной задачи и бесполезен (избыточен). Достаточно производителя и имя. Больше ничего не нужно. И не важно в какой партии.
По итогу выяснилось, что все микросхемы, на которые я нашел даташит, поддерживают стандарт 5.0 и выше, что означает единые значения регистров “старости”. Старые платформы типа 6.х и <7.3 надо смотреть. Просьба остается для них и для тех, у кого Chip пишет Unknown.
Когда значения превысят допустимо разумные (можете поправить в скрипте), соответствующий алерт станет красным.
Кто установил, обновите, пожалуйста.
case 0x00: {s_emmc_eol = "Fine: consumed 100% of the reserved blocks"; break; b_emmc_eol = false;}
Тут д.б. не 100%, как мне кажется )
Кроме этого disableRule не работает: ERROR: [rule error] invalid disableRule call
Следует присвоить переменной идентификатор правила, а потом отключать его по этой переменной:
var emmc2_cron1s = defineRule("emmc2_cron1s", {
when: cron("@every 1s"),
then: function () {
emmc_start();
if((dev["emmc2/id#error"] == "") && (dev["emmc2/esta#error"] == "") && (dev["emmc2/estb#error"] == "") && (dev["emmc2/eol#error"] == "")){
disableRule(emmc2_cron1s);
}
},
})
Да, спасибо. Я недоглядел при копипасте.
Точно. В логи посмотрел, а в journalctl нет.
@alex_rvr, спасибо большое. Все поправил.
К сожалению я так и не нашел что же за производитель eMMC с MID=0x32. В моих контроллерах другая память. Так бы разобрал бы уже посмотрел.
Скрипт обновлен на гитхабе. Перескачайте.
Спасибо. Тоже 0x32.
Флешка живая.
Panasonic 00110010







