consoledevФорум

Remote debug via SIO (RS232)

#0
0:34, 7 мар 2007

Итак это снова я!
KVaks поскольку пока кроме вас мне никто не отвечает, поэтому обращаюсь за помощью в частности к вам.

Спаял я таки необходимое устройство для подключения PSP к компьютеру через COM1, все необходимое нашел на Юноне:
1. Микросхема MAX3232CPE
2. 5 x 0.1 uF конденсаторов
3. Наборная плата (с дырочками для монтажа)
4. Кабель LPT - COM1
5. Non-original psp remote control (его я использовал ради кабеля с разъемом на 6-pin psp remote connector, чтобы оригинальный не убивать на это)

После окончания сборки и подключения "девайса" я недолго думая, сбилдил и запустил пример debug/sio из sdk
Каково же было мое удивление когда в HyperTerminal замелькало:

stdio.c:stdoutReopen:id=0x00000001                                  
stdio.c:stdoutReopen:id=0x00000002                                  
Hi from Kprintf!                
Also hi from stdio                  
io.c:stdoutReopen:id=0x00000nsonso                                  
io.c:stdoutReopen:id=0x00000nso                               
io.c:stdoutReopen:id=0x00000nso                               
io.c:stdoutReopen:id=0x00000nso                               
io.c:stdoutReopen:id=0x00000nso                               
io.c:stdoutReopen:id=0x00000nso                               
io.c:stdoutReopen:id=0x00000nso                               
io.c:stdoutReopen:id=0x00000nso                               
io.c:stdoutReopen:id=0x00000nso                               
io.c:stdoutReopen:id=0x00000nso   

а на psp растущий список

received xxx
...

Я в восторге!!! :) Теперь я могу удаленно отлаживать свои приложения!
У меня возникла идея вместо гипертерминала использовать свою маленькую программку(сейчас кто-то ткнет меня носом что есть psplink, но у меня 3.03 OEM и где-то в сети я нашел что на ней psplink не работает, поправьте меня если я ошибаюсь, но psplink у меня не коннектится).
Остается одна совсем небольшая проблема, но я к сожалению в отсутствии опыта не могу ее разрешить. Дело в том, что SIO работает только в kernel mode. А мое приложение работает в user mode. Что делать? Я слышал можно собрать лоадер в kernelmode, который будет загружать все модули. Только под модулями я так понял prx-ы подразумеваются? Или мне нужно собрать мое приложение как elf и грузить loader'ом? В этом случае могу ли я использовать в своем модуле (приложение в user mode) функции ядра для передачи данных через SIO? Или может в своем  модуле тоже kernel mode устанавливать? Есть ли kernel mode какие-то ограничения по сравнению с user mode?

P.S. Нигде не нашел ясного определения, что такое kernel mode и user mode, для чего они нужны и чем они отличаются? Буду признателен если просветите или отошлете куда-нидь почитать. (пока мое понимание ограничивается тем, что есть набор функций ядра, доступных только в kernel mode. )

#1
11:08, 7 мар 2007

KmDm
Наконец-то , первый человек (точнее второй  после меня) озаботилсо данным вопросом :))
Теперь по порядку :

1. Оффициальный devkit работает по SIO5 , то есть тот же RS232 (отсюда проблемы со скоростью обмена). Но !!! это единственный правильный режим
в котором можна делать отладку!

2. GDB атстой. Обрати внимание на PS2 devkit и DECI2 протоколы (они на 90% совпадают с PSP) и соотв. можна сделать нормальную отладку из CodeWarrior
а если есть опыт реинженеринга тогда тебе поможет deci2p.prx с PSP bios

3. Для целей только GDB ты зря паял SIO :) для элементарного дебаггинга все можна и на WiFi и на USB, в разы быстрее и ничего не нада паять.
На самом деле их достаточно и для full debugging с оффициальных тулзов :)

4.R4400_Uman_book_Ed2.pdf - читаем о Kernel и User моде :) В кратце в user mode ты не можешь использовать часть регистров менять COP0 регистры и работать в области памяти 0x88000000 - 0x887FFFFF для этого нада перейти в kernel mode. Легальных способов на лету перейти в kernel нету.
Можна только использовать дыры в 1.5 прошивке в которых можно собрать application с флагом 0x1000 который говорит запускать start_entry не переходя в user mode (понятно что это достаточно грубое обьяснение). А kernel mode опять таки нужна для патчей биоса чтобы убрать некоторые протекты как минимум.
Кроме того только в kernel mode можна поставить exception handlers, interrupt handlers , и все что нужно для дебаггинга.

Но в твоем случае есть огромная проблема (я надеюсь что скоро сделаю статью на community по этому поводу). Дело в том что когда user mode application падает
в exception handling, там идет хитрожопый вызов trapEntry (потому что правильные пацаны debugging должны отрабатывать в exception handing mode, а psplink не знает как это делать) и они выходят с exception !!! в процедуру trapEntry которая находиться в области kernel mode памяти , но ERET возвращает нас при этом в user mode и соотв, PSP выключаеться :)
Есть способы как можна переключаться хитро, /me надееццо что чкоро их осветит на коммюнити :))

#2
11:32, 7 мар 2007

KmDm
есть желание на #ps2dev ?:)

#3
18:27, 7 мар 2007

есть желание на #ps2dev ?:)
KVaks - конечно, очень хочу!

Теперь фидбэк

1. Оффициальный devkit работает по SIO5 , то есть тот же RS232 (отсюда проблемы со скоростью обмена). Но !!! это единственный правильный режим в котором можна делать отладку!
и
Для целей только GDB ты зря паял SIO :) для элементарного дебаггинга все можна и на WiFi и на USB, в разы быстрее и ничего не нада паять.
Я не совсем понял ваше отношение к методу отладки через SIO, т.к. в этих двух цитатах вы несколько противоречите самому себе. Почему это единственно правильный режим? Потому что его предлагает Sony?
для элементарного дебаггинга все можна и на WiFi и на USB - если вы имете виду отладку через psplink, то ни sio ни usb у меня через psplink не заработали, а wifi адаптера нету.(

2. Если раскрывать то, что я ковырял в psplink. У меня на компе линуха нету, я собираю все через mingw через командную строку. Codewarrior - не знаком, пока использую в кач. ide микрософтовскую вижуалку. В документации по psplink говорится о программе pcterm, которую нужно сбилдить у себя, она требует libreadline5, я нашел положил куда надо, но к сожалению ошибки при сборке, которые связаны, имхо с тем что нужно все это под линухом собирать. Нашел уже собранный pcterm, обычный терминал наподобие HyperTerminal, запустил его на компе, проверил конекшен через sio, запустил psplink на зызе, но коннектиться не захотела. В pcterm тоже пусто. Вот вобщем и вся история ковыряния psplink.
Подскажите что я делал не так. Прошивка у меня, 3.03 OE-A.

3. Я не нашел ответа как мне в своем kernel mode лоадере запустить приложение в user mode так, чтобы оно могло через Kprintf посылать дебажную информацию в терминал.

#4
22:12, 7 мар 2007

KmDm

НУ зайди на mirc и мне или neteraseru или dDIMA private message , 4ьлбы сделали доступ на конал

Не противоречу! :) SIO единственный режим который может работать в exception handlere , остальные требуют активации interrupts, и thread processing.

все отлично собираеться работает и запускаеться на cygwin. есть собранные windows executable уже в инете и они отсматриваются по телнету.

Kprintf это запрещенно в user mode :) нада просто printf (он работает) :)

consoledevФорум

Тема в архиве.