← 목록
OS 2026-06-15 3KB 읽기 4분

요청: crownyos-tcp-opcode-베어메탈

  • 날짜: 2026-06-15 23:20:49
  • 작업 경로: /Users/ef/crowny-gateway

요청 본문

크라우니OS 베어메탈 네트워크 TCP opcode 실구현 첫 관문 조사+설계+가능시 1개 구현

관련 산출

(클로드가 작업 결과를 이어 기록)


완료 결과 (2026-06-15)

분석: 갭 5개 항목

opcodecrownyc_vm_core.c 이전crownyc.c POSIX 정본갭 내용
491PORT_OPEN (T 반환만)TCP_LISTEN (소켓 bind+listen)이름+시맨틱 완전 다름
492BIND (pop만)TCP_ACCEPT (accept → 클라이언트fd)이름+시맨틱 완전 다름
493LISTEN (pop만)TCP_READ ([fd,최대]→문자열핸들)이름+시맨틱 완전 다름
494ACCEPT (T 반환만)TCP_WRITE ([fd,str]→바이트수)이름+시맨틱 완전 다름
495REQUEST (0 반환)TCP_CLOSE ([fd])이름+시맨틱 완전 다름
핵심 발견: vm_core의 기존 이름(PORT_OPEN/BIND/LISTEN/ACCEPT/REQUEST)은 crownyc.c POSIX 버전과 완전히 다른 오래된 잔존 스텁. 한선씨 컴파일러는 TCP대기=491, TCP수락=492, TCP읽기=493, TCP쓰기=494, TCP닫기=495로 이미 확정돼 있음.

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 체인으로 가시)

검증

  1. 호스트 빌드: cc -O2 -DCROWNY_HOST_TEST -DCROWNY_MEM_MAX=2097152 vm_core_host_test.c → OK
  2. 한선씨 TC 실행: tcp베어메탈테스트.한선 → TCP대기(8080)→8080, TCP수락→1, TCP쓰기→6, TCP읽기→-1, TCP닫기→완료
  3. 루프백 왕복: 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)

  1. 베어메탈 빌드: crownyc_os.c 타겟 (arm64 cross) — CROWNY_HOST_TEST 없이 hal_net_ 경로 포함
  2. QEMU 검증: TCP대기(8080) → QEMU 루프백으로 한선씨 앱이 패킷 수발신
  3. TCP 세그먼트 캡슐화 v2: 이더넷+IP+TCP 헤더 조립을 case 491~494 안에서 구현
  4. TCP스택.한선 연동: 상태머신(SYN/ACK/FIN)을 HAL 레이어 위에서 실구동
  5. 멀티 클라이언트: 클라이언트fd 슬롯 배열 도입 (현재 단일 fd=1)