|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:26 am
Позиционно независим код Cortex + gcc
| Автор |
Съобщение |
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 11:53 pm Мнения: 4582 Местоположение: Brussels / Пловдив
|
 Re: Позиционно независим код Cortex + gcc
Хубаво че си го оправил. Верно глупава ситуация. Както и да е, ей така се прави с линкерска секция без да копираш на ръка кода - направо си викаш функцията от рам. Това е моя линкерски скрипт, не е за копи пействане че съм променил една камара неща за моя боотстрапер, пък и е за арм7тдми - давам ти го за пример да видиш къде се добавя секцията за код в рам-а - обърни внимание на .text.fastcode - това прави магията. После в сорса слагаш един атрибут в дефиницията на функцията и си готов. Ей така: В инициализиращия код преди main() има един цикъл който копира от флаш-а всички инициализирани данни в рам-а, заедно с кода на тази функция така че не се налага да заделяш място и да копираш на ръка, освен това се копира точно колкото ти трябва. Автоматично ти се решава и проблема със нечетния адрес за thumb кода. Кода ти става по лесно преносим ако решиш да минеш на друг арм, че и на друга архитектура даже.
_________________ Мразя да мразя ...
|
| Чет Окт 27, 2011 12:34 pm |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
 Re: Позиционно независим код Cortex + gcc
