|
Портирование кода с ПК на ARM926 |
|
|
|
 |
Ответов
|
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, 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, а мне нужно другие. В простой программе (вроде мигания светодиодом), я могу найти "частотнозависимые" места и исправить их согласно моим новым настройкам. В случае же сколь нибудь сложного ПО это практически нереально.
--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
|
|
|
|
|
Oct 6 2014, 10:51
|
Местный
  
Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846

|
Цитата(AlexandrY @ Oct 6 2014, 14:26)  А как тогда ваша библиотека стыкуется к основному образу ПО? Сразу все линкуется вместе с вашей библиотекой на стадии компиляции или библиотека компилируется отдельно и потом динамически загружается и связывается с основным ПО уже на стадии исполнения?
Может просто перекомпилировать весь образ надо. Я работаю не с образом ПО, а с исходниками. Т.е. я добавляю в исходники новые файлы со своим процессом, а потом все вместе компилируется. Что меня больше всего смущает - Fatal Error происходит не в моем процессе, а каком-то глубоко системном (от него даже исходников нет, только заголовки). Судя по имени обработчика IxTimeOfDay_IPC_Server(), это что-то связанное с часами реального времени.
--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
|
|
|
|
|
Oct 6 2014, 11:49
|

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

|
Цитата(Harvester @ Oct 6 2014, 13:51)  Я работаю не с образом ПО, а с исходниками. Т.е. я добавляю в исходники новые файлы со своим процессом, а потом все вместе компилируется.
Что меня больше всего смущает - Fatal Error происходит не в моем процессе, а каком-то глубоко системном (от него даже исходников нет, только заголовки). Судя по имени обработчика IxTimeOfDay_IPC_Server(), это что-то связанное с часами реального времени. А как узнали имя функции в которой прооисходит аборт? И как понимаю работаете с скомпилированным ядром в виде библиотеки и перекомпилировать его не можете, раз одни только хидеры имеете. Больше похоже на сбой стека. Либо стек для процесса маленький, либо в стек ложится меньше данных чем и из него выбирается. Поэтому процессор берет неверный адрес возврата и оказывается в непредсказуемом месте. Тут надо проверить контекст какой задачи был на момент аборта. Если контекст вашей задачи , то очень вероятен сбой в работе со стеком. Может некорректно используете функции с открытыми параметрами?
|
|
|
|
|
Oct 6 2014, 13:19
|
Местный
  
Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846

|
Цитата(AlexandrY @ Oct 6 2014, 15:49)  А как узнали имя функции в которой прооисходит аборт?
И как понимаю работаете с скомпилированным ядром в виде библиотеки и перекомпилировать его не можете, раз одни только хидеры имеете.
Больше похоже на сбой стека. Либо стек для процесса маленький, либо в стек ложится меньше данных чем и из него выбирается. Поэтому процессор берет неверный адрес возврата и оказывается в непредсказуемом месте. Тут надо проверить контекст какой задачи был на момент аборта. Если контекст вашей задачи , то очень вероятен сбой в работе со стеком. Может некорректно используете функции с открытыми параметрами? В сценарии отладчика предусмотрена аппаратная точка останова на функции err_fatal_put_internal(), один из параметров которой - строка с внутренним именем процесса и видом ошибки. Про стек тоже думал. Увеличил в разумных пределах, ничего не менялось. Вобщем, нет у меня доверия этой библиотеке. Попробую найти альтернативные реализации алгоритма
--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
|
|
|
|
Сообщений в этой теме
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          AlexandrY Цитата(kovigor @ Oct 6 2014, 16:35) Прост... Oct 6 2014, 14:13           Harvester Цитата(AlexandrY @ Oct 6 2014, 18:13) Ари... Oct 6 2014, 14:28 Виктория Цитата(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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|