Архитектура RockChip

Тема в разделе "WASM.ELECTRONICS", создана пользователем tinok, 7 июн 2008.

  1. Barracuda72

    Barracuda72 New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2010
    Сообщения:
    12
    Никто не встречал отладчик для платформы rk? Не эмулятор, а именно отладчик. Без него ой как тяжко
     
  2. MrRockchip

    MrRockchip New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    49
    RKP Disassembler&Assembler

    http://www.mediafire.com/?43myymh5zyz

    Такой отладчик подойдёт?
     
  3. SWIRL

    SWIRL New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    59
    а разве rkp файлы не являются нативными?! прошивка изначально все это умеет, только структура файлов не elf а собственная rkp, что ни чуточки не мешает прошивке передавать приложению управление при загрузке.
    т.е.ты хочешь swi затачивать под конкретную прошивку, а не перекомпилировать программку с Platform.h принадлежащим прошивке?
     
  4. SWIRL

    SWIRL New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    59
    Возможно, изменив начальные установки громкости, перекомпилировав прошивку, и залив ее на плеер
     
  5. Barracuda72

    Barracuda72 New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2010
    Сообщения:
    12
    , нет, мне нужно прошивку отлаживать... никак не могу вернуться из swi, даже без обработки. Возможно, у арм7 есть какие-то особенности, я раньше только с арм9 дело имел.
    да, можно сказать и так. В родной прошивке прерывания не используются вовсе, я хочу попытаться их использовать. Мне кажется, .ркп не так удобен, как .elf, тем более мой рк2705 в стандартной прошивке .ркп не тянет:)
    Сейчас пытаюсь собрать прошивку из исходников, имеющихся в сдк27 и восстановить недостающее по иде. На ritmix 8900 работает уже все, кроме тачпада. Как только заведу его - буду продолжать искания с swi, устал уже делать врезки и искать место под патч.
    Да, у меня одного CodeWarrior из комплекта ads1.2 постоянно падает? невозможно даже с первой попытки скомпилировать прошивку
     
  6. Barracuda72

    Barracuda72 New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2010
    Сообщения:
    12
    Прошу прощения за столь длительное отсутствие, личная жизнь...
    Мне удалось сделать следующее:
    - на моем ritmix rf-8900 работает тачпад и экран, частично звук - пока больше и не нужно
    - доработан эмулятор, теперь в нем тоже работает "тачпад" (любая кнопка мыши)
    - интегрирован и доработан загрузчик эльфов, при выборе пункта меню "Секундомер" загружается эльф из файла С:/elf.elf
    - постарался адаптировать интерфейс к тачскрину, уже можно слушать музыку и радио
    В выходные постараюсь выложить свои наработки, в планах таки допилить swi-хук
     
  7. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Barracuda72
    В смысле даже если прямо в таблицу векторов тыкнуть subs pc,lr,#4, всё равно не возвращается?
    (я тут проходом... ни один сабжевый экземпляр не то, что в руках не держал, даже не видел вживую никогда... не интересовался :))
     
  8. Barracuda72

    Barracuda72 New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2010
    Сообщения:
    12
    Почти что так, в таблице векторов просто
    ldr pc, =swi_addr

    и далее
    swi_addr:
    subs pc, lr, #4
    Виснет намертво
    Компилируется верно... Единственное, что приходит в голову - это что swi явным или неявным образом запрещены
     
  9. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Barracuda72
    А если всё таки в таблицу векторов запихать subs pc,lr,#4? Мало ли... может смещение swi_addr относительно адреса вектора неверно рассчитали? :)
    И ещё на всякий случай спрошу... там точно не flash или rom на месте таблицы векторов лежит? Может remap сделать забыли?
     
  10. Barracuda72

    Barracuda72 New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2010
    Сообщения:
    12
    Попробую, но смещение рассчитывал не я, а компилятор:) Да и дизасм показывает, что все 0К
    Чип не имеет MMU, таблица векторов просто копируется в 0х00000000 при каждой загрузке
     
  11. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Barracuda72
    Не совсем понимаю, причём здесь MMU. Remap'ом занимается не сопроцессор MMU, а контроллер памяти.
    Я ставил обработчик swi вот так:
    Код (Text):
    1. #define STRINGIFY_INTERNAL(X) #X
    2.  
    3. #define STRINGIFY(X) STRINGIFY_INTERNAL((X))
    4.  
    5. void svc_vector(void) __attribute__ ((naked));
    6. void svc_handler(void) __attribute__ ((naked));
    7.  
    8. #define SVC_BASE        0x08
    9. #define SVC_VECT        0x20
    10.  
    11. void init_services(void)
    12. {
    13.     *(uint32_t *)SVC_BASE = *(uint32_t *)&svc_vector;       //store svc vector
    14.     *(uint32_t *)SVC_VECT = (uint32_t)(&svc_handler);       //store svc handler vector
    15. }
    16.  
    17. void svc_vector(void)
    18. {
    19.     __asm volatile ("LDR pc,[pc,#"STRINGIFY(SVC_VECT-(SVC_BASE+4*2))"]");
    20. }
    21.  
    22. void svc_handler(void)
    23. {
    24.     __asm volatile ("ADD lr,lr,#4\n\t"                      //+4 emulates irq behavior
    25.                     "STMDB sp!,{R0-R12,lr}\n\t"
    26.                     "MOV R0,sp\n\t"
    27.                     "BL svc_handler_internal\n\t"
    28.                     "LDMIA sp!,{R0-R12,lr}\n\t"
    29.                     "SUBS pc,lr,#4");
    30. }
    Как Вам удалось переложить рассчёт SVC_VECT-(SVC_BASE+4*2) на компилятор? :)
    Кстати... Насчёт subs pc,lr,#4. После SWI ведь сохраняется адрес следующей за swi инструкции. Поэтому, видимо, в Вашем случае нужно писать всё-таки movs pc,lr (насчёт subs pc,lr,#4 прямо в таблицу векторов — то мой прогон).
     
  12. Barracuda72

    Barracuda72 New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2010
    Сообщения:
    12
    Я все пишу на ассемблере, чтобы не мучаться со всякими приведениями типов и кучей звездочек:) Выглядит сейчас оно так:
    swi_vector:
    mov pc, swi_addr

    swi_addr:
    dcd swi_handler

    swi_handler:
    stmfd sp!, {r0-r3, lr}
    ...здесь идет обработка, код выброшен...
    ldmfd sp!, {r0-r3, pc}^
    виснет:dntknw:
     
  13. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Barracuda72
    Лучше покажите, как Вы устанавливаете вектор, а не как он потом выглядит. Потому что
    Код (Text):
    1. swi_vector:
    2. mov pc, swi_addr
    3.  
    4. swi_addr:
    5. dcd swi_handler
    тянет в лучшем случае на псевдокод. Реально для прыжка по произвольному адресу вектором должна быть инструкция
    ldr pc,[pc,#(swi_addr-(swi_vector+4*2))]. При этом swi_vector = 8, а по swi_addr лежит адрес обработчика (собственно, последнее у Вас, очевидно, соблюдено).
    Зато можно недолго думая написать одну строку, которая на асме будет занимать десять, над которыми ещё и посидеть придётся. И код обозримее становится.
    Ну да ладно. Это Ваше право. :)
     
  14. Barracuda72

    Barracuda72 New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2010
    Сообщения:
    12
    Я не устанавливаю вектор, он жестко задается при компиляции и в дальнейшем не меняется. При запуске загрузчик копирует прошивку в rаm, копирует готовую таблицу векторов на адрес 0х00000000 и дергает Reset_Vector. Собственно, строки
    swi_vector: mov pc, swi_addr
    swi_addr: dcd swi_handler
    и есть часть таблицы векторов.
    Просто нравится мне АРМ ассемблер, очень мощный язык, можно сказать, почти магия на кончиках пальцев:) Основную кодовую массу конечно лучше писать на С, но критичные участки кода все же на асме надежнее и быстрее, процессор все же работает всего на 12 мгц
     
  15. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Barracuda72
    Ну так тогда понятно, почему виснет: Вы прыгаете на swi_addr, а не на swi_handler.
    Во-первых, поставьте ту инструкцию, которую я указал в посте 413.
    Во-вторых, переставьте swi_addr куда подальше. А то затираете вектор prefetch abort.
     
  16. Barracuda72

    Barracuda72 New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2010
    Сообщения:
    12
    Прошу прощения, пишу по памяти и с телефона, забыл квадратные скобки. Должно быть так:
    swi_vector: mov pc, [swi_addr]
    swi_addr: dcd swi_handler
    ида раскрывает это как
    swi_vector: ldr pc, =swi_hаndler
    swi_addr: dcd swi_handler
    Нет, prefetch не затирается, строка swi_addr: dcd swi_handler
    расположена внизу таблицы векторов, просто я не стал весь код перепечатывать, на самом деле все вектора на месте.
    Попробую вставить инструкцию, предложенную Вами, и отпишусь о результатах
     
  17. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Barracuda72
    Если ида раскрывает, как Вы указали, тогда всё верно. Думаю, в Вашем случае имелось в виду даже не
    mov pc, [swi_addr], а ldr pc,[swi_addr]. Обычно для таких случаев поддерживается псевдоинструкция, указанная идой:
    ldr pc, =swi_hаndler. Но тогда нельзя указать, где именно будет размещено слово с адресом swi_hаndler.
    P.S. А чем компилируете-то?
     
  18. Barracuda72

    Barracuda72 New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2010
    Сообщения:
    12
    До этого пробовал binedit'ом, сейчас взял в руки АDS (все равно в итоге писать под него, им собирается прошивка). Конструкция
    swi_vector:
    mov pc, [swi_addr]
    swi_addr:
    dcd swi_handler
    swi_handler:
    movs pc, lr
    работает, спасибо за помощь:) дописать обработчик (возможно, действительно на С?) уже не так сложно
     
  19. drmsaih

    drmsaih New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2010
    Сообщения:
    1
    Пожалуйста, подскажите:

    Есть у меня плеер Explay T10 (походу rk2706)
    Объем памяти:4 Гб
    Синхронизация с ПК: USB 2.0
    Тип дисплея:LCD
    Размер:2.40"
    Кол-во цветов:260 тыс.
    Разрешение:240 x 320

    Прошивается с помощью файлов *.rkw (T10.rkw) путем его копирования в корень и перезагрузки.
    Так вот, можно ли на этот плеер поставить кастомную прошивку, либо проги *.rkp?
    Заранее спасибо за ответ!

    [​IMG]
     
  20. Barracuda72

    Barracuda72 New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2010
    Сообщения:
    12
    Извиняюсь за задержку, вот то, что я накропал:
    http://depositfiles.com/files/8f0r8nl8f
    да, наверняка возможно, сдк Вам в помощь:)