Перейти к содержанию
    

Метценгерштейн

Свой
  • Постов

    1 563
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Метценгерштейн

  • Звание
    Профессионал
    Профессионал
  • День рождения 07.05.1978

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Посетители профиля

6 153 просмотра профиля
  1. Наверное, нужен др подход. Я чуть может ввел в заблужение. Еще раз. Прошивка заканчивается 0x0001e194 - 1 И я хочу внешним софтом положить к концу ее некий кусок данных. Потом считать его самой прошивкой. И вот мап, где ОЗУ существенно залезает аж внутрь флеш памяти, соответственно, перетирает записанное мной. Надо скатер может настроить вот он: LR_IROM1 0x00000000 { ; load region size_region ER_IROM1 0x00000000 { ; load address = execution address *.o (NUC_INIT, +First) *(InRoot$$Sections) .ANY (+RO) } RW_RAM1 +0 { ; RW_RAM1 start address is after ER_ROM1 .ANY (+RW +ZI) } } Даже здесь видно что ОЗУ сразу должно идти за флеш, но оно залазит внутрь. Строчка RW_RAM1 +0 замену на RW_RAM1 +32- идет ошибка, то что-то там с ОЗУ не то будет, данные потеряются. В общем, пока не очень понятно
  2. Если так можно, то это решит вопрос. Проговорим- массив в коде объявлен, объявление участвует в хешировании. Но содержимое его никак не влият на хеш. Только если можно, попрошу пример как это делается. Тогда можно самой прошивкой себя обсчитывать и записывать в этот массив. Но пока как-то расплывчато все равно.
  3. можно попросить раскрыть подробности? Скрипт линкера- это .sct файл? Тогда в коде прошивки как это будет выглядеть? Объявляю массив по адресу, что в линкере не учитывается?
  4. Думаем. Решаема. Скорее, надо считать хеш внутри самой прошивки и положить куда-то туда, где он будет вне прошивки. Внешняя флеш- может как вариант. Но как только я объявляю массив с __attribute__ и указывваю на его размещение, не войдет ли этот массив в состав прошивки?
  5. Все равно еще не улавливаю мысли как сделать. есть прошивка от 0 до 0x0001E194 B хэш я считаю именно ее, без таблицы векторов и прочего.
  6. Спасибо. А если усложнить тем, что моя КС- это 32 байта? Тут как поступить? Еще раз, мне не CRC32 надо. Мне хэш всего и сразу. Его нельзя по кускам посчитать.
  7. Алгоритм- хэш сумма. Не важно, MD5 или что. Там блоками не считают. Сразу всё. И посчитать надо как-то без самого вкрапления в прошивку этой суммы- исказит результат
  8. Картина начинает вырисовываться. Только мне не CRC надо, а хэш. Там один бит поменял, хэш совсем другой. А коллега выше постом что говорит? Вот не могу его мысль уловить как сделать.
  9. при том, что я имею прошивку, где конец ее до 0x0001E194. Т.е. 0x0001E193- полседний байт прошивки. Со 0x0001E194 добавляю руками КС. А по мапу получается, что-то дописывает ко мне и перетирает? Получается, моя задача- стандартная- много когда нужна КС прошивки? а вектора эти- они не участвуют в теле прошивки? Т.е. при подсчете КС, не будут посчитаны?
  10. проверяю. пока не понял как это. Тут еще проблема, чтобы при подсчете КС именно этот массив не принимал участие в подсчете. Исключить его из тела прошивки. Иначе- никогда не сосчитать будет КС
  11. Открыл мар файл. Еще раз, что там посмотреть можно? Не размера только, а ее КС. Я КС добавляю руками, уже к готовому .bin файлу прошивки. Т.о. всегда после самой прошивки
  12. Открыл сейчас дамп памяти МК и свою прошивку. Похоже, что да, затирает как раз. Сумма была добавлена просто в ручную к прошивке. И при старте, скорее, доходит до символов, что это конец прошивки и не грузит ее в память больше. Т.о. в ОЗУ МК нет того куска кода добавленного в ручную. Есть только до места, пока не добавляли. Читать да, можно просто по указателю памяти- соответствует ОЗУ и сам файл прошивки.
  13. 0x0001E194 это конец прошивки, и начало адреса данных, где начинается контрл сумма- с этого адреса. Мне ее надо прочитать Но вот не пойму, прошивка есть. Льем в МК, там флеш нет, если только внешнее, есть ОЗУ, где прошивка и располагается. Как непосредственно читать куски прошивки?
  14. Есть прошивка. Есть контрл. сумма, лежащая в конце ее по опред. адресу. Как ее прочитать? static int ReadHash(unsigned int hashAddr, unsigned char *hashBuf, unsigned int hashLength) { unsigned char *hashPtr; if (hashBuf == NULL || hashLength == 0) return -1; hashPtr = (unsigned char *)hashAddr; memcpy (hashBuf, hashPtr, hashLength); return 0; } такой способ не работает. Похоже, из ОЗУ читает.
  15. Наверное, тут я плыву. Регион загрузки из скатер файла берется. И ему без разницы, где лежит прошивка - ОЗУ или флеш? По- другому спрошу- регион загрузки- это что тогда такое? Вот нет у него флеш.
×
×
  • Создать...