рдЬреАрдбреАрдмреА рдореЗрдВ рдорд┐рдЯреНрдо-рдЬреИрд╕реЗ рдЖрд░рдЯреАрдУрдПрд╕ рд╕рдкреЛрд░реНрдЯ

рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕реЛрдЪрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрдмреЗ рдкрд░ рдПрдХ рд▓реЗрдЦ рдХреЛ рдкреБрдирдГ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдореИрдВрдиреЗ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рдпрд╣ рдирд┐рд╖рд┐рджреНрдз рдирд╣реАрдВ рд╣реИред рдЕрдЧрд░ рдореИрдВрдиреЗ рдХреЛрдИ рдЧрд▓рддреА рдХреА рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдХрд░реВрдВрдЧрд╛ :)


рдЗрд╕рд▓рд┐рдП...


рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ, рдореИрдВ рдХреЗ рд▓рд┐рдП рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛрдб рд▓рд┐рдЦрд╛ Epiphan AV.io рдкрдВрдХреНрддрд┐ рдХрд╛ grabbers:


  • AV.io HD - рд╣рдорд╛рд░реЗ рдкрд╛рдпрд▓рдЯ, рдЬрд┐рд╕ рдкрд░ рдмрд╣реБрдд рдбрд┐рдмрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
  • AV.io sdi - рдкрджреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдирд╛
  • AV.io 4K - рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирдП рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдФрд░ рдирдП рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдЕрдм рд╣рдо рд▓рдЧрднрдЧ рддреБрд░рдВрдд рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ
  • KVM2USB 3.0 - AV.io HD рдХрд╛ рдЧрд╣рд░рд╛ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмреЗрд╕ рдореЙрдбрд▓ рдореЗрдВ рдЖрдзреБрдирд┐рдХреАрдХрд░рдг рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓рдЧрднрдЧ рдХреЛрдИ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд╕рд╛рде, рд╡реЗ рдПрдХ рдирдпрд╛ рдЙрддреНрдкрд╛рдж рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред

рд╕рд░реВ FX3 рд╡рд╣рд╛рдБ рд╢рд╛рдорд┐рд▓ рдерд╛ , рдФрд░ SDK рдереНрд░реЗрдбрдПрдХреНрд╕ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ JTAG рдбрд┐рдмрдЧрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдУрдкрдирдУрд╕реАрдбреА рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдУрд▓реАрдореЗрдХреНрд╕ рдПрдЖрд░рдПрдо-рдпреВрдПрд╕рдмреА-рдУрд╕реАрдбреА-рдПрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдУрдкрдирдУрд╕реАрдбреА рдХреЛ рдЖрд░рдЯреАрдУрдПрд╕ рдореЗрдВ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реИ, рдФрд░ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореВрд▓ рд╕рдорд░реНрдерди рдХреЛрдб рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рд╕реНрдЯреИрдХрд┐рдВрдЧ рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд╕реЗ рдЕрд▓рдЧ рдерд╛ред рдореБрдЭреЗ рд╕рдордЭрдирд╛ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдерд╛ ред рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП JTAG рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд▓рд╛рдн рдХреЛ рдХрдо рд╕реЗ рдХрдо рд╡рд┐рддрд░рд┐рдд рдХрд╛рдо рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрдо рдХрд░рдХреЗ рдЖрдВрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред


рдЗрд╕рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд▓ рд░рд╣рд╛ рд╣реИред рдЕрдм рдпрд╣ Xilinx рдХреЗ FPGA рдФрд░ рдЗрд╕рдХреЗ рдорд╛рдЗрдХреНрд░реЛрдмреНрд▓рд╛рдЬрд╝ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдмрд╛рд░реА рд╣реИ, рдЬрд╣рд╛рдБ рдЖрдк рдкреЛрд░реНрдЯ рдХрд┐рдП рдЧрдП FreeRTOS рд╕рдВрд╕реНрдХрд░рдг 10.x рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕реА рд╣реА рд╣реИ: рдбрд┐рдмрдЧрд░ рдореЗрдВ рдереНрд░реЗрдбреНрд╕ рдХрд╛ рдХреЛрдИ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ!


XSDK рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЯреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧреАрдд


