← 목록
기타 2026-06-10 25KB 읽기 29분

크라우니VM for Mac — 패러랠즈 대용 + CrownyOS 완성 마스터플랜

개요

맥에서 패러랠즈 동시실행(Coherence) 대용으로 동작하는 크라우니VM for Mac을 완성한다.

  • 윈도우/리눅스를 마운트하는 VM 본체 = CrownyVM (기존 crowny-vm v0.2.0, "Ducker"의 GUI 탑재 후속).
  • 그 위에서 CrownyOS(RPi5/레노보 m70q/젯슨 AGX/젯슨 NX 대응)를 완성해 게스트로 부팅.
  • 게스트 위 앱이 패러랠즈 Coherence처럼 맥의 별도 앱(창)으로 동시실행.
  • 앱 = 지금까지 만든 전체 서비스 + 엔터프라이즈 모듈.
명칭 정리: 사용자가 말한 "Ducker"는 GUI 없는 초기 컨테이너 모드였고, 이번 GUI 탑재 패러랠즈 대용 본체는 이미 존재하는 CrownyVM으로 일원화한다.

정찰 결과 (2026-06-10) — 재사용 가능 자산

자산경로완성도역할
CrownyVM 하이퍼바이저/Users/ef/crowny-vm85%본체. Hypervisor.framework, VirtIO 9종, x86→ARM64 변환, qcow2/iso, Cocoa 디스플레이. 바이너리(crownyvm 117KB) 빌드됨
Cocoa 윈도우CrownyOS/crownyc/crownyc_window.m90%앱당 NSWindow 베이스 (패러랠즈식 스케일링)
컴포지터CrownyOS/crownyc/compositor.h/c70%창 매니저·독·메뉴바·6테마 → 창 열거
뷰.한선CrownyOS/crownyc/libs/뷰.한선80%데스크톱 UI 한선씨 조립
웹코드 188모듈CrownyOS/crownyc/libs/95%앱 UI 즉시활용
디자인 6테마CrownyDoc/src/design-system.css100%골드 #C9A961 / TOAU
CrownyOS 커널/Users/ef/CrownyOS90%virt aarch64 = VM 게스트
앱 생태계 129앱/Users/ef/crowny-app80%앱 카탈로그
엔터프라이즈 35모듈/Users/ef/crowny-enterprise/modules75%엔터프라이즈 앱 그룹
사용자의 "엔터프라이즈 81개 모듈"은 실제로는 crowny-pay 특허 81건과 혼동된 것. 엔터프라이즈 모듈 실측 = 35개(.한선). 앱 카탈로그 합계 = 225개(서비스 170 + 엔터프라이즈 35 + 네이티브 17 + 레거시게스트 3).

타겟 4종 현황

타겟아키완성도비고
RPi5AArch6495%베어메탈 실부팅. 동결 유지
젯슨 AGXAArch6468%QEMU부팅O, 실HW TRM 확정 필요
젯슨 NXAArch640%신규 (Tegra 재사용 → 저비용)
레노보 m70q(N100)x86_640%신규 (별도 아키, 최대 격차)
virt (VM 게스트)AArch6485%★ CrownyVM이 실행하는 이미지

격차 → 웨이브

  • G1/G8 CrownyVM 게스트 부팅·윈도우 마운트 미검증 → Wave 1
  • G2 Coherence 동시실행 브릿지 부재(핵심 신규) → Wave 2
  • G3 앱 카탈로그 런처 통합 → Wave 3
  • G4/G5/G6 젯슨NX·N100·AGX 타겟 완성 → Wave 4
  • G7 맥 데스크톱 GUI 통합 + 적대검증 → Wave 5

구조화 DB (에이전트 단일 진입점)

/Users/ef/crowny-vm/마스터플랜/

  • 자산.json — 재사용 자산 인벤토리(SSOT)
  • 타겟.json — 4타겟+게스트 현황
  • 앱카탈로그.json — 225앱 4존 분류 (생성기 카탈로그생성.js)
  • 격차.json — 격차 8건
  • 웨이브.json — 5웨이브 작업 분해
  • 매칭.jsJS 매칭 엔진 (자산/앱/격차/웨이브/타겟/현황/매칭)
  • 매칭.한선 — 한선씨 정본 동반 (컴파일·실행 검증 완료)
