3차: How to Debug Linux Application

  • 첫 번째:샘플 먼저 이동
  • 2차: 통신 방법 및 메모리 매핑 정보
  • 3차: How to Debug Linux Application<---이번 내용
  • 4차: How to Debug Baremetal Firmware
  • 본 보도에 관하여


    OpenAMP를 사용하여 ZYBO에서 Linux+캐리어 메탈(or FreeRTOS)의 다중 환경을 구현했습니다.
  • CPU0: Linux
  • CPU 1: 금속 탑재(또는 FreeRTOS)
  • 자동 설치된 Linux 애플리케이션echo_test을 처음으로 동작 확인용 Linux 애플리케이션으로 사용합니다.이번에는 Xilinx SDK로 Linux 애플리케이션(설치, 디버깅)을 개발합니다.

    컨디션

  • 개발용 PC: Windows 1064-bit
  • Vivado 2017.4 WebPACK 라이센스
  • Xilinx SDK 2017.4
  • 개발용 PC(Linux): Ubuntu 16.04 본사(일본어 버전 아님)(on VirtualBox 5.2.4)
  • PetaLinux 2017.4
  • 타겟 보드: ZYBO(Z7-20)
  • 프로젝트 작성


    Linux System Root 준비


    이번 경우엔 이건 안 해도 돼.또 이 프로그램 자체가 OpenAmp에만 국한된 것이 아니라 통상적인 Linux 앱 개발도 마찬가지다.
    PetaLinux에 원래 Linux 이미지가 만들어졌다고 가정하고 비표준 라이브러리를 설치합니다.XSDK(on Windows)에도 최소한의 를 설치했지만 없을 수 있습니다.이때 머리와 프로그램 라이브러리가 필요합니다.따라서 Peta Linux에서 System Root을 복제해야 합니다.
    먼저 Linux 이미지를 만드는 PetaLinux 프로젝트 디렉토리에서 다음 명령을 사용하여 System Root을 아카이빙합니다.중심은 실체화 기호 링크다.심볼릭 링크를 계속 사용하면 Windows로 복사할 때 사용할 수 없습니다.
    PetaLinux 프로젝트 디렉토리(Ubuntu)
    zip -r plnx_arm.zip build/tmp/sysroots/plnx_arm
    
    이것을 윈도우의 적당한 위치로 해동하세요.(예: C:\asd\dev\zynq\vivado\project_openamp\project_openamp.sdk\sysroots\plnx_arm

    XSDK 프로젝트 제작


    XSDK를 시작하고 메뉴 표시줄 ->File->New->Application Project를 엽니다.
    다음 설정에서 myecho_테스트라는 프로젝트를 만듭니다.Linux System Root의 설정이 중요합니다.

    XSDK 프로젝트 설정


    Project Explorer->제작된 프로젝트(my echo test)->오른쪽 키->Properties->C/C++ Build->Settings->ARM v7 Linux gcc linker->Miscellaneous를 선택합니다.
    Linker Flags에서 다음 값을 설정합니다.경로를 적절하게 교체하십시오.--sysroot=C:\asd\dev\zynq\vivado\project_openamp\project_openamp.sdk\sysroots\plnx_arm상황에 따라 프로그램 라이브러리가 필요할 수도 있습니다.(이번엔 필요 없어.)
    Project Expler->제작된 프로젝트(my echo test)->오른쪽 키->Properties->C/C++ Build->Settings->ARM v7 Linuxgcc linker->Libraries를 선택합니다.리브레이스에서 추가metal.

    소스 코드 쓰기


    귀찮아서 echo테스트와 같은 코드를 가지고 올게요.다음 소스 코드를 복사합니다.
    https://github.com/Xilinx/meta-openamp/blob/rel-v2017.4/recipes-openamp/rpmsg-examples/rpmsg-echo-test/echo_test.c
    구축 성공 후 myecho_test.엘프를 만들었을 거예요.

    디버깅


    OpenAMP 환경 준비


    my_echo_test는 메아리의 캐리어 금속(BM) 펌웨어와 동작을 조화시킨다.따라서 처음과 마찬가지로 BM 측 펌웨어를 로드하고 OpenAMP를 시작해야 합니다.
    다음 명령은 펌웨어를 메아리로 보여 줍니다.
    OpenAMP 시작 명령
    modprobe rpmsg_user_dev_driver
    echo image_echo_test > /sys/class/remoteproc/remoteproc0/firmware
    echo start > /sys/class/remoteproc/remoteproc0/state
    

    디버깅


    디버깅 방법은 일반적인 리눅스 응용 프로그램의 디버깅과 같습니다.( https://qiita.com/take-iwiw/items/8134ca7098622219b177 )
    먼저 ZYBO의 UART 터미널에서 ifconfig 등을 통해 IP 주소를 확인하십시오.(192.168.1.87 기준)
  • XSDK에서 myecho_test.elf로 우클릭->Debug As->Debug Configuration, 열기
  • Xilinx C/C++ applications (system Debugger) 아래에 아무것도 없으면 더블 클릭
  • Target Setup 탭에서 Connection 옆에 있는 New 를 클릭합니다.
  • 호스트에 192.168.1.87
  • 설정
  • Application 태그에서 myecho_test.elf
  • 선택 확인
  • 애플, Debug 를 클릭합니다.
  • 두 번째 이후에는 Debug 버튼으로 직접 실행할 수 있음
  • 만약 실행이 순조롭다면,main 함수의 시작에서 멈추십시오.
    그런 다음 Resume이 시작되면 프로그램이 시작됩니다.
    좋아하는 곳에서 멈추고 변수를 확인할 수 있을 거예요.

    다시 실행할 때


    마지막으로 기록한 바와 같이 다시 실행할 때 OPEN AMP를 한 번 종료해야 합니다.
    ZYBO 단말기
    echo stop > /sys/class/remoteproc/remoteproc0/state
    echo start > /sys/class/remoteproc/remoteproc0/state
    

    (할인) 파이썬의 경우


    파이톤에서 다음 코드를 통해 통신할 수 있습니다.
    주의점open("/dev/rpmsg0", "r+")이 열렸을 때 통신이 원활하지 않습니다.os.open("/dev/rpmsg0", os.O_RDWR).
    def main():
        while(not (os.path.exists("/dev/rpmsg0"))):
            sleep(1)
    
        rpmsg = os.open("/dev/rpmsg0", os.O_RDWR)
    
        os.write(rpmsg, "ABC")
        readValue = os.read(rpmsg, 20)
        print("readValue = " + readValue)
    
        os.close(rpmsg)
    
    if __name__ == '__main__':
        main()
    

    좋은 웹페이지 즐겨찾기