크라우니VM for Mac — 패러랠즈 대용 + CrownyOS 완성 마스터플랜
개요
맥에서 패러랠즈 동시실행(Coherence) 대용으로 동작하는 크라우니VM for Mac을 완성한다.
- 윈도우/리눅스를 마운트하는 VM 본체 = CrownyVM (기존
crowny-vmv0.2.0, "Ducker"의 GUI 탑재 후속). - 그 위에서 CrownyOS(RPi5/레노보 m70q/젯슨 AGX/젯슨 NX 대응)를 완성해 게스트로 부팅.
- 게스트 위 앱이 패러랠즈 Coherence처럼 맥의 별도 앱(창)으로 동시실행.
- 앱 = 지금까지 만든 전체 서비스 + 엔터프라이즈 모듈.
명칭 정리: 사용자가 말한 "Ducker"는 GUI 없는 초기 컨테이너 모드였고, 이번 GUI 탑재 패러랠즈 대용 본체는 이미 존재하는 CrownyVM으로 일원화한다.
정찰 결과 (2026-06-10) — 재사용 가능 자산
| 자산 | 경로 | 완성도 | 역할 |
|---|---|---|---|
| CrownyVM 하이퍼바이저 | /Users/ef/crowny-vm | 85% | 본체. Hypervisor.framework, VirtIO 9종, x86→ARM64 변환, qcow2/iso, Cocoa 디스플레이. 바이너리(crownyvm 117KB) 빌드됨 |
| Cocoa 윈도우 | CrownyOS/crownyc/crownyc_window.m | 90% | 앱당 NSWindow 베이스 (패러랠즈식 스케일링) |
| 컴포지터 | CrownyOS/crownyc/compositor.h/c | 70% | 창 매니저·독·메뉴바·6테마 → 창 열거 |
| 뷰.한선 | CrownyOS/crownyc/libs/뷰.한선 | 80% | 데스크톱 UI 한선씨 조립 |
| 웹코드 188모듈 | CrownyOS/crownyc/libs/ | 95% | 앱 UI 즉시활용 |
| 디자인 6테마 | CrownyDoc/src/design-system.css | 100% | 골드 #C9A961 / TOAU |
| CrownyOS 커널 | /Users/ef/CrownyOS | 90% | virt aarch64 = VM 게스트 |
| 앱 생태계 129앱 | /Users/ef/crowny-app | 80% | 앱 카탈로그 |
| 엔터프라이즈 35모듈 | /Users/ef/crowny-enterprise/modules | 75% | 엔터프라이즈 앱 그룹 |
사용자의 "엔터프라이즈 81개 모듈"은 실제로는 crowny-pay 특허 81건과 혼동된 것. 엔터프라이즈 모듈 실측 = 35개(.한선). 앱 카탈로그 합계 = 225개(서비스 170 + 엔터프라이즈 35 + 네이티브 17 + 레거시게스트 3).
타겟 4종 현황
| 타겟 | 아키 | 완성도 | 비고 |
|---|---|---|---|
| RPi5 | AArch64 | 95% | 베어메탈 실부팅. 동결 유지 |
| 젯슨 AGX | AArch64 | 68% | QEMU부팅O, 실HW TRM 확정 필요 |
| 젯슨 NX | AArch64 | 0% | 신규 (Tegra 재사용 → 저비용) |
| 레노보 m70q(N100) | x86_64 | 0% | 신규 (별도 아키, 최대 격차) |
| virt (VM 게스트) | AArch64 | 85% | ★ 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웨이브 작업 분해매칭.js— JS 매칭 엔진 (자산/앱/격차/웨이브/타겟/현황/매칭)매칭.한선— 한선씨 정본 동반 (컴파일·실행 검증 완료)
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 후 >> 셸 도달.
수정/추가 (모두 빌드+서명+부팅 검증):
- VM-BUG-1
core/memory.c— 게스트 RAM을 0x0 → 0x40000000(QEMU virt RAM base) 매핑. 플래시(0x0)/MMIO 충돌 해소. - VM-BUG-2
core/smp.c+vcpu_loop.c+crownyvm.h—hv_vcpu_create를 vCPU 실행 스레드에서 호출(HVF 스레드 바인딩). HV_BAD_ARGUMENT/BUSY 해소. - VM-FEAT-1
config.c+main.c+vcpu.c—--kernelraw aarch64 직접부팅(UEFI 우회). - VM-ENV-1 —
codesign --entitlements com.apple.security.hypervisor필수(hv.entitlementsrepo 보존).
/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.sh3/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 PASS —
coh_fullstack_test.c: Compositor 2창→실접근자→glue→guest→호스트코어, NSWindow 2개+제목+fb픽셀 통과.coh_test.sh3/3. (버그수정: send 규약 0=성공) - ⏳ 미완(환경 의존, 헤드리스 불가):
coh_comp_bind+coh_guest_export컴포지터 루프 연결 + 베어메탈 컴포지터 구동 + 맥 GUI 세션 라이브 표시
상세 = 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.c168케이스(창수7×크기6×가시2×재생2) 실제 coherence_guest+host_core 실행. 크래시0+창테이블/백킹정합. 초과16클램프·엣지타일·거대창·재생 포함.test.sh4단계로 회귀화 - ⏳ 잔여: 실 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계측으로 seq1full=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.cefi_main → ConOut → GOP → 메모리맵 → ExitBootServices →kernel_main핸드오프 전체가 OVMF 실펌웨어에서 동작- 4상 TOAU 패턴(골드 T/청 O/적 A/흑 U + 골드 보더)을 GOP 프레임버퍼에 렌더 — 스크린샷 증거
마스터플랜/증거/x86-m70q-UEFI-GOP-2026-06-11.png - 근본해결 3종 (메모리
feedback_x86_uefi_efi_build):
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.cPLATFORM_X86 분기 +kernel_main(boot_info*)시그니처 + x86 GOP 렌더 ②wfe→hlt(__x86_64__) ③hal_common.h정수 typedefCROWNY_HAVE_STDINT가드 + mem 글로벌은CROWNY_DEFINE_MEM커널 TU 1곳만(COFF엔 weak/COMDAT 없어 중복심볼 방지) ④crownyc_vm_core.casm 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_render→fb_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.cfb_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창). 런처+닫기 = 창 관리 완성
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종:
- 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종:
- DTB virtio_mmio 노드 9개(blk 0xa000000~9p, IRQ48~56, DTB번호=INTID-32, level) -> Linux가 virtio 디바이스 발견(CrownyOS는 주소 하드코딩이라 불필요했음)
- GICD_PIDR2(0xFFE8)=0x3B(ArchRev=3) -> 커널 "no distributor detected" 해소 -> GICv3 감지 -> arch_timer 24MHz + clocksource + 시간 진행 + virtio-blk [vda] 디스크 인식(가장 결정적 한 줄)
- exit_handler EC 0x18(sysreg)이 cvm_sysreg_handler를 호출 안 하고 PC+4만 함 -> ICC_IAR 읽기가 rt 미설정(garbage) -> "Unexpected interrupt". cvm_sysreg_handler(v,vm,iss) 호출 배선
- gic_cpu_acknowledge(IAR: 최고우선 pending->active+INTID)/gic_cpu_eoi(EOIR) 구현 + ICC_IAR1/EOIR1 sysreg 배선
- 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/