조회 예:
bashnode 매칭.js 현황
node 매칭.js 매칭 "Coherence 창 동시실행 vsock"
node 매칭.js 앱 enterprise

Coherence(동시실행) 아키텍처 (Wave 2 핵심)

[맥 호스트]  NSWindow(앱A)  NSWindow(앱B)  ...   ← crownyc_window.m 확장
                  ↑ fb타일 스트림 / ↓ 입력 역라우팅
            ┌──────── VirtIO-vsock 브릿지 (0x0A000C00) ────────┐
[게스트 CrownyOS]  compositor 창 열거 → 창별 fb 영역 export

진행 방식

울트라 병렬(Workflow)로 웨이브별 진행. 검증 = 크라우니시뮬레이터 + 크라우니스피어(적대), 새 GUI 첫검증 = 크라우니브라우저. 한선씨 우선(.한선 동반), 비-한선은 변환 대기열.

✅ Wave 1 완료 (2026-06-10)

CrownyVM이 CrownyOS를 게스트로 셸까지 완전부팅. --kernel 직접부팅으로 장치 6종(스토리지/디스플레이/네트워크/I2C/USB/IRQ+타이머) init 후 >> 셸 도달.

수정/추가 (모두 빌드+서명+부팅 검증):

  1. VM-BUG-1 core/memory.c — 게스트 RAM을 0x0 → 0x40000000(QEMU virt RAM base) 매핑. 플래시(0x0)/MMIO 충돌 해소.
  2. VM-BUG-2 core/smp.c+vcpu_loop.c+crownyvm.hhv_vcpu_createvCPU 실행 스레드에서 호출(HVF 스레드 바인딩). HV_BAD_ARGUMENT/BUSY 해소.
  3. VM-FEAT-1 config.c+main.c+vcpu.c--kernel raw aarch64 직접부팅(UEFI 우회).
  4. VM-ENV-1codesign --entitlements com.apple.security.hypervisor 필수(hv.entitlements repo 보존).
부수확인: edk2 UEFI(/opt/homebrew/share/qemu/edk2-aarch64-code.fd)도 실행/UART출력 확인(PlatformPei ASSERT 잔여 — CrownyOS 게스트엔 불필요). 대장 = crowny-vm/마스터플랜/부팅대장.json.

🔄 Wave 2 진행 (Coherence 동시실행 브릿지)

울트라 병렬(4에이전트) 설계 + 메인세션 구현. 산출 = /Users/ef/crowny-vm/coherence/:

  • ✅ 프로토콜 설계(프로토콜.md) — 4포트(CONTROL/FRAME/INPUT/CURSOR), COH_MAGIC, 핸드셰이크, 창 생명주기, 더티타일 증분, 입력 역전송, 커서, 하트비트
  • ✅ 공유헤더(coherence_proto.h) — coh_msg_hdr_t=12B, 6 메시지군, 4상 phase 태깅. 컴파일 검증
  • 게스트 송신기(coherence_guest.c) — 컴포지터 창→직렬화→vsock. 어댑터 분리로 단독 컴파일+셀프테스트 PASS(11메시지/4타일)
  • ✅ 한선씨 동반(창내보내기.한선, rle디코드.한선), 호스트 인터페이스(coherence_host.h)
  • 호스트 코어(coherence_host_core.c) — 재조립/디스패치/창테이블/백킹버퍼 blit/입력 역전송, 순수 C
  • E2E 왕복 PASS(e2e_test.c) — 게스트→호스트 HELLO/ACK+창2개+타일blit(픽셀검증)+포커스. test.sh 3/3
  • Cocoa 셸(coherence_host.m) — CohView backing_px→CGImage blit(60fps), 앱당 NSWindow, NSEvent→send. crownyvm 빌드+링크
  • vsock 브리지(coherence_bridge.c+virtio_vsock 훅) — TX 게스트→호스트 완전배선, RX 구조배선
  • crownyvm 통합(142KB) — 부팅 시 [Coherence] 브리지 활성 + CrownyOS 게스트 셸 정상
  • 게스트측 완성coherence_glue.c(virtio-mmio vsock 드라이버+coh_src_) + compositor_coh.c(coh_comp_ 접근자) + virtq_write(RX 게스트쓰기). freestanding 컴파일
  • 풀스택 E2E PASScoh_fullstack_test.c: Compositor 2창→실접근자→glue→guest→호스트코어, NSWindow 2개+제목+fb픽셀 통과. coh_test.sh 3/3. (버그수정: send 규약 0=성공)
  • ⏳ 미완(환경 의존, 헤드리스 불가): coh_comp_bind+coh_guest_export 컴포지터 루프 연결 + 베어메탈 컴포지터 구동 + 맥 GUI 세션 라이브 표시
