Простейший пример на ассемблере для MPC860xx (PowerPC)

Hello everybody.

Hет ли у кого чего-нибудь типа мигающего светодиода для сабжевого контроллера? Есть плата на XPC860MH (кстати, доку на этот MH почему-то нигде не могу найти, хотя на другие разновидности 860 лежит и на chipinfo, и на самом freescale). Плата в оригинале должна была втыкаться в PCI, для чего там стояла PCI9060, но эта самая PCI9060 по непонятным причинам сгорела и была отпаяна. При этом не ясно, исправны ли остальные компоненты, в частности сам процессор. Путём некоторых плясок с бубном удалось заставить плату подавать первичные признаки жизни, а именно неким образом шевелить шинами адреса и данных, но добиться сколь бы то ни было осмысленного поведения от имеющейся прошивки (некий бутлоадер) так и не получилось. Соответственно, ищется сабж. Можно и не на асме, а на С (лишь бы он был обозримым), но тогда дайте заодно и мэйкфайл, который из этого кода делает бинарник для заливки в ПЗУ.

Конечная цель всего этого - портировать туда u-boot и (наполеоновские планы) поставить Линух, но до этого ещё далеко...

З.Ы. Город Вращенцы велик и славен. Если вы в этом сомневаетесь, то посмотрите вокруг.

Ivan

Reply to
Ivan Maximov
Loading thread data ...

Hello everybody.

á ×ÏÏÂÝÅ, ÅÓÔØ ÚÄÅÓØ ÌÀÄÉ, ÚÎÁËÏÍÙÅ ÓÁÂÖÅ×ÙÍ ÁÓÍÏÍ ÉÌÉ ÈÏÔÑ-ÂÙ ÐÒÏÓÔÏ Ó ËÏÍÐÉÌÑÔÏÒÏÍ GNU as? ðÙÔÁÀÓØ ×ÙÄÒÁÔØ ÉÚ ÂÏÌØÛÏÇÏ É ÎÅËÏÍÐÉÌÑÂÅÌØÎÏÇÏ ÉÓÈÏÄÎÉËÁ ÍÉÎÉÍÁÌØÎÏ ÒÁÂÏÔÏÓÐÏÓÏÂÎÙÊ ËÕÓÏÞÅË. ðÏÌÕÞÁÅÔÓÑ ÔÁË:

.section .text .align 2 /* align on word boundary */ .globl _start .globl reset

.equ CacheDisableCmd, 0x400 oemprom: .skip 0x100 VTABLE: .globl oemprom_entry

oemprom_entry: _start: ba reset .skip 0x3000-(.-oemprom) reset: li %r0,0x0000 /* all 0's in R0 */ /* Disable Data Cache before accessing any registers */ lis %r3,CacheDisableCmd /* DCache Disable command */ mtspr DC_CST,%r3 isync /* Reset Instruction Cache */ lis %r3,CacheDisableCmd /* ICache Disable command */ mtspr IC_CST,%r3 isync /* HÕ É ÐÏÛÌÉ ÄÁÌØÛÅ ÐÒÏÃ É ÖÅÌÅÚËÕ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ - ÎÁ ÄÁÎÎÏÍ ÜÔÁÐÅ*/ /* ÎÅ ×ÁÖÎÏ */

âÅÄÁ × ÔÏÍ, ÞÔÏ ÐÅÒ×ÕÀ ÉÎÓÔÒÕËÃÉÀ powerpc-elf-as ËÏÍÐÉÌÉÔ ÐÏÞÅÍÕ-ÔÏ × ba oemprom (ÓÍÏÔÒÅÌ Ó ÐÏÍÏÝØÀ IDA Pro Adv 4.8), Á ÐÏÓÌÅ powerpc-elf-objcopy -O binary ÏÎÁ É ×Ï×ÓÅ ÐÒÏÐÁÄÁÅÔ (ÐÏ ÓÍÅÝÅÎÉÀ 0x100 × ÂÉÎÁÒÎÉËÅ ÎÕÌÉ). çÄÅ ËÏÓÑË ÚÁÒÙÔ?

binutils ×ÅÒÓÉÉ 2.10, ÓÏÂÒÁÎÙ ÐÏÄ cygwin.

Ivan

Reply to
Ivan Maximov

Привет Ivan!

15 Sep 05 02:04, Ivan Maximov писал Ivan Maximov:

IM> А вообще, есть здесь люди, знакомые сабжевым асмом или хотя-бы просто IM> с компилятором GNU as?

Я немного знаком.

IM> oemprom: IM> .skip 0x100 IM> ba reset IM> .skip 0x3000-(.-oemprom) IM> reset:

