From 3b2d2c98025d478070dff52e0aeaef3211304c0e Mon Sep 17 00:00:00 2001 From: chenzheng Date: Fri, 24 May 2024 18:54:58 +0800 Subject: [PATCH 1/3] support huk derive key --- huk_derive/huk_driver.spec | 50 ++++++++++ huk_derive/src/Makefile | 12 +++ huk_derive/src/huk_derive.c | 181 ++++++++++++++++++++++++++++++++++++ 3 files changed, 243 insertions(+) create mode 100644 huk_derive/huk_driver.spec create mode 100644 huk_derive/src/Makefile create mode 100644 huk_derive/src/huk_derive.c diff --git a/huk_derive/huk_driver.spec b/huk_derive/huk_driver.spec new file mode 100644 index 0000000..50d9629 --- /dev/null +++ b/huk_derive/huk_driver.spec @@ -0,0 +1,50 @@ +# spec file for package huk_driver +# +# Copyright (c) Huawei Technologies Co., Ltd. 2024. All rights reserved. +# +%global debug_package %{nil} +%define kmod_name huk_derive +Name : %{kmod_name}-kmod +Summary : %{kmod_name}.ko +Version : 1.0 +Release : 0.1 +License : GPLV2 +Group : System/Kernel +Source0 : %{kmod_name}.tar.gz +BuildRoot : %{_tmppath}/%{kmod_name}-%{version}-build +BuildRequires: dos2unix +Requires : rpm coreutils + +%define module_dir 5.10.0-virtcca/tmm +%define module_ko %{kmod_name}.ko + +%description +%{name} module + +%prep +%setup -q -n%{kmod_name} + +%build +cd %_builddir/%{kmod_name}/src +make + +%install +mkdir -p %{buildroot}/lib/modules/%{module_dir} +install -m 0640 %_builddir/%{kmod_name}/src/%{module_ko} %{buildroot}/lib/modules/%{module_dir} + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,root,root) +%attr(0640,root,root) /lib/modules/%{module_dir}/%{module_ko} + +%post +insmod /lib/modules/%{module_dir}/%{module_ko} + +%postun +rmmod %{module_ko} + +%changelog +* Fri May 10 2024 huawei + version 1.0 release 0.1 \ No newline at end of file diff --git a/huk_derive/src/Makefile b/huk_derive/src/Makefile new file mode 100644 index 0000000..11bf4a2 --- /dev/null +++ b/huk_derive/src/Makefile @@ -0,0 +1,12 @@ +obj-m += huk_derive.o +# Otherwise we were called directly from the command +# line; invoke the kernel build system. +KERNEL_DIR=/usr/src/kernels/$(shell uname -r) +PWD:=$(shell pwd) + +modules: + $(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules +modules_install: + $(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules_install +clean: + $(MAKE) -C $(KERNEL_DIR) M=$(PWD) clean \ No newline at end of file diff --git a/huk_derive/src/huk_derive.c b/huk_derive/src/huk_derive.c new file mode 100644 index 0000000..daa19ae --- /dev/null +++ b/huk_derive/src/huk_derive.c @@ -0,0 +1,181 @@ +/* + * show virtCCA secure memory driver for Linux + * + * Copyright (C) 2024 Huawei Technologies Co., Ltd. + * + * This driver provide huk derive key. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define HUK_DERIVE_KEY_LEN 32 +#define USER_PARAM_LEN 64 + +struct huk_derive_params +{ + uint8_t user_param[USER_PARAM_LEN]; + uint32_t user_param_len; + uint8_t derived_key[HUK_DERIVE_KEY_LEN]; +}; + +#define TSI_HUK_DEV "tsi_huk" +#define HUK_IOC_MAGIC 'd' +#define HUK_IOCTL_DERIVE_KEY _IOWR(HUK_IOC_MAGIC, 0, struct huk_derive_params) + +#define ERR(fmt, args...) (void)pr_err("[%s][%s] " fmt "\n", TSI_HUK_DEV, __func__, ##args) +#define INFO(fmt, args...) (void)pr_info("[%s][%s] " fmt "\n", TSI_HUK_DEV, __func__, ##args) + +#define SMC_TSI_CALL_BASE 0xC4000000 +#define SMC_TSI_FID(_x) (SMC_TSI_CALL_BASE + (_x)) +#define SCM_TSI_HUK_DERIVE_KEY SMC_TSI_FID(0x19B) + +static struct class *g_driver_class; +static dev_t g_devno; +static struct cdev g_cdev; + +static int tsi_derive_huk(void *user_buf, uint32_t len, void *key_buf) +{ + struct arm_smccc_res res = {0}; + arm_smccc_1_1_smc(SCM_TSI_HUK_DERIVE_KEY, virt_to_phys(user_buf), len, virt_to_phys(key_buf), &res); + + return res.a0; +} + +static int cmd_get_derived_key(void __user *argp) +{ + struct huk_derive_params huk_params = {0}; + int ret = 0; + uint8_t *user_param = NULL; + uint8_t *derived_key = NULL; + + if (!argp) { + ERR("args is NULL\n"); + return -EINVAL; + } + + ret = copy_from_user(&huk_params, argp, sizeof(struct huk_derive_params)); + if (ret) { + ERR("copy huk params failed"); + return ret; + } + + if (huk_params.user_param_len != 0) { + user_param = kzalloc(huk_params.user_param_len, GFP_KERNEL); + if (!user_param) { + ERR("malloc memory failed"); + return -ENOMEM; + } + (void)memcpy(user_param, huk_params.user_param, huk_params.user_param_len); + } + + derived_key = kzalloc(HUK_DERIVE_KEY_LEN, GFP_KERNEL); + if (!derived_key) { + ERR("malloc memory failed"); + ret = -ENOMEM; + goto free_umem; + } + + ret = tsi_derive_huk(user_param, huk_params.user_param_len, derived_key); + if (ret != SMCCC_RET_SUCCESS) { + ERR("got tsi huk derive key failed, ret: %d\n", ret); + goto free_kmem; + } + + (void)memset(huk_params.derived_key, 0, HUK_DERIVE_KEY_LEN); + (void)memcpy(huk_params.derived_key, derived_key, HUK_DERIVE_KEY_LEN); + ret = copy_to_user(argp, &huk_params, sizeof(struct huk_derive_params)); + if (ret) { + ERR("copy result failed"); + } + +free_kmem: + kfree(derived_key); +free_umem: + kfree(user_param); + return ret; +} + +static long tsi_device_ioctl(struct file *fp, unsigned int cmd, unsigned long arg) +{ + int ret = 0; + void *argp = (void __user *)(uintptr_t)arg; + + switch (cmd) { + case HUK_IOCTL_DERIVE_KEY: + ret = cmd_get_derived_key(argp); + break; + default: + ERR("invalid command %d", cmd); + ret = -ENOTTY; + } + + return ret; +} + +static struct file_operations g_huk_fops = { + .owner = THIS_MODULE, + .unlocked_ioctl = tsi_device_ioctl, +}; + +static int __init huk_init(void) +{ + int ret; + struct device *class_dev = NULL; + + g_driver_class = class_create(THIS_MODULE, TSI_HUK_DEV); + if (IS_ERR_OR_NULL(g_driver_class)) { + ERR("class create failed"); + return -ENOMEM; + } + + ret = alloc_chrdev_region(&g_devno, 0, 1, TSI_HUK_DEV); + if (ret < 0) { + ERR("alloc_chrdev_region failed!"); + goto free_class; + } + INFO("MAJOR is %d, MINOR is %d", MAJOR(g_devno), MINOR(g_devno)); + class_dev = device_create(g_driver_class, NULL, g_devno, NULL, TSI_HUK_DEV); + if (IS_ERR_OR_NULL(class_dev)) { + ERR("device create failed"); + ret = -ENOMEM; + goto unreg_chrdev; + } + + cdev_init(&g_cdev, &g_huk_fops); + ret = cdev_add(&g_cdev, g_devno, 1); + if (ret < 0) { + ERR("cdev_add failed"); + goto free_device; + } + INFO("module init success"); + return 0; + +free_device: + device_destroy(g_driver_class, g_devno); +unreg_chrdev: + unregister_chrdev_region(g_devno, 1); +free_class: + class_destroy(g_driver_class); + return ret; +} + +static void __exit huk_exit(void) +{ + device_destroy(g_driver_class, g_devno); + cdev_del(&g_cdev); + unregister_chrdev_region(g_devno, 1); + class_destroy(g_driver_class); + INFO("module exited"); + return; +} + +module_init(huk_init); +module_exit(huk_exit); +MODULE_LICENSE("GPL"); \ No newline at end of file -- Gitee From 6377ae1bb6fa71dac3e7dcf1f115fad3444e2ee0 Mon Sep 17 00:00:00 2001 From: chenzheng Date: Tue, 28 May 2024 09:44:17 +0800 Subject: [PATCH 2/3] one spec file for all drivers about virtCCA --- Makefille | 13 +++++ tmm_driver/tmm_driver.spec | 50 ------------------- .../huk_driver.spec => virtCCA_driver.spec | 22 ++++---- 3 files changed, 26 insertions(+), 59 deletions(-) create mode 100644 Makefille delete mode 100644 tmm_driver/tmm_driver.spec rename huk_derive/huk_driver.spec => virtCCA_driver.spec (50%) diff --git a/Makefille b/Makefille new file mode 100644 index 0000000..b66c66b --- /dev/null +++ b/Makefille @@ -0,0 +1,13 @@ +.PHONY: clean tmm huk + +all: tmm huk + +tmm: + make -C tmm_driver/src + +huk: + make -C huk_derive/src + +clean: + make clean -C tmm_driver/src + make clean -C huk_derive/src \ No newline at end of file diff --git a/tmm_driver/tmm_driver.spec b/tmm_driver/tmm_driver.spec deleted file mode 100644 index 81bba56..0000000 --- a/tmm_driver/tmm_driver.spec +++ /dev/null @@ -1,50 +0,0 @@ -# spec file for package tmm_driver -# -# Copyright (c) Huawei Technologies Co., Ltd. 2024. All rights reserved. -# -%global debug_package %{nil} -%define kmod_name tmm_driver -Name : %{kmod_name}-kmod -Summary : %{kmod_name}.ko -Version : 1.0 -Release : 0.1 -License : GPLV2 -Group : System/Kernel -Source0 : %{kmod_name}.tar.gz -BuildRoot : %{_tmppath}/%{kmod_name}-%{version}-build -BuildRequires: dos2unix -Requires : rpm coreutils - -%define module_dir 5.10.0-virtcca/tmm -%define module_ko %{kmod_name}.ko - -%description -%{name} module - -%prep -%setup -q -n%{kmod_name} - -%build -cd %_builddir/%{kmod_name}/src -make - -%install -mkdir -p %{buildroot}/lib/modules/%{module_dir} -install -m 0640 %_builddir/%{kmod_name}/src/%{module_ko} %{buildroot}/lib/modules/%{module_dir} - -%clean -rm -rf %{buildroot} - -%files -%defattr(-,root,root) -%attr(0640,root,root) /lib/modules/%{module_dir}/%{module_ko} - -%post -insmod /lib/modules/%{module_dir}/%{module_ko} - -%postun -rmmod %{module_ko} - -%changelog -* Fri May 10 2024 huawei - version 1.0 release 0.1 \ No newline at end of file diff --git a/huk_derive/huk_driver.spec b/virtCCA_driver.spec similarity index 50% rename from huk_derive/huk_driver.spec rename to virtCCA_driver.spec index 50d9629..95753be 100644 --- a/huk_derive/huk_driver.spec +++ b/virtCCA_driver.spec @@ -1,11 +1,11 @@ -# spec file for package huk_driver +# spec file for package virtCCA_driver # # Copyright (c) Huawei Technologies Co., Ltd. 2024. All rights reserved. # %global debug_package %{nil} -%define kmod_name huk_derive +%define kmod_name virtCCA_driver Name : %{kmod_name}-kmod -Summary : %{kmod_name}.ko +Summary : All drivers for virtCCA Version : 1.0 Release : 0.1 License : GPLV2 @@ -15,8 +15,9 @@ BuildRoot : %{_tmppath}/%{kmod_name}-%{version}-build BuildRequires: dos2unix Requires : rpm coreutils -%define module_dir 5.10.0-virtcca/tmm -%define module_ko %{kmod_name}.ko +%define module_dir 5.10.0-virtcca +%define tmm_ko tmm_driver.ko +%define huk_ko huk_derive.ko %description %{name} module @@ -25,22 +26,25 @@ Requires : rpm coreutils %setup -q -n%{kmod_name} %build -cd %_builddir/%{kmod_name}/src +cd %_builddir/%{kmod_name} make %install mkdir -p %{buildroot}/lib/modules/%{module_dir} -install -m 0640 %_builddir/%{kmod_name}/src/%{module_ko} %{buildroot}/lib/modules/%{module_dir} +install -m 0640 %_builddir/%{kmod_name}/tmm_driver/src/%{tmm_ko} %{buildroot}/lib/modules/%{module_dir} +install -m 0640 %_builddir/%{kmod_name}/huk_derive/src/%{huk_ko} %{buildroot}/lib/modules/%{module_dir} %clean rm -rf %{buildroot} %files %defattr(-,root,root) -%attr(0640,root,root) /lib/modules/%{module_dir}/%{module_ko} +%attr(0640,root,root) /lib/modules/%{module_dir}/%{tmm_ko} +%attr(0640,root,root) /lib/modules/%{module_dir}/%{huk_ko} %post -insmod /lib/modules/%{module_dir}/%{module_ko} +insmod /lib/modules/%{module_dir}/%{tmm_ko} +insmod /lib/modules/%{module_dir}/%{huk_ko} %postun rmmod %{module_ko} -- Gitee From d7acf687cbc272ad794186edd4766b7ec93a8cfc Mon Sep 17 00:00:00 2001 From: chenzheng Date: Tue, 28 May 2024 15:54:10 +0800 Subject: [PATCH 3/3] name change --- Makefile | 13 +++ Makefille | 13 --- {huk_derive => sealing_key}/src/Makefile | 2 +- .../src/sealing_key.c | 94 +++++++++---------- virtCCA_driver.spec | 54 ----------- 5 files changed, 61 insertions(+), 115 deletions(-) create mode 100644 Makefile delete mode 100644 Makefille rename {huk_derive => sealing_key}/src/Makefile (90%) rename huk_derive/src/huk_derive.c => sealing_key/src/sealing_key.c (49%) delete mode 100644 virtCCA_driver.spec diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5fb3ae8 --- /dev/null +++ b/Makefile @@ -0,0 +1,13 @@ +.PHONY: clean tmm seal + +all: tmm seal + +tmm: + make -C tmm_driver/src + +seal: + make -C sealing_key/src + +clean: + make clean -C tmm_driver/src + make clean -C sealing_key/src \ No newline at end of file diff --git a/Makefille b/Makefille deleted file mode 100644 index b66c66b..0000000 --- a/Makefille +++ /dev/null @@ -1,13 +0,0 @@ -.PHONY: clean tmm huk - -all: tmm huk - -tmm: - make -C tmm_driver/src - -huk: - make -C huk_derive/src - -clean: - make clean -C tmm_driver/src - make clean -C huk_derive/src \ No newline at end of file diff --git a/huk_derive/src/Makefile b/sealing_key/src/Makefile similarity index 90% rename from huk_derive/src/Makefile rename to sealing_key/src/Makefile index 11bf4a2..5df4ddc 100644 --- a/huk_derive/src/Makefile +++ b/sealing_key/src/Makefile @@ -1,4 +1,4 @@ -obj-m += huk_derive.o +obj-m += sealing_key.o # Otherwise we were called directly from the command # line; invoke the kernel build system. KERNEL_DIR=/usr/src/kernels/$(shell uname -r) diff --git a/huk_derive/src/huk_derive.c b/sealing_key/src/sealing_key.c similarity index 49% rename from huk_derive/src/huk_derive.c rename to sealing_key/src/sealing_key.c index daa19ae..cdb844b 100644 --- a/huk_derive/src/huk_derive.c +++ b/sealing_key/src/sealing_key.c @@ -1,5 +1,5 @@ /* - * show virtCCA secure memory driver for Linux + * get cvm sealing key driver for Linux * * Copyright (C) 2024 Huawei Technologies Co., Ltd. * @@ -15,101 +15,101 @@ #include #include -#define HUK_DERIVE_KEY_LEN 32 -#define USER_PARAM_LEN 64 +#define SEALING_KEY_LEN 32 +#define SEALING_SALT_LEN 64 -struct huk_derive_params -{ - uint8_t user_param[USER_PARAM_LEN]; - uint32_t user_param_len; - uint8_t derived_key[HUK_DERIVE_KEY_LEN]; +struct sealing_key_params { + uint32_t alg; + uint8_t salt[SEALING_SALT_LEN]; + uint32_t salt_len; + uint8_t sealing_key[SEALING_KEY_LEN]; }; -#define TSI_HUK_DEV "tsi_huk" -#define HUK_IOC_MAGIC 'd' -#define HUK_IOCTL_DERIVE_KEY _IOWR(HUK_IOC_MAGIC, 0, struct huk_derive_params) +#define SEALING_KEY_DEV "sealingkey" +#define SEAL_KEY_IOC_MAGIC 'd' +#define IOCTL_SEALING_KEY _IOWR(SEAL_KEY_IOC_MAGIC, 0, struct sealing_key_params) -#define ERR(fmt, args...) (void)pr_err("[%s][%s] " fmt "\n", TSI_HUK_DEV, __func__, ##args) -#define INFO(fmt, args...) (void)pr_info("[%s][%s] " fmt "\n", TSI_HUK_DEV, __func__, ##args) +#define ERR(fmt, args...) (void)pr_err("[%s][%s] " fmt "\n", SEALING_KEY_DEV, __func__, ##args) +#define INFO(fmt, args...) (void)pr_info("[%s][%s] " fmt "\n", SEALING_KEY_DEV, __func__, ##args) #define SMC_TSI_CALL_BASE 0xC4000000 #define SMC_TSI_FID(_x) (SMC_TSI_CALL_BASE + (_x)) -#define SCM_TSI_HUK_DERIVE_KEY SMC_TSI_FID(0x19B) +#define SMC_TSI_HUK_DERIVE_KEY SMC_TSI_FID(0x19B) static struct class *g_driver_class; static dev_t g_devno; static struct cdev g_cdev; -static int tsi_derive_huk(void *user_buf, uint32_t len, void *key_buf) +static int smc_sealing_key(uint32_t alg, void *salt, uint32_t salt_len, void *key_buf) { struct arm_smccc_res res = {0}; - arm_smccc_1_1_smc(SCM_TSI_HUK_DERIVE_KEY, virt_to_phys(user_buf), len, virt_to_phys(key_buf), &res); + arm_smccc_1_1_smc(SMC_TSI_HUK_DERIVE_KEY, alg, virt_to_phys(salt), salt_len, virt_to_phys(key_buf), &res); return res.a0; } -static int cmd_get_derived_key(void __user *argp) +static int cmd_get_sealing_key(void __user *argp) { - struct huk_derive_params huk_params = {0}; + struct sealing_key_params seal_params = {0}; int ret = 0; - uint8_t *user_param = NULL; - uint8_t *derived_key = NULL; + uint8_t *salt = NULL; + uint8_t *sealing_key = NULL; if (!argp) { ERR("args is NULL\n"); return -EINVAL; } - ret = copy_from_user(&huk_params, argp, sizeof(struct huk_derive_params)); + ret = copy_from_user(&seal_params, argp, sizeof(struct sealing_key_params)); if (ret) { ERR("copy huk params failed"); return ret; } - if (huk_params.user_param_len != 0) { - user_param = kzalloc(huk_params.user_param_len, GFP_KERNEL); - if (!user_param) { + if (seal_params.salt_len != 0) { + salt = kzalloc(seal_params.salt_len, GFP_KERNEL); + if (!salt) { ERR("malloc memory failed"); return -ENOMEM; } - (void)memcpy(user_param, huk_params.user_param, huk_params.user_param_len); + (void)memcpy(salt, seal_params.salt, seal_params.salt_len); } - derived_key = kzalloc(HUK_DERIVE_KEY_LEN, GFP_KERNEL); - if (!derived_key) { + sealing_key = kzalloc(SEALING_KEY_LEN, GFP_KERNEL); + if (!sealing_key) { ERR("malloc memory failed"); ret = -ENOMEM; goto free_umem; } - ret = tsi_derive_huk(user_param, huk_params.user_param_len, derived_key); + ret = smc_sealing_key(seal_params.alg, salt, seal_params.salt_len, sealing_key); if (ret != SMCCC_RET_SUCCESS) { - ERR("got tsi huk derive key failed, ret: %d\n", ret); + ERR("got sealing key by smc failed, ret: %d\n", ret); goto free_kmem; } - (void)memset(huk_params.derived_key, 0, HUK_DERIVE_KEY_LEN); - (void)memcpy(huk_params.derived_key, derived_key, HUK_DERIVE_KEY_LEN); - ret = copy_to_user(argp, &huk_params, sizeof(struct huk_derive_params)); + (void)memset(seal_params.sealing_key, 0, SEALING_KEY_LEN); + (void)memcpy(seal_params.sealing_key, sealing_key, SEALING_KEY_LEN); + ret = copy_to_user(argp, &seal_params, sizeof(struct sealing_key_params)); if (ret) { ERR("copy result failed"); } free_kmem: - kfree(derived_key); + kfree(sealing_key); free_umem: - kfree(user_param); + kfree(salt); return ret; } -static long tsi_device_ioctl(struct file *fp, unsigned int cmd, unsigned long arg) +static long seal_device_ioctl(struct file *fp, unsigned int cmd, unsigned long arg) { int ret = 0; void *argp = (void __user *)(uintptr_t)arg; switch (cmd) { - case HUK_IOCTL_DERIVE_KEY: - ret = cmd_get_derived_key(argp); + case IOCTL_SEALING_KEY: + ret = cmd_get_sealing_key(argp); break; default: ERR("invalid command %d", cmd); @@ -119,36 +119,36 @@ static long tsi_device_ioctl(struct file *fp, unsigned int cmd, unsigned long ar return ret; } -static struct file_operations g_huk_fops = { +static struct file_operations g_seal_fops = { .owner = THIS_MODULE, - .unlocked_ioctl = tsi_device_ioctl, + .unlocked_ioctl = seal_device_ioctl, }; -static int __init huk_init(void) +static int __init seal_init(void) { int ret; struct device *class_dev = NULL; - g_driver_class = class_create(THIS_MODULE, TSI_HUK_DEV); + g_driver_class = class_create(THIS_MODULE, SEALING_KEY_DEV); if (IS_ERR_OR_NULL(g_driver_class)) { ERR("class create failed"); return -ENOMEM; } - ret = alloc_chrdev_region(&g_devno, 0, 1, TSI_HUK_DEV); + ret = alloc_chrdev_region(&g_devno, 0, 1, SEALING_KEY_DEV); if (ret < 0) { ERR("alloc_chrdev_region failed!"); goto free_class; } INFO("MAJOR is %d, MINOR is %d", MAJOR(g_devno), MINOR(g_devno)); - class_dev = device_create(g_driver_class, NULL, g_devno, NULL, TSI_HUK_DEV); + class_dev = device_create(g_driver_class, NULL, g_devno, NULL, SEALING_KEY_DEV); if (IS_ERR_OR_NULL(class_dev)) { ERR("device create failed"); ret = -ENOMEM; goto unreg_chrdev; } - cdev_init(&g_cdev, &g_huk_fops); + cdev_init(&g_cdev, &g_seal_fops); ret = cdev_add(&g_cdev, g_devno, 1); if (ret < 0) { ERR("cdev_add failed"); @@ -166,7 +166,7 @@ free_class: return ret; } -static void __exit huk_exit(void) +static void __exit seal_exit(void) { device_destroy(g_driver_class, g_devno); cdev_del(&g_cdev); @@ -176,6 +176,6 @@ static void __exit huk_exit(void) return; } -module_init(huk_init); -module_exit(huk_exit); +module_init(seal_init); +module_exit(seal_exit); MODULE_LICENSE("GPL"); \ No newline at end of file diff --git a/virtCCA_driver.spec b/virtCCA_driver.spec deleted file mode 100644 index 95753be..0000000 --- a/virtCCA_driver.spec +++ /dev/null @@ -1,54 +0,0 @@ -# spec file for package virtCCA_driver -# -# Copyright (c) Huawei Technologies Co., Ltd. 2024. All rights reserved. -# -%global debug_package %{nil} -%define kmod_name virtCCA_driver -Name : %{kmod_name}-kmod -Summary : All drivers for virtCCA -Version : 1.0 -Release : 0.1 -License : GPLV2 -Group : System/Kernel -Source0 : %{kmod_name}.tar.gz -BuildRoot : %{_tmppath}/%{kmod_name}-%{version}-build -BuildRequires: dos2unix -Requires : rpm coreutils - -%define module_dir 5.10.0-virtcca -%define tmm_ko tmm_driver.ko -%define huk_ko huk_derive.ko - -%description -%{name} module - -%prep -%setup -q -n%{kmod_name} - -%build -cd %_builddir/%{kmod_name} -make - -%install -mkdir -p %{buildroot}/lib/modules/%{module_dir} -install -m 0640 %_builddir/%{kmod_name}/tmm_driver/src/%{tmm_ko} %{buildroot}/lib/modules/%{module_dir} -install -m 0640 %_builddir/%{kmod_name}/huk_derive/src/%{huk_ko} %{buildroot}/lib/modules/%{module_dir} - -%clean -rm -rf %{buildroot} - -%files -%defattr(-,root,root) -%attr(0640,root,root) /lib/modules/%{module_dir}/%{tmm_ko} -%attr(0640,root,root) /lib/modules/%{module_dir}/%{huk_ko} - -%post -insmod /lib/modules/%{module_dir}/%{tmm_ko} -insmod /lib/modules/%{module_dir}/%{huk_ko} - -%postun -rmmod %{module_ko} - -%changelog -* Fri May 10 2024 huawei - version 1.0 release 0.1 \ No newline at end of file -- Gitee