ZYBO Z7 기반 ZYNQ 시작(7) Linux 환경에서 UDP 통신(사용자 응용)
컨디션
Linux 사용자 애플리케이션을 통한 UDP 통신
그런 다음 UDP 통신을 위해 ZYBO의 Linux에 사용자 애플리케이션을 설치합니다.
Xilinx SDK를 사용하여 Linux 사용자 애플리케이션 생성
프로젝트 작성
PetaLinux 도구도 사용자 앱을 개발할 수 있지만 구축 후 SD카드에 쓰기 디버깅으로 바뀌기 때문에 XilinkSDK로 사용자 앱을 개발할 것이다.
SDK의 메뉴 표시줄 -> New -> Application Project에 새 소프트웨어 프로젝트를 만듭니다.
192.168.1.12의 포트 5201에 1초에 UDP 데이터(Hello World)를 보내는 프로그램(컨트롤러도 Hello World를 출력)을 위해 src/hello World.c를 다음과 같이 변경합니다.
helloworld.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{
int sock;
struct sockaddr_in addr;
sock = socket(AF_INET, SOCK_DGRAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(5201);
addr.sin_addr.s_addr = inet_addr("192.168.1.12");
while(1) {
printf("Hello World\n");
sendto(sock, "Hello World", 11, 0, (struct sockaddr *)&addr, sizeof(addr));
usleep(1000000);
}
close(sock);
return 0;
}
실행/디버깅
이더넷 케이블로 ZYBO와 XilinkSDK 동작을 연결하는 Windows PC는 SD카드부터 Linux에서 시작하는 ZYBO의 전원을 켭니다.
메뉴 막대->Run->Run Configuration(또는 Debug Configuration)을 엽니다.XilinxC/C+applications(System Debugger)를 두 번 클릭하면 새 System Debugger를 만들 수 있으므로 Target SetUp 탭에서 Linux Application Debug를 선택하고 New를 클릭합니다.New Target Connection은 다음과 같이 설정됩니다.
애플 탭의 프로젝트 Name 브라우저에서udpclient를 선택하면 Path가 자동으로 설정됩니다.
애플이 나타나면 Run을 클릭하여 ZYBO에서 프로그램을 실행합니다.또한 Windows PC 환경에서는 UDP를 수신할 수 없으므로 Wireshark를 사용하여 디버깅을 수행했습니다.
사용자 응용 프로그램의 루트 fs 가져오기
Xilink SDK로 제작된udpclient입니다.Elf를 Ubuntu PC의 ~/에 복사합니다.Peta Linux 도구로'udpclient'라는 앱을 만들고'udpclient'라는 소프트웨어를 만들었다.elf 파일을 복사하여 구성합니다.
$ source /opt/pkg/petalinux/settings.sh
$ cd ~/petalinux/project_1/
$ petalinux-create -t apps --template install --name udpclient --enable
$ mv ~/udpclient.elf project-spec/meta-user/recipes-apps/udpclient/files/udpclient
$ petalinux-build
SD 카드에서 실행
SD 카드에 이미지를 인쇄합니다.ub를 복사하여 ZYBO를 시작하면udpclient 명령을 실행할 수 있습니다.
이더넷 케이블로 ZYBO와 Ubuntu PC를 연결해 Ubuntu PC에서 UDP를 받은 뒤 데이터를 받는 프로그램(udpserver.c)을 만들어 실행한다.
udpserver.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{
int sock;
struct sockaddr_in addr;
char buf[2048];
sock = socket(AF_INET, SOCK_DGRAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(5201);
addr.sin_addr.s_addr = INADDR_ANY;
bind(sock, (struct sockaddr *)&addr, sizeof(addr));
while(1){
memset(buf, 0, sizeof(buf));
recv(sock, buf, sizeof(buf), 0);
printf("%s\n", buf);
}
close(sock);
return 0;
}
$ gcc udpserver.c -o udpserver
ZYBO에서udpclient를 실행한 후 Ubuntu PC는 1초마다 Hello World를 수신하여 표시합니다.Ubuntu PC의 Wireshark도 확인할 수 있습니다.
Reference
이 문제에 관하여(ZYBO Z7 기반 ZYNQ 시작(7) Linux 환경에서 UDP 통신(사용자 응용)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/nao23/articles/e98002e488b52e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)