реклама на сайте
подробности

 
 
> Портирование кода с ПК на ARM926
Harvester
сообщение Oct 5 2014, 05:53
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Добрый день.
Имеется библиотека (криптография) которая писалась и отлаживалась на ПК в Visual C++. Нужно перенести получившийся код на процессор ARM926EJ-S. На что нужно (и можно) обратить внимание?
К сожалению, тупо вставить, ничего не меняя, не получилось - код компилируется, но система после запуска вылетает в Fatal Error (конкретное исключение вроде бы MisAligned, но не уверен). Ну а поскольку в коде так и так придется ковыряться, хотелось бы по максимуму ускорить его выполнение.


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Lagman
сообщение Oct 5 2014, 11:13
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Вангую, на 100% это все крутится под линукс. sm.gif
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Oct 5 2014, 12:04
Сообщение #3


Ally
******

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



Цитата(Lagman @ Oct 5 2014, 14:13) *
Вангую, на 100% это все крутиться под линукс. sm.gif


Кто ж на линуксе такое делает. Он же весь насквозь дырявый. Там вон даже в bash-е открыли огромную дыру.

Больше похоже на то самое "защищенное хранилище", для которого тут полгода назад искали Cortex-M3 на 800 МГц wink.gif
И похоже наконец дело сдвинулось.


Go to the top of the page
 
+Quote Post
Harvester
сообщение Oct 5 2014, 14:23
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(AlexandrY @ Oct 5 2014, 16:04) *
Кто ж на линуксе такое делает. Он же весь насквозь дырявый. Там вон даже в bash-е открыли огромную дыру.

Больше похоже на то самое "защищенное хранилище", для которого тут полгода назад искали Cortex-M3 на 800 МГц wink.gif
И похоже наконец дело сдвинулось.

Спасибо всем за отклики и добрые слова wink.gif
На всякий случай попробую описать ситуацию подробней.
Компилятор - ADS 1.2 build 842
Отладчик - Lauterbach T32 (китайский клон)
SoC - Qualcomm MSM6290
Само устройство - 3G-модем. Соответственно, объем Firmware очень большой (исходников под 2 гига), само ПО - многоуровневое и многоступенчатое sm.gif, поэтому в "потроха" процессора я лезть не могу и не хочу. Но, думаю, MMU там все же включен wink.gif.
По поводу операционки - там действительно не линукс, а микроядро L4:Pistachio, поверх простейшей РТОС "REX" (или РТОС поверх микроядра, не знаю как будет правильнее).
Что какется размерности типов и порядка байт - буду смотреть. В самой библиотеке вроде как просматриваются попытки оптимизации под разные размеры int.
С JTAG у меня 2 проблемы:
1. В отладчике не отображаются С-исходники, только ассемблерный код. Может позже создам отдельную тему, если отчаюсь найти решение.
2. В связи с многоуровневой загрузкой ПО, после каждого Fault необходимо заново запускать отдельный сценарий для загрузки символьной информации. И заново устанавливать точки останова.
В результате процесс поиска источника проблемы получается очень долгим и утомительным. Я устал искать и создал тему biggrin.gif
P.S. Это не "защищенное хранилище", это параллельный проект. Для хранилища, насколько я знаю, взяли Freescale Keenetic (Cortex-A9)



Сообщение отредактировал Harvester - Oct 5 2014, 14:32


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Oct 5 2014, 17:44
Сообщение #5


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.
Легко запутаться. Нужно как минимум найти в сорсах все места где выделяется динамическая память и проверить на корректность.
Go to the top of the page
 
+Quote Post
Harvester
сообщение Oct 6 2014, 10:04
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 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-ов нет. Что там используется и как это называется - не в курсе. Но походу придется разбираться laughing.gif wacko.gif
Да, порядок байтов как и на ПК - little-endian.

Цитата(jcxz @ Oct 5 2014, 19:34) *
Т.е. - если-бы ПО было простое - полезли-бы? Вы считаете, что сложность внутреннего устройства CPU увеличивается при усложнении ПО на нём выполняющегося???
Т.е. - в простом ПО типа HelloWorld в CPU имеется скажем всего 4 РОН, но при увеличении размера кода до 1гига - кол-во регистров может увеличиться до 256??? biggrin.gif

Я просто хотел сказать, что настройки SoC определяются исходным ПО (модем и иже с ним). А поскольку это ПО сложное, то отследить взаимосвязь между его работой и настройками процессора не представляется возможным. А влезать в них - 100% развалить все.

Как пример. В исходном ПО используются одни настройки PLL, а мне нужно другие. В простой программе (вроде мигания светодиодом), я могу найти "частотнозависимые" места и исправить их согласно моим новым настройкам. В случае же сколь нибудь сложного ПО это практически нереально.


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Oct 6 2014, 10:26
Сообщение #7


Ally
******

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



Цитата(Harvester @ Oct 6 2014, 13:04) *
Ну, от REX там только API - определение процессов, межпроцессное взаимодействие и т.п. Дальше это все превращается в процессы L4. За совет спасибо, но динамическое выделение памяти в портируемой библиотеке не используется.


А как тогда ваша библиотека стыкуется к основному образу ПО?
Сразу все линкуется вместе с вашей библиотекой на стадии компиляции или библиотека компилируется отдельно и потом динамически загружается и связывается с основным ПО уже на стадии исполнения?

Может просто перекомпилировать весь образ надо.

Go to the top of the page
 
+Quote Post
Harvester
сообщение Oct 6 2014, 10:51
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(AlexandrY @ Oct 6 2014, 14:26) *
А как тогда ваша библиотека стыкуется к основному образу ПО?
Сразу все линкуется вместе с вашей библиотекой на стадии компиляции или библиотека компилируется отдельно и потом динамически загружается и связывается с основным ПО уже на стадии исполнения?

