/* Deshab SDK 驱动入口模板 * * 由 scaffold/new-module.ps1 生成时自动替换: * {{MODULE_NAME}} -> 驱动名 (如 mydriver) * {{CLASS}} -> DKM_CLASS_* 类别 (如 DKM_CLASS_MISC) * {{STAGE}} -> 加载阶段 0-3 * * 展示最小 DKM 驱动框架: driver_desc + driver_init + driver_exit。 * 构建方式: clang -c main.c -> ld.lld -r -o {{MODULE_NAME}}.drv main.o * (见 scaffold/driver/build.ps1 片段或 build.ps1 的 Build-DkmDriver) */ #include "deshab/driver.h" #include "deshab/serial.h" static const dkm_log_api *g_log = 0; static const char *const g_depends[] = { 0 }; static const char *const g_provides[] = { "{{MODULE_NAME}}" }; __attribute__((visibility("default"))) const dkm_driver_desc driver_desc = { .magic = DKM_DRIVER_MAGIC, .abi_version = DKM_ABI_VERSION, .desc_size = sizeof(dkm_driver_desc), .name = "{{MODULE_NAME}}", .version = "1.0", .vendor = "Deshab", .driver_class = {{CLASS}}, .stage = {{STAGE}}, .flags = 0, .priority = 100, .depends = g_depends, .depends_count = 0, .provides = g_provides, .provides_count = 1, .min_kernel_abi = DKM_KERNEL_API_VERSION, .feature_bits = 0, }; __attribute__((visibility("default"))) int driver_init(const dkm_kernel_api *api, dkm_driver_handle *handle) { (void)handle; if (!api || !api->log) return -1; g_log = api->log; g_log->info("[{{MODULE_NAME}}] init begin"); /* TODO: 驱动初始化逻辑 */ g_log->info("[{{MODULE_NAME}}] driver ready"); return 0; } __attribute__((visibility("default"))) int driver_exit(dkm_driver_handle *handle) { (void)handle; if (g_log) g_log->info("[{{MODULE_NAME}}] exit"); return 0; }