요청: crownyos-tcp-opcode-베어메탈
- 날짜: 2026-06-15 23:20:49
- 작업 경로: /Users/ef/crowny-gateway
요청 본문
크라우니OS 베어메탈 네트워크 TCP opcode 실구현 첫 관문 조사+설계+가능시 1개 구현
관련 산출
(클로드가 작업 결과를 이어 기록)
완료 결과 (2026-06-15)
분석: 갭 5개 항목
| opcode | crownyc_vm_core.c 이전 | crownyc.c POSIX 정본 | 갭 내용 |
|---|---|---|---|
| 491 | PORT_OPEN (T 반환만) | TCP_LISTEN (소켓 bind+listen) | 이름+시맨틱 완전 다름 |
| 492 | BIND (pop만) | TCP_ACCEPT (accept → 클라이언트fd) | 이름+시맨틱 완전 다름 |
| 493 | LISTEN (pop만) | TCP_READ ([fd,최대]→문자열핸들) | 이름+시맨틱 완전 다름 |
| 494 | ACCEPT (T 반환만) | TCP_WRITE ([fd,str]→바이트수) | 이름+시맨틱 완전 다름 |
| 495 | REQUEST (0 반환) | TCP_CLOSE ([fd]) | 이름+시맨틱 완전 다름 |
hal_network.h 구조
NET_BACKEND_LOOPBACK(기본): 8-슬롯 링버퍼 send→recv self-echo. hal_net_init/send/recv/mac/link.PLATFORM_JETSON: Tegra234 EQOS (DesignWare QoS GbE) DMA 디스크립터 링 골격 (PHY/클럭 미구현, [추정]).crownyc_os.c이미#include "../hal/hal_network.h"+hal_net_init()호출 확인.
구현: crownyc_vm_core.c 수정
#ifdef CROWNY_HOST_TEST / #else 이중경로 구조:
- HOST_TEST 경로: hal_net_ 없이 최소 스텁 (기존 vm_core_host_test.c 호환)
- 베어메탈 경로: hal_net_send/recv 직접 호출 (crownyc_os.c include 체인으로 가시)
검증
- 호스트 빌드:
cc -O2 -DCROWNY_HOST_TEST -DCROWNY_MEM_MAX=2097152 vm_core_host_test.c→ OK - 한선씨 TC 실행: tcp베어메탈테스트.한선 → TCP대기(8080)→8080, TCP수락→1, TCP쓰기→6, TCP읽기→-1, TCP닫기→완료
- 루프백 왕복: hal_net_send("크라우니OS베어메탈") → hal_net_recv → bytes=26 PASS
파일 목록
/Users/ef/CrownyOS/crownyc/crownyc_vm_core.c— TCP opcode 491~495 실구현/Users/ef/CrownyOS/crownyc/tcp베어메탈테스트.한선— 한선씨 TC/Users/ef/CrownyOS/crownyc/tcp베어메탈테스트.rpn.한선— RPN 정본
MAIN 세션이 할 것 (integration_needed)
- 베어메탈 빌드:
crownyc_os.c타겟 (arm64 cross) — CROWNY_HOST_TEST 없이 hal_net_ 경로 포함 - QEMU 검증:
TCP대기(8080)→ QEMU 루프백으로 한선씨 앱이 패킷 수발신 - TCP 세그먼트 캡슐화 v2: 이더넷+IP+TCP 헤더 조립을 case 491~494 안에서 구현
- TCP스택.한선 연동: 상태머신(SYN/ACK/FIN)을 HAL 레이어 위에서 실구동
- 멀티 클라이언트: 클라이언트fd 슬롯 배열 도입 (현재 단일 fd=1)