Xilinx рдПрдХ ARM Cortex-A53, ARM Cortex-R5 рдФрд░ MicroBlaze рдХреЛрд░ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕рдХрд░ рдПрдХреАрдХреГрдд рдШрдЯрдХреЛрдВ рдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдорд╛рдЗрдХреНрд░реЛрдмреНрд▓рд╛рдЬ рдЕрд▓рдЧ рдЦрдбрд╝рд╛ рд╣реИ - рдпрд╣ рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╣реИ рдЬрд┐рд╕реЗ FPGA рдХреЗ рдЕрдВрджрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗрд╡рд▓ рдЪрд┐рдк рдореЗрдВ рдореБрдХреНрдд рд╕реНрдерд╛рди рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╕реАрдорд┐рдд рд╣реИред


( CPU, FPGA, тАФ Vivado) тАФ XSDK ( 2020 Vitis), Eclipse. FPGA . , JTAG ( OpenOCD!) , . : , , .


, Eclipse, , тАФ XSTC. . .


.


JTAG hw_server. TCP , тАФ 3121, , , 3000 тАФ GDB :


  • N+0 (3000) тАФ ARM Cortex-A53
  • N+1 (3001) тАФ ARM Cortex-R5
  • N+2 (3002) тАФ MicroBlaze ( )

-, .


, . , . , ( !) тАФ System Debugger GDB. MicroBlaze GDB тАФ mb-gdb.


System Debugger . , Xilinx GDB тАФ .


,


, RTOS OpenOCD, , , :


  1. RTOS TCB (Thread Control Block), , . . ( ) тАФ Reverse Engineering! : , , .
  2. RTOS тАФ . , , . , , тАФ . .. . тАФ .
  3. 1 тАФ TCB ( тАФ RTOS).

, GDB GDB , info threads info registers thread N bt.


, RTOS , , RTOS ( , SDK , ). , .


: . . p , , . , ThreadX Cypress FX3. , . тАФ .


тАж GDB-client GDB-server , , , MitM ""? , , , , ?


, : . gdbproxy , .


тАФ . C++ ( , , ), Asio, C++17 , , C++2a тАФ , , , 100%, 90% !


,


, тАФ . . Asio , . . .


: . TCB, . тАж GDB- . . тАж ! тАФ . , , ( тАФ ) : qSymbol::, : - ? тАФ . тАФ , . qSymbol:NAME, qSymbol:ADDR:NAME qSymbol::NAME , nullptr. - ( , тАФ ) , .


. , , , , тАФ тАж , !


.. , .


, : , . .


, . . (SMP , ) тАФ . GDB ( ) тАФ : . .


, GDB-client . , . : - , - SP (Stack Pointer) FP (Frame Pointer) . , .


: Set Current Thread ( OK EXX тАФ XX тАФ , ), . RTOS, , , . , тАФ . тАФ Current Execution? : тАФ . , . ! . Set Current Thread Set Current Thread , xxxxxxxx , тАФ ! , RTOS , Set Current Thread , Set Current Thread . : . .


, SP : TCB . SP , .


, . . Stop Reply Packets. , . , breakpoint, watchpoint Break ( , , 0x03 Stop Reply Packet). , , . Stop Reply Packet, . . Stop Reply Packets : vCont c тАФ Continue s тАФ Step ( ).


. , , .


, , . : . тАФ . GDB. MicroBlaze GDB microblaze-tdep.h enum microblaze_regnum:


