FUCKKKK
This commit is contained in:
@@ -21,6 +21,34 @@
|
||||
|
||||
#define LINUX_COMPAT_MAGIC 0x4C4E58434F4D5000ULL /* "LNXCOMP\0" */
|
||||
|
||||
/* VSCode Phase 3: virtio-gpu scanout 查询结果。
|
||||
* 镜像 virtio_mmio.h 的 virtio_gpu_scanout_info 字段布局,保持公共 ABI 自洽
|
||||
* (不强制消费者 include virtio_mmio.h)。必须在 linux_compat_service 之前
|
||||
* 定义,因为服务表中有指向此类型的函数指针。 */
|
||||
struct linux_compat_scanout_info {
|
||||
void *host_vaddr;
|
||||
u32 width;
|
||||
u32 height;
|
||||
u32 stride;
|
||||
u32 dirty;
|
||||
u32 enabled;
|
||||
/* Phase 7: 累积 dirty rect(scanout 坐标系并集,查询随 dirty 清零)。
|
||||
* dirty=0 时全为 0;desktop 据此只 blit 变化区域(尾部追加,ABI 兼容)。 */
|
||||
u32 dirty_x;
|
||||
u32 dirty_y;
|
||||
u32 dirty_w;
|
||||
u32 dirty_h;
|
||||
/* P7.6: hardware cursor state(尾部追加,ABI 兼容)。 */
|
||||
u32 cursor_visible;
|
||||
u32 cursor_x;
|
||||
u32 cursor_y;
|
||||
u32 cursor_hot_x;
|
||||
u32 cursor_hot_y;
|
||||
u32 cursor_w;
|
||||
u32 cursor_h;
|
||||
void *cursor_bitmap;
|
||||
};
|
||||
|
||||
/* Linux 兼容层服务表 — 通过 boot context reserved[5] 传递 */
|
||||
typedef struct linux_compat_service {
|
||||
u64 magic; /* LINUX_COMPAT_MAGIC */
|
||||
@@ -93,6 +121,41 @@ typedef struct linux_compat_service {
|
||||
* 返回 0 成功,负值失败(-11=文件不存在,其余同 file_pull)。 */
|
||||
int (*file_push)(const char *fat32_name, const char *linux_path,
|
||||
u64 *out_size);
|
||||
|
||||
/* VSCode Phase 2: 输入转发到 Linux guest(virtio-input 键盘+鼠标)。
|
||||
* 由 desktop 在 IDE attached 时调用,把 Deshab PS/2 事件注入 guest。
|
||||
* 事件排到 pending ring,由 vmexit poll 路径排空到 eventq + 注入 IRQ。
|
||||
*
|
||||
* input_forward_keyboard(code, value)
|
||||
* code : linux keycode(KEY_A=30 等,见 linux/input-event-codes.h)
|
||||
* value : 0=release, 1=press, 2=repeat
|
||||
*
|
||||
* input_forward_mouse(dx, dy, buttons)
|
||||
* dx, dy : 相对位移(像素差,可为负)
|
||||
* buttons : 按钮位图 bit0=左, bit1=右, bit2=中(内部与上次状态比较,
|
||||
* 仅变化的按钮产生 press/release 事件;末尾自动追加 SYN) */
|
||||
void (*input_forward_keyboard)(u16 code, u32 value);
|
||||
void (*input_forward_mouse)(i32 dx, i32 dy, u8 buttons);
|
||||
|
||||
/* VSCode Phase 3: 查询 virtio-gpu scanout 状态(desktop IDE blit 用)。
|
||||
* 在 IDE attached 时由 desktop 周期调用:若 dirty=1,把 host_vaddr 指向的
|
||||
* scanout 影子缓冲(width×height,stride 字节/行,XRGB8888)blit 到
|
||||
* framebuffer 的 IDE host 区域,然后重新查询以清零 dirty。
|
||||
* out->host_vaddr : scanout 影子缓冲 host 虚拟地址(SAS-R0 下可直接解引用)
|
||||
* out->enabled : 1 = scanout 已绑定 2D resource(X server 已 SET_SCANOUT)
|
||||
* out->dirty : 1 = 自上次查询有新帧(查询会清零该位)
|
||||
* 返回 0 成功(enabled=0 时其余字段为零),-1 后端未就绪(无 surface pool)。 */
|
||||
int (*gpu_get_scanout_info)(struct linux_compat_scanout_info *out);
|
||||
|
||||
/* VSCode Phase 5: 异步执行 Linux 程序(daemon fork+setsid+detach)。
|
||||
* 与 exec 语义相同,但 daemon 在 spawn 成功后立即回 EXEC_EXIT(0),
|
||||
* 不捕获 stdout、不等待进程退出——用于启动 X server / VSCode 等
|
||||
* 长生命周期 GUI 进程而不阻塞 UTSM 侧。子进程 stdio 重定向到
|
||||
* /dev/null,环境自带 LD_LIBRARY_PATH=/usr/lib/deshab 与 DISPLAY=:0。
|
||||
* 返回 0 = 已成功 spawn(不代表程序后续存活),负值失败
|
||||
* (-1=服务不可用, -2=IPC 发送失败, -3=linux_resume 失败,
|
||||
* -4=无响应, -5=daemon 报告 spawn 失败)。 */
|
||||
int (*exec_async)(const char *path, int argc, const char *const *argv);
|
||||
} linux_compat_service;
|
||||
|
||||
/* ===== UTSM 内部接口(不进服务表,供 hypercall.c 等内核代码使用) =====
|
||||
@@ -111,4 +174,21 @@ const linux_compat_service *linux_compat_get_service(void);
|
||||
/* 初始化 Linux 兼容层服务(在 linux_launch 成功后调用)。 */
|
||||
void linux_compat_init(void);
|
||||
|
||||
/* 同步 FAT32 lib 目录下所有 .so 文件到 Linux guest。
|
||||
* guest_lib_path : guest 端库目录路径(如 "/usr/lib/deshab")
|
||||
* 调用时机:linux_compat_init 成功后。失败不阻断启动。
|
||||
* 返回 0 成功,负值失败。 */
|
||||
int lxc_sync_lib_dir(const char *guest_lib_path);
|
||||
|
||||
/* VSCode Phase 5: 把 VSCode tarball(Limine boot module,路径含 "vscode")
|
||||
* 安装到 Linux guest 的 /opt/vscode(经 overlay 持久化在 extra-rootfs 卷)。
|
||||
* 流程:已安装标记探测(/opt/vscode/bin/code 可执行则跳过)→
|
||||
* 流式推送 module 字节到 guest /tmp/vscode.tar.gz →
|
||||
* mkdir -p /opt/vscode → tar 解包(--strip-components=1,失败回退不解层)→
|
||||
* 清理 /tmp tarball → 验证 /opt/vscode/bin/code。
|
||||
* 调用时机:linux_compat_init 成功后(kernel main,FUCK [compat] vscode_install=1)。
|
||||
* 返回 0 成功或已安装;负值失败(-1 服务不可用, -11 无 tarball module,
|
||||
* -12 推送失败, -13 解包失败, -14 验证失败)。所有失败均不阻断启动。 */
|
||||
int lxc_vscode_install(void);
|
||||
|
||||
#endif /* UTSM_LINUX_COMPAT_H */
|
||||
|
||||
Reference in New Issue
Block a user