Wave 2 = 소프트웨어 ~95% 완성. 전 계층 컴파일+E2E 검증.

상세 = crowny-vm/coherence/진행상황.md.

🔄 Wave 4 진행 (OS 4타겟 — 울트라 딥리서치 5트랙)

백그라운드 워크플로우 딥리서치(WebSearch 79회) + 메인세션 통합:

  • 젯슨 NX 0→70%hal_jetson_nx.h(검증: UART-A 0x03100000 NS16550, mainline tegra234.dtsi) + linker-jetson_nx.ld + build-crownyos.sh jetson_nx 추가 → kernel8.img 94224B 빌드 성공. start_orinnx.S 재사용(동일 SoC)
  • 젯슨 AGX 68→75% — UART-A 0x03100000 mainline DTS로 확정, hal_jetson.h 추정→확정, docs/JETSON_AGX_TRM.md. ⚠ 데브킷 기본 콘솔 TCU≠UART-A
  • 레노보 m70q(N100) 0→15% — UEFI-only PE32+ BOOTX64.EFI 경로 확정, docs/X86_PORT_DESIGN.md + hal_x86.h(0x3F8 16550, x86타겟 구문검증) + linker-x86.ld. 풀 빌드브랜치/efi_x86.c는 Wave X 잔여. 단기 우회=CrownyVM translate
  • RPi5 95% / virt 92% 동결 회귀 OK
  • ✅ 앱 런처(런처.한선 실행 검증) + 독구성 설계 + 데스크톱 설계(desktop_design.md)
충돌 방지: 워크플로우는 리서치+내용반환만, 파일/빌드 통합은 메인세션 단독 → 병렬 쓰기 충돌 0.

