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

 
 
> Портирование кода с ПК на 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
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
Виктория
сообщение Oct 5 2014, 08:32
Сообщение #2


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



Для ARM используется gcc?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 5 2014, 08:44
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Harvester @ Oct 5 2014, 11:53) *
Имеется библиотека (криптография) которая писалась и отлаживалась на ПК в Visual C++. Нужно перенести получившийся код на процессор ARM926EJ-S. На что нужно (и можно) обратить внимание?

Как минимум - изучить матчасть (ядро ARM9).
Вам об этом намекает MisAligned. Раз вылетает на невыровненном доступе, значит те кто писал эту библиотеку, ничего кроме ПК не видели.
Go to the top of the page
 
+Quote Post
Виктория
сообщение Oct 5 2014, 09:07
Сообщение #4


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



Размерности по типам данных в обоих компиляторах совпадают? Нумерация байтов и бит в слове.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Oct 5 2014, 09:08
Сообщение #5


Ally
******

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



Цитата(Harvester @ Oct 5 2014, 08:53) *
На что нужно (и можно) обратить внимание?


Если есть стабильное исключение, то установить где оно происходит с помощью JTAG дело пяти минут.
Обратите внимание на JTAG wink.gif
Go to the top of the page
 
+Quote Post
kovigor
сообщение Oct 5 2014, 10:33
Сообщение #6


Гуру
******

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



Цитата(Harvester @ Oct 5 2014, 08:53) *
... хотелось бы по максимуму ускорить его выполнение.

Не забудьте включить MMU, Instruction cache и Data cache, иначе выйдет не криптография, а сплошные тормоза. А для этого как раз и придется вникать в документацию по ядру, как заметили чуть выше.
В моих опытах с RSA2048 на этом ядре после включения MMU и кэшей скорость вычислений возрастала примерно в 6 (!) раз ...
Go to the top of the page
 
+Quote Post
Lagman
сообщение Oct 5 2014, 11:13
Сообщение #7


Знающий
****

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



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


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
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 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
jcxz
сообщение Oct 5 2014, 15:34
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AlexandrY @ Oct 5 2014, 15:08) *
Если есть стабильное исключение, то установить где оно происходит с помощью JTAG дело пяти минут.

И??... Установили что оно происходит к примеру в диапазоне адресов: 0x00000000...0xFFFFFFFF (каждый раз - в новом месте). Что дальше?
Как догадаться, что оно происходит к примеру: из-за переполнения/разрушения стека, после которого происходит POP {PC} в случайный адрес,
далее несколько тыс. команд CPU бродит по случайным адресам, пока не натыкается на нечто, вызывающее это исключение? laughing.gif

Хотя с определённой долей вероятности можно предположить, что у ТС всё проще. И раз код писали люди, не понимающие чем грозит *(int *)0x00000001
на CPU типа ARM9, то возможно что адрес исключения укажет на одну из точек бага.
Только начинать всё равно нужно с изучения мануала на CPU.

Цитата(kovigor @ Oct 5 2014, 16:33) *
Не забудьте включить MMU, Instruction cache и Data cache, иначе выйдет не криптография, а сплошные тормоза.

Не очень понятно, как MMU повлияет на быстродействие...
Раскройте секрет. sm.gif

Цитата(Harvester @ Oct 5 2014, 20:23) *
Само устройство - 3G-модем. Соответственно, объем Firmware очень большой (исходников под 2 гига), само ПО - многоуровневое и многоступенчатое sm.gif, поэтому в "потроха" процессора я лезть не могу и не хочу.

Странный вывод.... wacko.gif
Т.е. - если-бы ПО было простое - полезли-бы? Вы считаете, что сложность внутреннего устройства CPU увеличивается при усложнении ПО на нём выполняющегося???
Т.е. - в простом ПО типа HelloWorld в CPU имеется скажем всего 4 РОН, но при увеличении размера кода до 1гига - кол-во регистров может увеличиться до 256??? biggrin.gif
Go to the top of the page
 
+Quote Post
Виктория
сообщение Oct 5 2014, 17:31
Сообщение #11


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



Цитата(Harvester @ Oct 5 2014, 08:53) *
Имеется библиотека (криптография) которая писалась и отлаживалась на ПК в Visual C++. Нужно перенести получившийся код на процессор ARM926EJ-S. На что нужно (и можно) обратить внимание?
К сожалению, тупо вставить, ничего не меняя, не получилось - код компилируется, но система после запуска вылетает в Fatal Error (конкретное исключение вроде бы MisAligned, но не уверен).

Warning-и от компилятора есть? Сравните код ассемблера ПК и ARM по этим предупреждениям. Возможно много одинаковых предупреждений, и больше внимания данным. Криптография... Используется целочисленная арифметика неограниченной длины?
Отладчик у Вас крутой!
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Oct 5 2014, 17:44
Сообщение #12


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
jcxz
сообщение Oct 5 2014, 20:31
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Виктория @ Oct 5 2014, 23:31) *
Отладчик у Вас крутой!

Он с Trace-ом что-ль?
Go to the top of the page
 
+Quote Post
Harvester
сообщение Oct 6 2014, 10:04
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 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
Сообщение #15


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

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

 


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


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