Бе то и аз исках с линкер скрипта... ама на за мен е като санскрит. Чопля там почти на сляпо, когато ми се наложи, повече на проба/грешка  Лошото е че таак и не съм попаднал на читаво четиво, където е описано тайнството "линкер-скриптов език" Какво е грешката relocation truncated to fit: R_ARM_THM_CALL against symbol `Btldr' defined in .fastcode section in ./image.o ? Загадка.. Каква е разликата между * ( .text ) * ( .text* ) ? Препочъчай нещо за четене най-добре, ако се намира някъде...
|
| Чет Окт 27, 2011 3:51 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Позиционно независим код Cortex + gcc
Като за начало що не прочетеш документацията ... А пък това със секциите 100 пъти сме го коментирали и в тоя форум. Така по памет не мога ти цитирам причините за всички грешки. Показва ти символа, виж го що за символ е - етикет, функция, променлива.... откъде се ползва и как. Явно е компилирало код, който линкера не може да адаптира. Примерно ако преход и имаш оставена двубайтова инструкция, а пък линкера трябва да му присвои далечен адрес. Едното матчва всички символи от текст секцията, а други матчва всички символи от секция започваща с text. По принцип второто не е много коректно. Трябва да е: * ( .text.* ) А пък тъй като подобни двойни филтри се ползват често, за да не ти набъбва скрипта по-добре ги записвай на един ред така: * ( .text .text.* )
|
| Чет Окт 27, 2011 4:35 pm |
|
 |
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 11:53 pm Мнения: 4582 Местоположение: Brussels / Пловдив
|
 Re: Позиционно независим код Cortex + gcc
Грешката най вероятно означава че инструкцията за викане на функция не може да адресира толкова далечен адрес - в стандартния арм лимита май беше 64мб, а при кортексите може и да е по малък. За да се оправи това се дава една опция на компилатора първо да зарежда адреса на фукцията в регистър и после да прави калл с регистъра - вкарва ти една инструкция отгоре на всеки калл - грозна работа, ама няма как. Виж какво пише в документацията: Т.е. тъй като си задал секция на фукцията би трябвало да я няма тая грешка, ама все пак си поиграй малко с прагми, атрибути опции да го оправиш. Разликата между .text и .text* е че звездата заменя какви да е символи - в случая допълнителни code подсекции. Литература за това няма кой знае каква - търси в гугъл, ако не намериш питай ако мога да помогна. Доста порових докато го разбера как се конфигурира тоя линкер, но не съм запазил линковете така че няма как да ти дам откъде да прочетеш. Я сега аз да те питам нещо - борих се тия дни с едно L3S8630 но нещо не успях да го подкарам, не мога да се свържа с JTAG към него, ти с кое луминари работиш? С готов кит или сам си си правил платка?
_________________ Мразя да мразя ...
|
| Чет Окт 27, 2011 4:36 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Позиционно независим код Cortex + gcc
Забравих да обясня за текс и текст.* Значи по принцип ".text" е секцията по подразбиране за код. И тъй като е по подразбиране нормално е да очакваш, че из някой сорс (по-точно обектен) файл ще има код в такава секция. Затова трябва да я сложиш. Но тоя начин да блъскаш всичко в една секция е меко казано грозен. По-добре да си сложиш в опциите на компилатора (мейкфайла): Това ще накара компилатора всяка функция (и данни) да се разполага в отделна секция. Примерно ако имаш функция foo() тя ще се разположи в секция .text.foo Отделните секции са за предпочитане най-малкото заради опимизациите. Линкерът първо слага нещата, които са задължителни, т.е. с KEEP(). И докато ги слага гледа дали те не ползват символи от други секции и добавя и тия секции. Забележи, че оптимизацията е на ниво секции. Ако нищо от дадена секция не се ползва и няма KEEP - цялата секция се разкарва... Но едно нещо да се ползва - цялата секция остава.
|
| Чет Окт 27, 2011 4:57 pm |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
 Re: Позиционно независим код Cortex + gcc
С 9В96 и 9В92 работя в момента... Имаме и наши платки, и китове. За вероятна причина да не отговаря по JTAG веднага се сещам, ако е ревизия С3 или С5, ресета на ядрото и ресета на JTAG интерфейса вътрешно са дадени накъсо и ако дебъгера се опита да прави ресет на ядрото... самоубива си връзката с дебъг-интерфейса и се дисконектва със съобщение за грешка  Може и друга да е причината де, но първо това провери. Миро, документацията съм я чел... преглеждам я редовно даже, но за да явно се предполага, че трябва да имам някакви по-основни познания, които като че ли ми липсват. Благодаря много, Палавров, ще си поиграя и ще видя от какво е
|
| Чет Окт 27, 2011 5:08 pm |
|
 |
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 11:53 pm Мнения: 4582 Местоположение: Brussels / Пловдив
|
 Re: Позиционно независим код Cortex + gcc
Ей тук е темата където Миро много добре обяснява линкерските скриптове: viewtopic.php?f=7&t=9305Мерси за инфото за стелариса - и на мен ми намирисва че е нещо свързано с ресета - грешката която дава openocd е: и ефекта е че въобще не мога да се свържа през openocd - на всички команди ми казва че не е опознал таргета и отказва да работи. В скрипта за настройка има няколко опции с които се регулира това нещо: да знаеш дали ще се оправи с някоя от тях?
_________________ Мразя да мразя ...
|
| Чет Окт 27, 2011 5:34 pm |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
 Re: Позиционно независим код Cortex + gcc
Определено не... това конфигурира коя линия за ресет да се ползва и как , в случай че са изведени и двете на пинове. А тя тази за JTAG-a не е изведена въобще, но вътрешно е свързана с другата... няма оправия, освен да не правиш никакъв ресет в процеса на свързване. Обаче съобщението за таймоут не е от това. viewtopic.php?f=2&t=8399Ето тук и аз съм питал знае ли някой от какво е  Единственото, което мога да кажа е, че "Debug port unlock" процедурата понякога помага процесора да дойде на себе си... а понякога не помага
|
| Чет Окт 27, 2011 5:59 pm |
|
 |
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 11:53 pm Мнения: 4582 Местоположение: Brussels / Пловдив
|
 Re: Позиционно независим код Cortex + gcc
Жалко, щеше ми се да си спестя един чип на платката за физичния интерфейс на етернета. Между другото - ровичках из сорсовете на openocd да го видя за какво е това и единственото което разбрах е че грешката става в първия момента в който openocd се опита да прочете нещо от дебъг регистрите на кортекса - примерно id на чипа и т.н. Т.е. JTAG работи до някъде, но дебъг котролера в процесора нещо не отговаря. Е, ще си карам със arm7tdmi засега - пък по нататък ще го почопля пак, все трябва да има оправия.
_________________ Мразя да мразя ...
|
| Чет Окт 27, 2011 6:23 pm |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
 Re: Позиционно независим код Cortex + gcc
Точно -mlong-calls се оказа ключа за палатката ! Благодаря много на palavrov и Миро. palavrov, ти все пак го пробвай отключването... няколко пъти дори, че не всеки път "хваща" от раз  За целта ти трябва: http://www.ti.com/tool/lmflashprogrammer , ресет бутон и няколко минути време 
|
| Пет Окт 28, 2011 12:18 pm |
|
 |
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 11:53 pm Мнения: 4582 Местоположение: Brussels / Пловдив
|
 Re: Позиционно независим код Cortex + gcc
Абе тя моята е сложна - платката е в Пловдив, аз съм в Брюксел - работя по интернет без да виждам какво става. Освен това цялата развойна работа е под линукс, нямам и кит от тексасците така че няма как да им ползвам туулчето за отключване. За късмет снощи пак порових в гугле и видях че в openocd има команда която прави същото нещо като тоя туул та смятам да я пробвам като колегата ми накичи пак всички платки. Само за инфо - командата е:
_________________ Мразя да мразя ...
|
| Пет Окт 28, 2011 1:18 pm |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
 Re: Позиционно независим код Cortex + gcc
Стана ли отключването с опен-оцд ? Защото при мен: Нещо гърми на излизане от функцията COMMAND_HANDLER(stellaris_handle_recover_command)... и нищо не е свършено. Не е важно де, с другото тоол-че си става, просто ми стана любопитно да пробвам и с опен-оцд
|
| Пет Ное 11, 2011 3:48 pm |
|
 |
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 11:53 pm Мнения: 4582 Местоположение: Brussels / Пловдив
|
 Re: Позиционно независим код Cortex + gcc
Ами не стана - каза ми че не може да опознае чипа като стеларис и съответно въобще не изпълни командата. Простотия - сега не ми се занимава повече да чопля ... проблем ли е да пратя колегата някой ден до теб да пробвате дали ще можеш да отключиш процесора на нашата платка?
_________________ Мразя да мразя ...
|
| Пет Ное 11, 2011 3:53 pm |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
 Re: Позиционно независим код Cortex + gcc
Няма никакъв проблем. Ако има път към Стара Загора, да звънне, ще се разберем.
|
| Пет Ное 11, 2011 5:00 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|