enum microblaze_regnum
{
  MICROBLAZE_R0_REGNUM,
  MICROBLAZE_R1_REGNUM, MICROBLAZE_SP_REGNUM = MICROBLAZE_R1_REGNUM,
  MICROBLAZE_R2_REGNUM,
  MICROBLAZE_R3_REGNUM, MICROBLAZE_RETVAL_REGNUM = MICROBLAZE_R3_REGNUM,
  MICROBLAZE_R4_REGNUM,
  MICROBLAZE_R5_REGNUM, MICROBLAZE_FIRST_ARGREG = MICROBLAZE_R5_REGNUM,
  MICROBLAZE_R6_REGNUM,
  MICROBLAZE_R7_REGNUM,
  MICROBLAZE_R8_REGNUM,
  MICROBLAZE_R9_REGNUM,
  MICROBLAZE_R10_REGNUM, MICROBLAZE_LAST_ARGREG = MICROBLAZE_R10_REGNUM,
  MICROBLAZE_R11_REGNUM,
  MICROBLAZE_R12_REGNUM,
  MICROBLAZE_R13_REGNUM,
  MICROBLAZE_R14_REGNUM,
  MICROBLAZE_R15_REGNUM,
  MICROBLAZE_R16_REGNUM,
  MICROBLAZE_R17_REGNUM,
  MICROBLAZE_R18_REGNUM,
  MICROBLAZE_R19_REGNUM,
  MICROBLAZE_R20_REGNUM,
  MICROBLAZE_R21_REGNUM,
  MICROBLAZE_R22_REGNUM,
  MICROBLAZE_R23_REGNUM,
  MICROBLAZE_R24_REGNUM,
  MICROBLAZE_R25_REGNUM,
  MICROBLAZE_R26_REGNUM,
  MICROBLAZE_R27_REGNUM,
  MICROBLAZE_R28_REGNUM,
  MICROBLAZE_R29_REGNUM,
  MICROBLAZE_R30_REGNUM,
  MICROBLAZE_R31_REGNUM,
  MICROBLAZE_PC_REGNUM,
  MICROBLAZE_MSR_REGNUM,
  MICROBLAZE_EAR_REGNUM,
  MICROBLAZE_ESR_REGNUM,
  MICROBLAZE_FSR_REGNUM,
  MICROBLAZE_BTR_REGNUM,
  MICROBLAZE_PVR0_REGNUM,
  MICROBLAZE_PVR1_REGNUM,
  MICROBLAZE_PVR2_REGNUM,
  MICROBLAZE_PVR3_REGNUM,
  MICROBLAZE_PVR4_REGNUM,
  MICROBLAZE_PVR5_REGNUM,
  MICROBLAZE_PVR6_REGNUM,
  MICROBLAZE_PVR7_REGNUM,
  MICROBLAZE_PVR8_REGNUM,
  MICROBLAZE_PVR9_REGNUM,
  MICROBLAZE_PVR10_REGNUM,
  MICROBLAZE_PVR11_REGNUM,
  MICROBLAZE_REDR_REGNUM,
  MICROBLAZE_RPID_REGNUM,
  MICROBLAZE_RZPR_REGNUM,
  MICROBLAZE_RTLBX_REGNUM,
  MICROBLAZE_RTLBSX_REGNUM,
  MICROBLAZE_RTLBLO_REGNUM,
  MICROBLAZE_RTLBHI_REGNUM,
  MICROBLAZE_SLR_REGNUM, MICROBLAZE_NUM_CORE_REGS = MICROBLAZE_SLR_REGNUM,
  MICROBLAZE_SHR_REGNUM,
  MICROBLAZE_NUM_REGS
};

, . - , , 00000000 xxxxxxxx, тАФ , тАФ : unavail. тАФ . , qFeatures (TBD: !) , тАФ .


, ?


: https://github.com/h4tr3d/gdbproxy/


, BSD MIT. OpenOCD (, : , , , ). .


: . , , RTOS, . . .


?


XSDK:


  1. тАФ GDB , System Debugger
  2. GDB, 4002 ( gdbproxy, )
  3. gdbproxy, XSDK hw_server :
    ./gdbproxy --port 4002 --remote-host localhost --remote-port 3002 -- mb_freertos
  4. ...
  5. PROFIT!

рд░рд┐рдореЛрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ hw_server, XSDK рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЫреЛрдЯреЗ рд▓рдЪреАрд▓реЗрдкрди рдХреЗ рдХрд╛рд░рдг, рдЗрд╕реЗ gdbproxyрдЙрд╕реА рдорд╢реАрди рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП hw_serverред


рдЬрд╛рдБрдЪ - рдкрд░рд┐рдгрд╛рдо


рдХреЛрдИ рдирд╣реАрдВред рдмрд╕ рдиреАрдЪреЗ рдХреА рд░реЗрдЦрд╛: FreeRTOS рдФрд░ MicroBlaze рдкрд░ рдереНрд░реЗрдбрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


All Articles