IM> Беда в том, что первую инструкцию powerpc-elf-as компилит почему-то в IM> ba oemprom IM> (смотрел с помощью IDA Pro Adv 4.8),

В смысле, ты смотрел под отладчиком (симулятором?) в пошаговом режиме куда ba передает управление? А уверен, что ему можно верить? Лучше посмотри эту секцию с помощью objdump с ключом -d.

IM> а после powerpc-elf-objcopy -O IM> binary она и вовсе пропадает (по смещению 0x100 в бинарнике нули).

А как ты определил, что она должна быть по смещению 0x100?

IM> Где косяк зарыт?

IM> binutils версии 2.10, собраны под cygwin.

А чем вызвано использование версии более чем пятилетней давности? Последняя версия, насколько я помню, уже 2.16.

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Закрой свой Ворд!

Reply to
Alex Mogilnikov
  • Replying to a msg in PERSONAL (My personal EchoMail)

Hello Alex.

15 Сен 05 13:10, you wrote to me:

IM>> oemprom: IM>> .skip 0x100 IM>> ba reset

IM>> Беда в том, что первую инструкцию powerpc-elf-as компилит IM>> почему-то в IM>> ba oemprom IM>> (смотрел с помощью IDA Pro Adv 4.8), AM> В смысле, ты смотрел под отладчиком (симулятором?) в пошаговом Hет, смотрел дизассемблером. AM> режиме куда ba передает управление? А уверен, что ему можно верить? Как выяснилось, нельзя. AM> Лучше посмотри эту секцию с помощью objdump с ключом -d. Как подсказали в ru.asm.chainik, проблема была в том, что после ассембера надо запускать ещё и линкер, а я этого не сделал. Соответственно, что IDA, что objdump -d показывали там ba 0 <oemprom>. После того, как сказал powerpc-elf-ld -o a.elf a.out , всё стало нормально. Hо почему-то только под 2.10 под cygwin.

IM>> а после powerpc-elf-objcopy -O IM>> binary она и вовсе пропадает (по смещению 0x100 в бинарнике IM>> нули). AM> А как ты определил, что она должна быть по смещению 0x100? Перед ней стоит .skip 0x100 . Как написано в man objcopy, пропадает она именно из-за того, что copying a relocatable object file between any two formats may not work as expected.

IM>> binutils версии 2.10, собраны под cygwin. AM> А чем вызвано использование версии более чем пятилетней давности? AM> Последняя версия, насколько я помню, уже 2.16. Исключительно наличием у меня её, собранной под cygwin. Пробовал 2.14 под линухом (из eldk), столкнулся с непонятными граблями:

gm@momed:~/powerpc$ ppc_8xx-ld -o a.elf a.out a.out(.text+0x100): In function `oemprom_entry': : relocation truncated to fit: R_PPC_ADDR24 reset

При этом gm@momed:~/powerpc$ ppc_8xx-ld -r -o a.elf a.out работает, но relocation не удаляет (как я понял, на то оно и -r).

Ivan

Reply to
Ivan Maximov

Привет Ivan!

15 Sep 05 18:28, Ivan Maximov писал Alex Mogilnikov:

AM>> А как ты определил, что она должна быть по смещению 0x100? IM> Перед ней стоит IM> .skip 0x100

Это не говорит абсолютно ни о чем. .skip 0x100 помещает 256 нулевых байт по текущему адресу в текущей секции. Как эта секция потом будет размещена, из приведенного тобой текста неизвестно. Смотри еще раз ассемблерный мануал.

IM> . Как написано в man objcopy, пропадает она именно из-за того, что IM> copying a relocatable object file between any two formats may not work IM> as expected.

Кто пропадает? Hикто у тебя не пропадал. Просто у тебя адреса были не настроены. Именно потому что ассемблер не знает, на каком адресе окажется reset. Это может знать только линкер.

AM>> А чем вызвано использование версии более чем пятилетней AM>> давности? Последняя версия, насколько я помню, уже 2.16. IM> Исключительно наличием у меня её, собранной под cygwin.

Hу, дело твое, конечно.

IM> Пробовал 2.14 IM> под линухом (из eldk), столкнулся с непонятными граблями:

IM> gm@momed:~/powerpc$ ppc_8xx-ld -o a.elf a.out IM> a.out(.text+0x100): In function `oemprom_entry': IM> : relocation truncated to fit: R_PPC_ADDR24 reset

Есть подозрение, что грабли не в линкере, а в программе. А старая версия просто на них не напарывается (вероятно, как раз ошибочно).

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Синяки рождаются в споре куда чаще, чем истина...

Reply to
Alex Mogilnikov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.