Может просто перекомпилировать весь образ надо.

Я работаю не с образом ПО, а с исходниками. Т.е. я добавляю в исходники новые файлы со своим процессом, а потом все вместе компилируется.

Что меня больше всего смущает - Fatal Error происходит не в моем процессе, а каком-то глубоко системном (от него даже исходников нет, только заголовки). Судя по имени обработчика IxTimeOfDay_IPC_Server(), это что-то связанное с часами реального времени.


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Oct 6 2014, 11:49
Сообщение #9


Ally
******

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



Цитата(Harvester @ Oct 6 2014, 13:51) *
Я работаю не с образом ПО, а с исходниками. Т.е. я добавляю в исходники новые файлы со своим процессом, а потом все вместе компилируется.

Что меня больше всего смущает - Fatal Error происходит не в моем процессе, а каком-то глубоко системном (от него даже исходников нет, только заголовки). Судя по имени обработчика IxTimeOfDay_IPC_Server(), это что-то связанное с часами реального времени.


А как узнали имя функции в которой прооисходит аборт?

И как понимаю работаете с скомпилированным ядром в виде библиотеки и перекомпилировать его не можете, раз одни только хидеры имеете.

Больше похоже на сбой стека. Либо стек для процесса маленький, либо в стек ложится меньше данных чем и из него выбирается.
Поэтому процессор берет неверный адрес возврата и оказывается в непредсказуемом месте.
Тут надо проверить контекст какой задачи был на момент аборта. Если контекст вашей задачи , то очень вероятен сбой в работе со стеком.
Может некорректно используете функции с открытыми параметрами?

Go to the top of the page
 
+Quote Post
Harvester
сообщение Oct 6 2014, 13:19
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(AlexandrY @ Oct 6 2014, 15:49) *
А как узнали имя функции в которой прооисходит аборт?

И как понимаю работаете с скомпилированным ядром в виде библиотеки и перекомпилировать его не можете, раз одни только хидеры имеете.

Больше похоже на сбой стека. Либо стек для процесса маленький, либо в стек ложится меньше данных чем и из него выбирается.
Поэтому процессор берет неверный адрес возврата и оказывается в непредсказуемом месте.
Тут надо проверить контекст какой задачи был на момент аборта. Если контекст вашей задачи , то очень вероятен сбой в работе со стеком.
Может некорректно используете функции с открытыми параметрами?

В сценарии отладчика предусмотрена аппаратная точка останова на функции err_fatal_put_internal(), один из параметров которой - строка с внутренним именем процесса и видом ошибки.
Про стек тоже думал. Увеличил в разумных пределах, ничего не менялось.

Вобщем, нет у меня доверия этой библиотеке. Попробую найти альтернативные реализации алгоритма laughing.gif


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
kovigor
сообщение Oct 6 2014, 13:35
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Harvester @ Oct 6 2014, 16:19) *
Вобщем, нет у меня доверия этой библиотеке.

Просто совет, основанный на личном опыте. Я использовал вот эту библиотеку (bnlib) от Филиппа Зиммермана:

http://philzimmermann.com/EN/bnlib/index.html
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Oct 6 2014, 14:13
Сообщение #12


Ally
******

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



Цитата(kovigor @ Oct 6 2014, 16:35) *
Просто совет, основанный на личном опыте. Я использовал вот эту библиотеку (bnlib) от Филиппа Зиммермана:

http://philzimmermann.com/EN/bnlib/index.html


Арифметика произвольной точности есть в любой реализации SSL.
Можно взять уже адаптированную для embedded библиотеку, например из MatrixSSL.
Все в одном файле, компактно, без нагромаждения архитектур.
Go to the top of the page
 
+Quote Post
Harvester
сообщение Oct 6 2014, 14:28
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(AlexandrY @ Oct 6 2014, 18:13) *
Арифметика произвольной точности есть в любой реализации SSL.
Можно взять уже адаптированную для embedded библиотеку, например из MatrixSSL.
Все в одном файле, компактно, без нагромаждения архитектур.

Спасибо. Разберусь с текущей задачей - буду изучать


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Harvester   Портирование кода с ПК на ARM926   Oct 5 2014, 05:53
- - Виктория   Для ARM используется gcc?   Oct 5 2014, 08:32
- - jcxz   Цитата(Harvester @ Oct 5 2014, 11:53) Име...   Oct 5 2014, 08:44
- - Виктория   Размерности по типам данных в обоих компиляторах с...   Oct 5 2014, 09:07
- - AlexandrY   Цитата(Harvester @ Oct 5 2014, 08:53) На ...   Oct 5 2014, 09:08
|- - jcxz   Цитата(AlexandrY @ Oct 5 2014, 15:08) Есл...   Oct 5 2014, 15:34
|- - SII   Цитата(jcxz @ Oct 5 2014, 19:34) Не очень...   Oct 6 2014, 15:07
|- - jcxz   Цитата(SII @ Oct 6 2014, 21:07) Причина в...   Oct 6 2014, 17:11
- - kovigor   Цитата(Harvester @ Oct 5 2014, 08:53) ......   Oct 5 2014, 10:33
|- - Harvester   Цитата(kovigor @ Oct 6 2014, 17:35) Прост...   Oct 6 2014, 13:52
- - Виктория   Цитата(Harvester @ Oct 5 2014, 08:53) Име...   Oct 5 2014, 17:31
|- - jcxz   Цитата(Виктория @ Oct 5 2014, 23:31) Отла...   Oct 5 2014, 20:31
- - Genadi Zawidowski   Вам сказали ЦитатаНумерация байтов и бит в слове В...   Oct 6 2014, 15:29


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.09471 секунд с 7
ELECTRONIX ©2004-2016