Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » Документация » Програмный ремонт жёстких дисков HDD |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 ... 43 44 45 46 47 * 48 49 50 51 .. 75 76 77 78 79 80 | Печать |
KALDYH
Advanced Member
Технонекромант Откуда: Кемерово Всего сообщений: 2355 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 5 июня 2009 |
На этом я, пожалуй, закончу свои исследования коннеров. Осталось только выложить результаты и проект для тех, кто желает покопать его за меня дальше. Вот образ памяти, с которым я работал: https://drive.google.com/file/...sp=sharing Файл проекта IDA: https://drive.google.com/file/...sp=sharing Дамп снимал программой https://drive.google.com/file/...sp=sharing под досом , в принципе можно написать тупой скрипт побайтового чтения для ST_MEM. Аппаратная часть Плата Conner семейства Jaguar состоит из следующих компонентов:
Краткое введение в процессорную архитектуру Motorola 68HC11 Семейство МК было представлено в 1985 году, представляет собой дальнейшее развитие 6800. Архитектура - фон-неймановская, что необычно для МК. Адресное пространство - 64к, порты ввода-вывода мапятся на память. Регистры: - два 8-разрядных аккумулятора A и B, которые могут объединяться в один 16-разрядный регистр В - два 16-разрядных регистра X и Y - 16-разрядные регистр стека SP и счётчик команд PC Набор команд - типичный. Есть целочисленные умножение и деление. Набор периферии - типичный: порты, таймеры, UART (SCI), прерывания. Внутрення память может включать в себя области ROM, RAM, EEPROM, конкретное расположение областей зависит от модели. Особенность - первые 256 байт памяти могут использоваться для быстрого доступа (два байта на команду: 1 байт команда и 1 байт адрес). Карта адресного пространства По итогам анализа была получено следующее распределение адресов:
Методика дизассемблирования Работать с IDA я не умею, поэтому учился на ходу. Действовал так: Запускаем IDA, выбираем Disassemble a new file. Выбираем считанный 64кб дамп. Выбираем тип процессора Motorola MC6811, остальное не трогаем, нажимаем OK. На следующей странице также нажимаем ОК. Далее нужно выбрать модель микроконтроллера. Подходящего по параметрам там нет (я попытался написать свой конфиг, но не преуспел), поэтому просто нажимаем Cancel. Я первоначально выбрал произвольный наобум, как показала дальнейшая деятельность - не угадал. Наконец получаем листинг. IDA проводит первичный автоанализ от вектора сброса и находит в нём некоторые функции (выделены голубым и красным), но большая часть дампа в полоске карты раскрашена серым цветом - это данные и цветом хаки - это нераспознанные области. Пора вручную найти всё остальное. Прежде всего разворачиваем свёрнутые в массивы блоки данных. Ставим курсор на блок и нажимаем U. Неопределённые данные в автокомментариях имеют расшифровку своего значения в ASCII - это нам пригодится. Прячем неиспользуемые блоки. Выделяем их (курсор на начало, Alt+L, курсор на конец) и из меню View - Hide. Можно также временно спрятать крупные блоки данных. Переключаемся на вкладку Hex View и визуально находим в нём тестовые строки. Устанавливаем курсор на начало блока и переключаемся обратно в IDA View. Выделяем строку от начала до конца и нажимаем A - строка преобразуется в текстовую константу с автосгенерированным именем. Проходим таким образом по всем дампу. Замечание: Формат срок - сишные, нуль-терминированные (выделять вместе с нулём). Большинство строк оканчиваются кодом перевода строки $D. Переменные в выводимую строку вставляются управляющими кодами: 02 xx - напечатать байт переменной xx от смещения 1000 06 xx - то же самое, без лидирующих нулей 08 xx - вывести байт как символ Ну а теперь ищем код. Замечание по структуре программы: массивы и строковые константы располагаются сразу за подпрограммой. Большинство подпрограмм оканчиваются командой rts - это байт $39 или rti - $3B Ставим курсор на любой неопределённый блок и нажимаем C - IDA разворачивает этот участок и всё, на что ведут переходы, в код. Разворачиваются целые блоки, так что процесс идёт быстро. Смотрим, похоже получилось или непохоже. Если на что-то осмысленное непохоже - разопределяем обратно клавишей U. Для быстрого перехода далее используйте Ctrl-U Пройдясь так по всему дампу, находим большую часть кода и относящихся к нему данных (на них появятся метки). Теперь займёмся кодом. Смотрим на слова, подсвеченные красным (о байтах позже). Как известно, регистры X и Y - индексные, поэтому то, что грузится в них командами ldx и ldy - скорее всего указатели. Если навести мышь на число, показывается, куда он ведёт. Ставим курсор на слово и нажимаем O - значение преобразуется в указатель. Делаем так для всего, что похоже на указатели в ПЗУ (числа более 2000) и в ОЗУ/EEPROM (от 1000 до 2000), более мелкие пока не трогаем. Далее займёмся байтами. Замечание: для работы с переменными в ОЗУ в подавляющем большинстве случаев используется индексная адресация через регистр X, который большую часть времени хранит константу $1000. Исходя из этого, увидев команду с аргументом вида $число, x можно с уверенностью утверждать, что на самом деле она ссылается на адрес ($1000+$число). Как показать это наглядно? Ставим курсор на байт, нажимаем Ctrl+R. Выставляем Type - OFF16, Base Address - 0x1000. Адресу 1000 для удобства дадим какую-нибудь метку, например RAM. Напоследок заглянем в область переменных. Ставим курсор на все по очереди и нажимаем X. Если на неё ссылаются в основном команды, работающие с регистрами d, x, y - это слово, если a и b - это байт. Выбираем нужный тип клавишей D. Попробуем определить назначение некоторых функций. Видим, например, что на текстовые строки ссылается команда ldd $DEAD, и сразу за ней идёт jsr sub_BEEF (адреса, разумеется, для примера). Очевидно, что это процедура печати в терминал! Перейдём к ней двойным кликом или Enter и поищем ещё её вызовы комбинацией Ctrl+X. Видите, сколько их много? Теперь можно переименовать её кнопкой N во что-нибудь более понятное и привычное. Про что ещё рассказать? Явные массивы для компактности листинга лучше так и пометить (кнопка в панели инструментов). Разбор кода удобнее вести, давая комментарии (кнопки ":" и ";"). Структура исследовааной микропрограммы Jaguar - 4HT2.61 Информация о диске, извлечённая из прошивки Дорожек - 0x717 Головок - 0x04 Секторов - 0x2E Микропрограмма подходит к следующим моделям: Тип A0 - 4 головы, 716h дорожек "Conner Peripherals 170MB - CP30171E " feature бит 1 = 1 "Conner Peripherals 170MB - CP30174E " feature бит 1 = 0 Тип A1 - 4 головы, 514h дорожек "Conner Peripherals 120MB - CP30121E " feature бит 1 = 1 "Conner Peripherals 120MB - CP30124E " feature бит 1 = 0 Тип A2 - 2 головы, 716h дорожек "Conner Peripherals 85MB - CP30081E " feature бит 1 = 1 "Conner Peripherals 85MB - CP30084E " feature бит 1 = 0, feature бит 40 = 0 "Conner Peripherals 80MB - CP30084E " feature бит 1 = 0, feature бит 40 = 1 Зонного распределения, предположительно, нет (по графику чтения не проверял) Системные дорожки - 4..7, начиная с 8 идут пользовательские Кодовых оверлеев нет Калибровки и адаптивы хранятся в EEPROM Буферы образуют отдельное адресное пространство, микроконтроллер имеет доступ к нему только через порты цирруса. Переменные: (для удобства - только последний байт) 00 - Pgm 01 - error code 02 - Pwr error 03 - Type 04,05 - Health 06,07 - Features 08,09 - состояние шпинделя 14,15 - текущий сектор 16,17 - временный регистр X 18,19 - Cyl 1A - Head 1B - Sect 1C,1D - Sec Count 1E,1F - Rel 20,21 - Xfr 22,23 - Err 26 - Ef 27 - Rw 2A - Spin lock 2C - State flags 2E,2F - Max cyl 30,31 - Min cyl 32 - Max head 35,36 - цилиндр, на который нужно спозиционироваться 37 - ...головка 38 - ...сектор 3D,3E - Spin 4D - Servo Gain 4E - AB 50 - Itg 58 - Offtrack error 59 - GC err 5C,5D - Grey 61 - Servo Threshold 68 - CD 8B - Rf 89,8E,8F,90 - Retry control (rd.hdr.wrt) 92 - Rc 93 - Mf 94 - Error log num 95 - выводимый level 96,97 - внутрикомандная временная переменная 98,99 - второй операнд команды 9A,9B - третий операнд команды 9С - флаг проверки вызова команды: 1 - foreground прерван 2 - есть первый аргумент 4 - есть второй аргумент A0,A1 - A2 - test space A3 - error.3 AE - display flags E0-F0 - какой-то временный массив на 16 байт Данные в EEPROM Каждая байтовая переменная хранится в трёх байтах. Первый байт как есть, второй - инвертированный байт, третий - XOR AA (10101010). Полагаю, сделано для надёжности и помехозащищённости. 1E00 - Age 1E03 - Type 1E06 и 1E09 - Feature (старший и младший байты соотв.) 1E10 и 1E13 - Health Далее идут константы: 1E20-1E3F - массив адаптивов (16 слов) 1E40-1E6A - серийник 1E82-1E8E - Barcode S/N 1EF0-1EFA - PCB S/N С адреса 1F00 и до конца располагается место для пользовательских пакетных файлов. Таблицы Найденные массивы табличных данных (как их оформлять в структуры - я не разобрался): Команды: 889D - таблица переходов по уровням. Записи по 4 байта: первый - вводимый номер уровня, второй - выводимый в строке приветствия символ, 3-4 - указатель на таблицу команд данного уровня минус 3 (цикл поиск в таблице пред-инкрементный, поэтому минус) 883D - команды для всех уровней 8995 - команды уровня 1 8C9E - команды уровня 2 92C2 - команды уровня 3 A423 - команды уровня 4 ABBE - команды уровня 6 AEFA - онлайн-команды B406 - команды уровня T Записи по 3 байта: байт символа команды, за ним слово адреса вызываемой подпрограммы. Селфскан 7B3F - последовательность тестов селфскана (массив 40h байт) 7B7F - массив 41h указателей на последовательности подпрограмм для каждого номера теста (нумерация линейная, от 0 до 40) Прочие A237 - массив указателей на текстовые строки расшифровки битов ошибок. Сами строки - сразу за ним. B537 - таблица расшифровки битов health. Элементы по 4 байта: битовая маска, затем 0, потом ссылка на строку расшифровки. 6D33 - таблица типов накопителя (указатель на неё ведёт на 4 байта раньше). Элементы по 4 байта: байт типа, байт числа головок, слово числа дорожек. DAB3 - выводимые в паспорте имена моделей Подпрограммы Передача параметров в функции - через регистры, если часть параметров не вмещается - через переменные. Процедуры обработки команд На входе: регистровая пара d - первый аргумент, переменные 98 и 9A - второй и третий. Наличие аргументов проверяется анализом битовой переменной 9С. На выходе: d - указатель на выводимое сообщение об ошибке либо a - код ошибки. Подпрограммы ввода и печати Находится по адресу 2506, еще одна - по адресу 25F0 На входе: d - указатель на начало выводимой строки. Формат строк - см. выше. Связанные подпрограммы: 2434 - приём одиночного символа, результат - в регистре a 2459 - печать одиночного символа из регистра a 2549 - использует входной регистр x 25F9 - помещает сообщение по адресу d в очередь на вывод Контрольная сумма ПЗУ защищено контрольной суммой. Считается по адресам 1000-1200, 1E00-2000 и 2000-FFFF вместе. В процессе дополнения... | ||||||||||||||
strelec
Newbie
Откуда: Кемерово Всего сообщений: 105 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 3 апр. 2018 |
Приветствую. Винт seagate 7200.10 , NHPLUS2HD. Запустил селф с N2.На 13 тесте долго не реагировал на"." Подумал, что завис.Передернул питание, селф не стартовал после подачи питания. Выходит только на уровень F>Pgm=00 Trk=0001690A(0001690A[0180F8]).0(0).01E(01E) Zn=FF Err=00 ErCt=0000 Hlth=0000 CHlth=0000 Ntrdy LBA=00000000. Как правильно запустить селф опять? |
KALDYH
Advanced Member
Технонекромант Откуда: Кемерово Всего сообщений: 2355 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 5 июня 2009 |
strelec, посылаем ему App по кабелю, считываем системный сектор, проверяем - Age должен показывать 13, cert code и cert table должны быть на месте. |
strelec
Newbie
Откуда: Кемерово Всего сообщений: 105 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 3 апр. 2018 |
KALDYH, запустился.Спасибо. У диска наработка была более 60т.ч. Переназначенных секторов ок. 100. Интересно, пройдет или нет селф с таким пробегом ) |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 16 мая 2018 14:51 Сообщение отредактировано: 16 мая 2018 15:09
KALDYH, отличное расследование Conner-ов, спасибо! Думаю, мне очень пригодится! strelec, а какое бвло состояние Вашего коршуна до скана? |
strelec
Newbie
Откуда: Кемерово Всего сообщений: 105 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 3 апр. 2018 |
i8088, К сожалению, не сохранил смарт. Винт, похоже работал в организации круглосуточно. Чтение-запись приличная в начале диска.Но провалы есть.Даже не стал прогонять весь диск.Не терпелось запустить скан!)) |
strelec
Newbie
Откуда: Кемерово Всего сообщений: 105 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 3 апр. 2018 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 17 мая 2018 9:25 Сообщение отредактировано: 17 мая 2018 9:47
NHPLUS2HD селфскан прошел успешно.Все тесты пройдены без ошибок[Log 4E - Health 0000 - HlthDtl 0000]. Чтение -хорошо. При записи есть "зеленые" блоки.Около 60шт. Прогнал пару раз. Смотрю в сторону команды G7,3. Оставить как есть или пробовать запускать скан с N2 еще раз? |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
strelec написал: Поздравляю! Насколько я понял из чтения форумов, коршуны чаще других заваливают скан, NHPLUS2HD селфскан прошел успешно.Все тесты пройдены те хорошо что прошел, и притом с нулевым Health 0000. Я бы оставил как есть (да и жалко мучать еще раз видавшую виды механику), а если блоки с задержками появляются в разных местах, то вообще не проблема. G7,3 не повредит, но сразу после успешного скана думаю смысла в ней нет. Запись с проверкой задержек я вообще не проверял никогда. А на верификации он как, он дает неравномерный график чтения или пониженную скорость (здесь писалось что для них так нормально)? |
KALDYH
Advanced Member
Технонекромант Откуда: Кемерово Всего сообщений: 2355 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 5 июня 2009 |
i8088 написал: А из моего личного опыта - всё успешно (правда, я всегда делаю с самой новой из всех прошивок). Насколько я понял из чтения форумов, коршуны чаще других заваливают скан i8088 написал: Тю, ей в обыденной работе гораздо больше достаётся. (да и жалко мучать еще раз видавшую виды механику) |
strelec
Newbie
Откуда: Кемерово Всего сообщений: 105 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 3 апр. 2018 |
i8088 написал: Так и есть. а если блоки с задержками появляются i8088 написал: Действительно, график на [verify] скачет достаточно сильно.На [read] плавный, без провалов. А на верификации он как, он дает неравномерный график чтения или пониженную скорость (здесь писалось что для них Ну значит, не буду мучить, раз лучше не станет. |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 ... 43 44 45 46 47 * 48 49 50 51 .. 75 76 77 78 79 80 | Печать |
Полигон-2 » Документация » Програмный ремонт жёстких дисков HDD |
0 посетителей просмотрели эту тему за последние 15 минут |
В том числе: 0 гостей, 0 скрытых пользователей |
Последние | |
[Москва] LIQUID-Акция. Сливаются разъемы CF МС7004 и 7004А на AT и XT Пайка термотрубок Проммать s478 PEAK 715VL2-HT ( Full-Size SBC) Подскажите по 386 материке по джамперам. |
Самые активные 5 тем | |