🔄 Wave 5 진행 (맥 데스크톱 GUI)

  • ✅ 설계 coherence/desktop_design.md
  • 데스크톱 셸 데스크톱.한선 — 자립형 고수준 재작성(메뉴바+독8앱+창목록+골드#C9A961 테마), 컴파일·실행 검증. 헤드리스 렌더 OK
  • 🔑 발견: 뷰.한선/스타일.한선RPN 방언(._라벨/)이라 hanseonc_high import 불가 → 자립형/웹코드 사용 (메모리 feedback_hanseon_view_rpn_dialect)
  • 크라우니스피어 적대검증 S등급(96%)crowny-spear/engine/스피어_coherence.한선 12벡터(정적 불변식). PASS 11·PART 1·VULN 0. 프레임재생 가드 추가(창→방패 나선). 리포트 crowny-spear/reports/
  • 크라우니 동적 시뮬레이션 스윕 100%coh_sim_sweep.c 168케이스(창수7×크기6×가시2×재생2) 실제 coherence_guest+host_core 실행. 크래시0+창테이블/백킹정합. 초과16클램프·엣지타일·거대창·재생 포함. test.sh 4단계로 회귀화
  • ⏳ 잔여: 실 GUI 렌더(compositor 구동/GUI 세션)

🎉 시각적 완성 (2026-06-11)

CrownyOS 게스트 앱이 별도 맥 창으로 표시 — 사용자 목표(패러랠즈 동시실행) 시각 달성:

  • crownyvm --gui(main.c NSApp 런루프 + coh_gui_run) + GUI커널 guest_gui_boot(0) 연속렌더
  • 게스트 컴포지터 Terminal/Finder → 호스트 NSWindow 2개(System Events "🟡 CrownyOS: Terminal/Finder" 확인, 스크린샷 증거)
  • CohView가 backing_px→CGImage로 그림(60fps)
  • 잔여: 창 콘텐츠 렌더 품질(fb_draw_text 막대→실폰트), 헤드리스 정상부팅·전회귀 그린 유지

✅ Coherence 증분 프레임 (2026-06-11) — Wave2 100%

키프레임 전송만 하던 것을 키프레임→증분으로 완성:

  • coherence_glue.c 창별 g_kf_seen 추적: 첫 노출/추적초과 = 키프레임(full=1), 이후 = 증분(full=0, 더티 타일만), 120프레임마다 주기 키프레임(드롭 복구), 0더티 창은 송신 생략
  • compositor.c 더티 클리어 직전 coh_dirty_snap 스냅샷 — export 훅이 클리어 에 실행되므로 스냅샷을 읽어야 증분 가능. 커서 블링크 dirty_mark_all활성 창만 더티
  • 검증: 호스트 COH_FRAME_DEBUG 계측으로 seq1 full=1→seq3+ full=0 확인, 평균 타일/프레임 247→159
  • 회귀: 창 표시(Terminal/Finder) + E2E + 동적스윕 168/168 + 스피어 12PASS S96% 모두 그린
  • 빌드 재현성: crownyc/build-gui-kernel.sh 스크립트화(그간 수동 명령)
  • 잔여(후속 최적화): 텍스트 커서 타일 단위 더티(현재 활성 창 전체 재전송) + 프레임 리미터 → 추가 트래픽 절감

🎉 m70q/N100 x86 UEFI 부팅 완성 (2026-06-11)

레노보 m70q(Intel N100) x86 타겟 15%→부팅가능(시각검증):

  • boot/efi_x86.c efi_main → ConOut → GOP → 메모리맵 → ExitBootServiceskernel_main 핸드오프 전체가 OVMF 실펌웨어에서 동작
  • 4상 TOAU 패턴(골드 T/청 O/적 A/흑 U + 골드 보더)을 GOP 프레임버퍼에 렌더 — 스크린샷 증거 마스터플랜/증거/x86-m70q-UEFI-GOP-2026-06-11.png
  • 근본해결 3종 (메모리 feedback_x86_uefi_efi_build):
1. PE 포맷: gnu-efi 없이 clang -target x86_64-unknown-windows + lld-link -subsystem:efi_application → 유효 PE32+ (objcopy efi-app의 "Unsupported" 해소) 2. EFI_BOOT_SERVICES 이벤트 함수=정확히 6개 (9개로 잡으면 ExitBootServices/LocateProtocol 3슬롯 어긋나 GOP 실패) 3. hal_common.h LP64 typedef vs Windows LLP64 충돌 → CROWNY_HAVE_STDINT 가드
  • 빌드: boot/build-x86-efi.sh (STUB=1 검증 스텁 / 0 실 커널). 검증 스텁 boot/efi_x86_stub_kernel.c

✅ 실 커널 통합 완성 (2026-06-11) — m70q 15%→실 커널 부팅

crownyc_os.c(실 CrownyOS 커널)가 x86 UEFI에서 완전부팅 (스텁 졸업):

  • efi_x86.c → kernel_main(crowny_boot_info*) → 배너(ISA729 436op) → 장치초기화(스토리지/디스플레이/네트/I2C/USB/IRQ) → TOAU VM 390큐브 로드 → GOP 4상 TOAU 렌더 → >> REPL
  • 증거: 시리얼 전체 로그 + 스크린샷 마스터플랜/증거/x86-m70q-실커널-TOAU-2026-06-11.png
  • 포팅 4수정: ①crownyc_os.c PLATFORM_X86 분기 + kernel_main(boot_info*) 시그니처 + x86 GOP 렌더 ②wfehlt(__x86_64__) ③hal_common.h 정수 typedef CROWNY_HAVE_STDINT 가드 + mem 글로벌은 CROWNY_DEFINE_MEM 커널 TU 1곳만(COFF엔 weak/COMDAT 없어 중복심볼 방지) ④crownyc_vm_core.c asm memset 별칭은 x86 freestanding 제외
  • aarch64 회귀 그린: GUI 커널 135KB + virt 커널 106KB 빌드 정상

✅ x86 GUI 컴포지터 완성 (2026-06-11) — 전체 데스크톱을 GOP에 렌더

아키-중립 compositor.c + fb_baremetal.c가 x86 UEFI GOP에 전체 CrownyOS 데스크톱 렌더:

  • 메뉴바(+wifi/배터리/시계) · Finder 창(신호등+사이드바+파일목록) · Terminal 창(신호등+셸텍스트) · 독(8 앱 아이콘) · 데스크톱 아이콘 — 스크린샷 마스터플랜/증거/x86-m70q-GUI-컴포지터-2026-06-11.png
  • guest_gui_x86_gop.c: comp_renderfb_rgb(1440 스트라이드) → GOP 블릿. Coherence vsock 불요(호스트 직접 표시)
  • FP는 x87로 처리(-mno-sse, CR4 SSE 활성화 불요) — 크래시 없이 애니메이션 렌더
  • 링크 함정 3종(메모리 feedback_x86_uefi_efi_build): ①static memcpy/memmove를 clang loop-idiom이 외부 승격→COFF 중복심볼 → CROWNY_HAVE_STDINT시 extern, 커널 CROWNY_DEFINE_MEM 단일 정의 ②MS x64 ABI __chkstk(큰 스택프레임)+_fltused(FP) → crowny_x86_rt.c 스텁 ③-fno-builtin
  • 빌드: boot/build-x86-gui.sh. aarch64 회귀 그린
  • 잔여: fb_draw_text 실폰트(텍스트 막대—전 플랫폼 공통), 키보드 입력(UEFI 후 콘솔 소멸), 실 N100 HW 부팅

✅ Coherence 커서 타일 더티 최적화 (2026-06-11)

증분 프레임 추가 최적화 — 평균 타일/프레임 247→159→100→17.8 (14배 감소):

  • : 터미널 커서 렌더 시 화면 rect를 캐시(활성 창만). 블링크 더티(frame%30)가 (창 전체 266타일) 대신 (커서 rect ~4타일)
  • Finder 자동 새로고침 →(정적 파일목록, 변경은 입력이 더티 마킹)
  • 호스트 계측: 커서-블링크 프레임 266→4 타일
  • 회귀: 창 표시 + E2E + 동적스윕 168/168 + 스피어 S96% + x86 GUI 시각 동일 모두 그린
  • 에 필드 추가

✅ fb_draw_text 5x7 비트맵 폰트 (2026-06-11)

텍스트가 막대로 렌더되던 것을 실제 글자로 (전 플랫폼 공통):

  • font5x7.h: 5x7 비트맵 ASCII 폰트(0x20-0x7E, column-major 95글자×5바이트)
  • fb_baremetal.c fb_draw_text: 비-공백 문자당 막대 → 글리프 정수스케일 블릿(셀 cw×size, advance cw=size 보존 → 레이아웃 유지)
  • x86 GOP 검증(스크린샷 마스터플랜/증거/fb_draw_text-실폰트-2026-06-11.png): 터미널 셸텍스트(crownyc --desktop run, ISA729 | 27-Trit Cube, ef@cos:~$)·Finder 사이드바(Favs/Desktop/Documents) 또렷
  • 회귀: E2E + 동적스윕 168/168 + 스피어 S96% 그린
  • 발견(별도 후속): aarch64 Coherence 창별 타일추출이 체커보드 렌더 — 콘텐츠 충실도 이슈(폰트 무관, 기존)

Coherence 키보드 입력 결선 (2026-06-11)

호스트 NSWindow 타이핑 -> 게스트 터미널 반영 종단 동작 (마우스 클릭은 기존 동작):

  • 빈틈: 호스트가 e.keyCode(물리 키, a=0)를 전송했으나 게스트 comp_handle_key는 ASCII 기대(27=ESC,13=Enter,32-127 printable)
  • 수정: coherence_host.m coh_event_ascii() -- 특수키(Return 36->13, Delete 51->8, Esc 53->27, Tab/Space/방향키) 매핑 + e.characters로 인쇄가능 ASCII 추출
  • 경로: keyDown -> coh_event_ascii -> coh_host_send_key -> vsock RX -> coh_vsock_poll -> coh_guest_on_input -> coh_sink_key -> comp_handle_key -> term_input
  • 검증: TERM-INPUT 디버그가 n->ne->neo->neof 누적 확인(neofetch 타이핑). 마우스+키보드 = Coherence 창 완전 인터랙티브
  • 회귀 E2E + 스윕 168/168 + 스피어 S96% 그린

다중 앱 Coherence -- 6개 앱이 별도 맥 창으로 (2026-06-11)

CrownyOS 앱 6개(Finder/Terminal/Editor/Browser/Settings/Messenger)가 각각 별도 맥 NSWindow로 동시 표시(System Events 창목록 확인 + 스크린샷 증거):

  • guest_gui_x86.c가 comp_init(기본 Finder+Terminal) 후 comp_create_window로 Editor/Browser/Settings/Messenger 추가 -> Coherence export가 창마다 NSWindow 생성(coh_host_make_window)
  • 콘텐츠 충실도 수정 덕에 6창 모두 실제 콘텐츠 렌더(체커보드 없음): Messenger 채팅버블, Settings 설정행 등
  • 독은 데스크톱 일부라 Coherence export 안 됨 -> 앱 실행은 게스트가 창 생성으로(향후 스포트라이트/런처)
  • 사용자 원래 목표(엔터프라이즈 모듈/서비스를 별도 창으로) 달성
  • 회귀 E2E + 스윕 168/168(창수 7 커버) + 스피어 S96% 그린. 호스트 창테이블 16슬롯 한도 내

Coherence 호스트 앱 런처 (2026-06-11) -- 패러랠즈식

맥 메뉴바 "CrownyOS Apps" -> 게스트 앱 실행(독이 데스크톱이라 미export되는 문제 해결):

  • 신규 제어 메시지 COH_IN_LAUNCH(0x35)/COH_IN_CLOSE(0x36) + coh_in_launch_t를 양 proto 헤더(호스트/게스트) 동기화
  • 경로: coherence_host.m NSMenu(CohLauncher) -> coh_host_send_launch -> vsock RX -> coh_guest_on_input -> coh_sink_launch(compositor_coh.c) -> comp_create_window
  • 핵심 수정 2: (1) coh_guest_export_frame이 창수 변화 감지 -> coh_guest_sync_windows 재호출(신규 창 WIN_CREATE 전송) (2) 호스트 coh_host_on_win_create가 신규 win_id만 make_window(재동기 반복 시 중복 NSWindow 방지)
  • 검증: 메뉴 클릭 -> app_type 3/2/6 수신 -> 6창 무중복 생성(Browser/Editor/Finder/Settings/Terminal/Wallet). 스크린샷 증거
  • 회귀: E2E + 동적스윕 168/168 그린(스피어는 환경 메모리압박 jetsam 차단, 코드 무관)

Coherence 창 닫기 결선 + crownyc 빌드 수정 (2026-06-11)

NSWindow 닫기 버튼 -> 게스트 창 export 중단 종단 동작:

  • coherence_host.m CohWinDelegate(NSWindowDelegate) windowWillClose: -> CohView.winId -> coh_host_send_close -> COH_IN_CLOSE -> 게스트 coh_sink_close(visible=0) -> export 중단
  • win.delegate 설정 + releasedWhenClosed=NO. 60fps 타이머가 g_coh_windows dict 부재 시 자동 무효화(누수 방지)
  • 검증: Editor 실행(3창) -> 닫기 버튼 -> Editor 사라짐(2창). 런처+닫기 = 창 관리 완성
crownyc 빌드 함정 수정: 13:41 훅/타세션이 프레임워크 없이 crownyc 재빌드 -> crownyc run이 exit137 SIGKILL(메모리압박처럼 보였으나 깨진 바이너리). 정본 빌드 cc -O2 -o crownyc crownyc.c -framework Security -framework CoreFoundation로 복구(mv 원자교체). 스피어 S96% 복구. 메모리 feedback_crownyc_build_frameworks
  • 회귀: E2E + 동적스윕 168/168 + 스피어 S96% 모두 그린

Coherence 창 리사이즈 동기 (2026-06-11)

맥 NSWindow 리사이즈 -> 게스트가 새 크기로 재렌더(또렷, 스케일 블러 없음):

  • 신규 COH_IN_RESIZE(0x37) + coh_in_resize_t{w,h} 양 proto 동기화
  • coherence_host.m windowDidResize: -> 콘텐츠크기scale -> coh_host_send_resize -> COH_IN_RESIZE -> 게스트 coh_sink_resize(win->w/h + anim 스냅 + dirty_full=1) -> 다음 프레임 전 타일 새 크기 전송(dirty_full로 키프레임 불요) -> 호스트 backing realloc
  • 검증: Terminal 800x470 리사이즈 수신 + 창 콘텐츠 새 크기로 채움
  • move는 동기 불필요: NSWindow는 호스트 제어(자유 드래그), 입력은 NSWindow-로컬좌표 + 게스트 창 원점으로 매핑되어 드래그해도 정확. 좌표공간(맥1920 vs 게스트1280)이 달라 move 동기는 오히려 게스트 화면밖 위험
  • 회귀 E2E + 스윕 168/168 + 스피어 S96% 그린

Linux/Windows 게스트 부팅 탐색 — UEFI 펌웨어 부팅 진전 (2026-06-11)

원 목표 "윈도우/리눅스 마운트" 절반. edk2 ArmVirtQemu UEFI 펌웨어 부팅 진전:

  • FDT mem_rsvmap 버그 수정(근본): firmware/fdt.c 헤더에서 mem_rsvmap offset(40)이 dt_struct offset(40)과 겹쳐, edk2가 dt_struct를 메모리예약엔트리로 오독 -> PlatformPei CopyMem 오버플로 ASSERT. 수정: dt_struct를 base+56(헤더40+예약16)으로, (0,0) 종료자 16B 추가, 헤더 offset 갱신
  • 결과: PEI 통과 + DTB 유효화(dtc -I dtb 파싱 성공, /psci/memory 정상). 펌웨어가 PEI->DXE 진행
  • CrownyOS --kernel 게스트 부팅 회귀 그린(게스트는 mem_rsvmap 미파싱이라 무관했음 -> 버그가 오래 안 드러남)
  • 잔여 갭: DXE 단계 ResetSystemRuntimeDxe 등 ASSERT(DEBUG 펌웨어). 다단계 edk2 호환 작업 필요(FdtClient HOB, fw_cfg 디바이스 부재). 전 OS 부팅은 별도 집중 작업
  • 진단 인프라: CROWNY_FDT_DUMP 매크로(/tmp/crowny.dtb), dtc/fdtdump 검증. 메모리 feedback_crownyvm_fdt_memrsvmap
  • 주 용도(CrownyOS --kernel 직접부팅)는 영향 없음 — 정상 동작

Linux 게스트 부팅 실증 (2026-06-11) -- 원 목표 "리눅스 마운트" 절반 달성

실 Alpine Linux 6.6.134이 crownyvm에서 userspace init까지 완전 부팅:

  • 로그: Unpacking initramfs -> Freeing initrd memory: 8584K -> Run /init as init process -> Alpine Init 3.10.1-r0 -> Mounting boot media
  • 핵심 수정 4종:
1. FDT mem_rsvmap (0,0) 종료자 16B (PEI/DTB 유효 -- 앞선 UEFI 수정과 동일) 2. arm64 Image(magic "ARMd"@0x38) 감지 -> 2MB 정렬 로드 0x40200000 (text_offset=0 규약, "Kernel image misaligned" 해소) 3. exit_handler HVC(0x16) 버그: cvm_handle_hvc를 호출하지 않고 PC+4만 함 -> PSCI HVC가 X0에 garbage 반환 -> __invoke_psci_fn_hvc NULL deref 크래시. 수정: cvm_handle_hvc 호출(X0에 결과) + PC 조정 제거(HVC는 ELR이 이미 다음 명령) 4. --initrd 지원: initramfs를 0x48000000 로드 + DTB linux,initrd-start/end. bootargs=console=ttyAMA0 earlycon=pl011,0x9000000
  • raw arm64 Image는 Alpine vmlinuz-virt(EFI-stub gzip)에서 추출(gzip offset 0x1f8b, zlib 부분해제). 증거 로그 마스터플랜/증거/
  • 회귀: CrownyOS --kernel 부팅 + Coherence E2E/스윕 그린
  • 함정: macOS엔 stdbuf 없음(테스트 명령 무음 실패 주의)
  • 잔여: 완전 인터랙티브 셸=--disk 설치미디어(virtio-blk), Windows 게스트(x86 변환/UEFI). 메모리 feedback_crownyvm_fdt_memrsvmap

Linux 게스트 GIC/타이머/디스크 동작 (2026-06-11)

전 루프 userspace 부팅에 이어 디바이스 지원 대폭 진전. 핵심 수정 5종:

  1. DTB virtio_mmio 노드 9개(blk 0xa000000~9p, IRQ48~56, DTB번호=INTID-32, level) -> Linux가 virtio 디바이스 발견(CrownyOS는 주소 하드코딩이라 불필요했음)
  2. GICD_PIDR2(0xFFE8)=0x3B(ArchRev=3) -> 커널 "no distributor detected" 해소 -> GICv3 감지 -> arch_timer 24MHz + clocksource + 시간 진행 + virtio-blk [vda] 디스크 인식(가장 결정적 한 줄)
  3. exit_handler EC 0x18(sysreg)이 cvm_sysreg_handler를 호출 안 하고 PC+4만 함 -> ICC_IAR 읽기가 rt 미설정(garbage) -> "Unexpected interrupt". cvm_sysreg_handler(v,vm,iss) 호출 배선
  4. gic_cpu_acknowledge(IAR: 최고우선 pending->active+INTID)/gic_cpu_eoi(EOIR) 구현 + ICC_IAR1/EOIR1 sysreg 배선
  5. vtimer exit가 timer_vtimer_fire(GIC PPI27 주입) 호출
  • 검증: GICv3 감지, 타이머 작동(타임스탬프 진행), virtio-blk vda 인식, "Unexpected interrupt" 해소. CrownyOS(폴링)/Coherence E2E/스윕 회귀 그린
  • 잔여: virtio-blk 읽기 완료(modloop squashfs 마운트) -> Alpine 완전 인터랙티브 셸/로그인

virtio-blk 디스크 읽기 동작 (2026-06-11)

Linux 게스트 디스크 I/O 실증 — virtio-blk read 요청 완전 처리:

  • blk_notify -> virtq_pop -> pread -> virtq_push -> gic_set_irq(48) 주입 -> 게스트 완료. QueueNotify(0x050)->vdev->notify 라우팅
  • 계측(COH_BLK_DEBUG): 108+ read 요청(type0 IN, 섹터 순차), 게스트가 파티션 테이블 읽고 vda2를 FAT로 마운트("FAT-fs (vda2)" 파싱 성공) -> 읽기 데이터 정확
  • 잔여: Alpine userspace가 modloop(ISO9660 squashfs) 찾는 부트미디어 탐색(crownyvm 갭 아님, Alpine 부트 config/파티션 선택 문제)
  • 누적: GICD_PIDR2 + sysreg 핸들러 + IAR로 인터럽트 동작 후 디스크 읽기까지 완성. Linux 게스트 실사용 근접
  • 회귀: CrownyOS/Coherence 그린

잔여 이슈

  • x86_64(m70q) 실 커널 통합 — 부팅 경로는 완성, crownyc_os.c x86 빌드 브랜치 연결 남음. 단기 우회는 CrownyVM translate/로 게스트내 x86 실행.
  • 16KB 파일읽기 함정으로 매칭.한선은 인라인 색인 보유(생산 매칭은 매칭.js).

관련 파일

  • 본체: /Users/ef/crowny-vm/ (PLAN.md, PLAN_V2.md 기존)
  • DB: /Users/ef/crowny-vm/마스터플랜/
  • OS: /Users/ef/CrownyOS/ (build-crownyos.sh)
  • 앱: /Users/ef/crowny-app/, /Users/ef/crowny-enterprise/modules/