|
Портирование кода с ПК на ARM926 |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Oct 5 2014, 14:23
|
Местный
  
Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846

|
Цитата(AlexandrY @ Oct 5 2014, 16:04)  Кто ж на линуксе такое делает. Он же весь насквозь дырявый. Там вон даже в bash-е открыли огромную дыру. Больше похоже на то самое "защищенное хранилище", для которого тут полгода назад искали Cortex-M3 на 800 МГц И похоже наконец дело сдвинулось. Спасибо всем за отклики и добрые слова  На всякий случай попробую описать ситуацию подробней. Компилятор - ADS 1.2 build 842 Отладчик - Lauterbach T32 (китайский клон) SoC - Qualcomm MSM6290 Само устройство - 3G-модем. Соответственно, объем Firmware очень большой (исходников под 2 гига), само ПО - многоуровневое и многоступенчатое  , поэтому в "потроха" процессора я лезть не могу и не хочу. Но, думаю, MMU там все же включен  . По поводу операционки - там действительно не линукс, а микроядро L4:Pistachio, поверх простейшей РТОС "REX" (или РТОС поверх микроядра, не знаю как будет правильнее). Что какется размерности типов и порядка байт - буду смотреть. В самой библиотеке вроде как просматриваются попытки оптимизации под разные размеры int. С JTAG у меня 2 проблемы: 1. В отладчике не отображаются С-исходники, только ассемблерный код. Может позже создам отдельную тему, если отчаюсь найти решение. 2. В связи с многоуровневой загрузкой ПО, после каждого Fault необходимо заново запускать отдельный сценарий для загрузки символьной информации. И заново устанавливать точки останова. В результате процесс поиска источника проблемы получается очень долгим и утомительным. Я устал искать и создал тему P.S. Это не "защищенное хранилище", это параллельный проект. Для хранилища, насколько я знаю, взяли Freescale Keenetic (Cortex-A9)
Сообщение отредактировал Harvester - Oct 5 2014, 14:32
--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
|
|
|
|
|
Oct 5 2014, 15:34
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(AlexandrY @ Oct 5 2014, 15:08)  Если есть стабильное исключение, то установить где оно происходит с помощью JTAG дело пяти минут. И??... Установили что оно происходит к примеру в диапазоне адресов: 0x00000000...0xFFFFFFFF (каждый раз - в новом месте). Что дальше? Как догадаться, что оно происходит к примеру: из-за переполнения/разрушения стека, после которого происходит POP {PC} в случайный адрес, далее несколько тыс. команд CPU бродит по случайным адресам, пока не натыкается на нечто, вызывающее это исключение? Хотя с определённой долей вероятности можно предположить, что у ТС всё проще. И раз код писали люди, не понимающие чем грозит *(int *)0x00000001 на CPU типа ARM9, то возможно что адрес исключения укажет на одну из точек бага. Только начинать всё равно нужно с изучения мануала на CPU. Цитата(kovigor @ Oct 5 2014, 16:33)  Не забудьте включить MMU, Instruction cache и Data cache, иначе выйдет не криптография, а сплошные тормоза. Не очень понятно, как MMU повлияет на быстродействие... Раскройте секрет.  Цитата(Harvester @ Oct 5 2014, 20:23)  Само устройство - 3G-модем. Соответственно, объем Firmware очень большой (исходников под 2 гига), само ПО - многоуровневое и многоступенчатое  , поэтому в "потроха" процессора я лезть не могу и не хочу. Странный вывод.... Т.е. - если-бы ПО было простое - полезли-бы? Вы считаете, что сложность внутреннего устройства CPU увеличивается при усложнении ПО на нём выполняющегося??? Т.е. - в простом ПО типа HelloWorld в CPU имеется скажем всего 4 РОН, но при увеличении размера кода до 1гига - кол-во регистров может увеличиться до 256???
|
|
|
|
|
Oct 5 2014, 17:44
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(Harvester @ Oct 5 2014, 17:23)  На всякий случай попробую описать ситуацию подробней. Компилятор - ADS 1.2 build 842 Отладчик - Lauterbach T32 (китайский клон) SoC - Qualcomm MSM6290 Да, вам не позавидуешь. Устаревший компилятор, брошенная разработчиками операционка... Если верить википедии то REX OS не имеет механизмов защиты памяти и виртуализации адресного пространства. Значит ваша библиотека может завалить всю ситему по любой мелочи. Как то приходилось портировать крипто библиотеки, там чаще всего вопрос утыкается в правильное портирование механизмов динамической памяти. Причем ADS имеет механизм retargeting для портирования стандартных функций типа malloc в окружение RTOS и сама оcь может предлагать подмену malloc. Легко запутаться. Нужно как минимум найти в сорсах все места где выделяется динамическая память и проверить на корректность.
|
|
|
|
|
Oct 6 2014, 10:04
|
Местный
  
Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846

|
Цитата(AlexandrY @ Oct 5 2014, 21:44)  Да, вам не позавидуешь. Устаревший компилятор, брошенная разработчиками операционка...
Если верить википедии то REX OS не имеет механизмов защиты памяти и виртуализации адресного пространства. Значит ваша библиотека может завалить всю ситему по любой мелочи.
Как то приходилось портировать крипто библиотеки, там чаще всего вопрос утыкается в правильное портирование механизмов динамической памяти. Причем ADS имеет механизм retargeting для портирования стандартных функций типа malloc в окружение RTOS и сама оcь может предлагать подмену malloc. Легко запутаться. Нужно как минимум найти в сорсах все места где выделяется динамическая память и проверить на корректность. Ну, от REX там только API - определение процессов, межпроцессное взаимодействие и т.п. Дальше это все превращается в процессы L4. За совет спасибо, но динамическое выделение памяти в портируемой библиотеке не используется. Цитата(Виктория @ Oct 5 2014, 21:31)  Warning-и от компилятора есть? Сравните код ассемблера ПК и ARM по этим предупреждениям. Возможно много одинаковых предупреждений, и больше внимания данным. Криптография... Используется целочисленная арифметика неограниченной длины? Отладчик у Вас крутой! Warning-ов нет. Что там используется и как это называется - не в курсе. Но походу придется разбираться Да, порядок байтов как и на ПК - little-endian. Цитата(jcxz @ Oct 5 2014, 19:34)  Т.е. - если-бы ПО было простое - полезли-бы? Вы считаете, что сложность внутреннего устройства CPU увеличивается при усложнении ПО на нём выполняющегося??? Т.е. - в простом ПО типа HelloWorld в CPU имеется скажем всего 4 РОН, но при увеличении размера кода до 1гига - кол-во регистров может увеличиться до 256???  Я просто хотел сказать, что настройки SoC определяются исходным ПО (модем и иже с ним). А поскольку это ПО сложное, то отследить взаимосвязь между его работой и настройками процессора не представляется возможным. А влезать в них - 100% развалить все. Как пример. В исходном ПО используются одни настройки PLL, а мне нужно другие. В простой программе (вроде мигания светодиодом), я могу найти "частотнозависимые" места и исправить их согласно моим новым настройкам. В случае же сколь нибудь сложного ПО это практически нереально.
--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|