FUCKKKK
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
# Deshab SDK 应用 MAKEFILE 模板
|
||||
#
|
||||
# 由 scaffold/new-module.ps1 生成时自动替换:
|
||||
# {{MODULE_NAME}} -> 模块名 (如 myapp)
|
||||
# {{SDK_INC}} -> SDK include 目录相对路径 (如 ../../sdk/include)
|
||||
# {{OUT_DIR}} -> 输出目录相对路径 (如 $(ROOT)/SYSTEM/system/deshab64/tools)
|
||||
# {{BITMAPS}} -> ascii_bitmaps.c 相对路径 (如 ../../firstInit/ascii_bitmaps.c)
|
||||
#
|
||||
# 手动使用时替换上述占位符。
|
||||
|
||||
CC := clang
|
||||
LD := ld.lld
|
||||
|
||||
ROOT := ../../..
|
||||
OUT := {{OUT_DIR}}/{{MODULE_NAME}}.elf
|
||||
|
||||
CFLAGS := -target x86_64-unknown-none -std=c11 -ffreestanding -fno-builtin -fno-stack-protector -fpie -mno-red-zone -mno-sse -mno-sse2 -mno-mmx -msoft-float -m64 -Wall -Wextra -I{{SDK_INC}} -O2
|
||||
LDFLAGS := -nostdlib -static -pie -z max-page-size=0x1000 -T linker.ld
|
||||
|
||||
C_SOURCES := main.c
|
||||
OBJECTS := $(C_SOURCES:.c=.o)
|
||||
|
||||
.PHONY: all clean
|
||||
|
||||
all: $(OUT)
|
||||
|
||||
$(OUT): $(OBJECTS) linker.ld
|
||||
@mkdir -p "$(dir $(OUT))"
|
||||
$(LD) $(LDFLAGS) -o $@ $(OBJECTS)
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) -c $< -o $@
|
||||
|
||||
clean:
|
||||
powershell -NoProfile -Command "Get-ChildItem -Path . -Recurse -Filter *.o | Remove-Item -Force; if (Test-Path '$(OUT)') { Remove-Item '$(OUT)' -Force }"
|
||||
@@ -0,0 +1,32 @@
|
||||
/* Deshab SDK 应用 linker.ld 模板
|
||||
*
|
||||
* PIE ELF 布局,ENTRY(dsk_entry)。
|
||||
* BSS 分离为独立 NOBITS 段,避免占文件空间。
|
||||
* 与现有应用 (ping/editor/...) linker.ld 一致。
|
||||
*/
|
||||
ENTRY(dsk_entry)
|
||||
|
||||
PHDRS
|
||||
{
|
||||
text PT_LOAD FLAGS(5);
|
||||
rodata PT_LOAD FLAGS(4);
|
||||
data PT_LOAD FLAGS(6);
|
||||
dynamic PT_DYNAMIC FLAGS(4);
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = 0x1000;
|
||||
.text : ALIGN(4K) { *(.text*) } :text
|
||||
.rodata : ALIGN(4K) { *(.rodata*) } :rodata
|
||||
.data : ALIGN(4K) {
|
||||
*(.data*)
|
||||
*(.data.rel.ro*)
|
||||
*(COMMON)
|
||||
} :data
|
||||
.rela.dyn : ALIGN(8) { *(.rela.dyn*) } :data
|
||||
.dynamic : ALIGN(8) { *(.dynamic*) } :data :dynamic
|
||||
.bss : ALIGN(4K) {
|
||||
*(.bss*)
|
||||
} :data
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/* Deshab SDK 应用入口模板
|
||||
*
|
||||
* 由 scaffold/new-module.ps1 生成时自动替换:
|
||||
* {{MODULE_NAME}} -> 模块名
|
||||
* {{BITMAPS}} -> ascii_bitmaps.c 相对路径
|
||||
*
|
||||
* 展示最小应用框架: 初始化上下文 -> 清屏 -> 标题栏 -> Esc 退出。
|
||||
*/
|
||||
#include "{{BITMAPS}}"
|
||||
#include "deshab/deshab.h"
|
||||
#include "deshab/font.h"
|
||||
|
||||
static dsb_app_context g_ac;
|
||||
|
||||
void dsk_entry(const dsk_boot_context *ctx) {
|
||||
if (ctx->magic != DSK_BOOT_MAGIC) return;
|
||||
dsb_app_init(&g_ac, ctx);
|
||||
|
||||
/* 清屏 */
|
||||
dsb_fill_bg(&g_ac, DSB_BG_PRIMARY);
|
||||
|
||||
/* 标题栏 + 状态栏 */
|
||||
dsb_draw_titlebar(&g_ac, "{{MODULE_NAME}}", (i64)g_ac.fb_w);
|
||||
dsb_draw_statusbar(&g_ac, "Esc to exit", (i64)g_ac.fb_w, (i64)g_ac.fb_h);
|
||||
|
||||
/* 居中欢迎文字 */
|
||||
const char *msg = "Hello from {{MODULE_NAME}}!";
|
||||
i64 msg_w = (i64)dsb_strlen(msg) * 12;
|
||||
i64 x = ((i64)g_ac.fb_w - msg_w) / 2;
|
||||
i64 y = ((i64)g_ac.fb_h) / 2;
|
||||
dsb_draw_string(&g_ac, msg, x, y, DSB_TEXT_PRIMARY, DSB_BG_PRIMARY, 12);
|
||||
|
||||
/* 等待 Esc 键退出 */
|
||||
for (;;) {
|
||||
u8 st = dsb_inb(0x64);
|
||||
if (st & 1) {
|
||||
u8 sc = dsb_inb(0x60);
|
||||
if (sc == 1) break; /* Esc make code */
|
||||
}
|
||||
__asm__ volatile("pause");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user