news 2026/7/14 5:40:32

第四章 实验课 中断和异常管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第四章 实验课 中断和异常管理

一、任务1:使用tasklet实现打印helloworld(20min)

1、任务描述

编写内核模块,使用tasklet实现打印helloworld。
加载、卸载模块并查看模块打印信息。

2、实验过程

tasklet_interrupt.c文件

#include <linux/module.h> #include <linux/interrupt.h> MODULE_LICENSE("GPL"); static struct tasklet_struct my_tasklet; static void tasklet_handler(unsigned long data) { printk("Hello World! tasklet is working...\n"); } static int __init mytasklet_init(void) { printk("Start tasklet module...\n"); tasklet_init(&my_tasklet, tasklet_handler, 0); tasklet_schedule(&my_tasklet); return 0; } static void __exit mytasklet_exit(void) { tasklet_kill(&my_tasklet); printk("Exit tasklet module...\n"); } module_init(mytasklet_init); module_exit(mytasklet_exit);


Makefile文件

ifneq ($(KERNELRELEASE),) obj-m := tasklet_interrupt.o else KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules endif .PHONY:clean clean: -rm *.mod.c *.o *.order *.symvers *.ko


编写好上述文件

内核模块加载结果:

二、任务2:用工作队列实现周期打印helloworld(25min)

1、任务描述

编写一个内核模块程序,用工作队列实现周期打印helloworld。
加载、卸载模块并查看模块打印信息。

2、实验过程

workqueue_test.c文件

#include <linux/module.h> #include <linux/workqueue.h> #include <linux/delay.h> MODULE_LICENSE("GPL"); static struct workqueue_struct *queue = NULL; static struct delayed_work mywork; static int i = 0; void work_handle(struct work_struct *work) { printk(KERN_ALERT "Hello World!\n"); } static int __init timewq_init(void) { printk(KERN_ALERT "Start workqueue_test module."); queue = create_singlethread_workqueue("workqueue_test"); if(queue == NULL){ printk(KERN_ALERT "Failed to create workqueue_test!\n"); return -1; } INIT_DELAYED_WORK(&mywork, work_handle); for(;i <= 3; i++){ queue_delayed_work(queue, &mywork, 5 * HZ); ssleep(15); } return 0; } static void __exit timewq_exit(void) { flush_workqueue(queue); destroy_workqueue(queue); printk(KERN_ALERT "Exit workqueue_test module."); } module_init(timewq_init); module_exit(timewq_exit);


Makefile文件

ifneq ($(KERNELRELEASE),) obj-m := workqueue_test.o else KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules endif .PHONY:clean clean: -rm *.mod.c *.o *.order *.symvers *.ko


编写好上述文件

内核模块加载结果:

由代码逻辑知:工作队列延时 5*HZ(5秒)开始执行,对应上图中模块加载后5秒才打印HelloWorld!;而后每次执行工作队列中间休眠15秒,与上图对应。

三、任务3:编写一个信号捕获程序,捕获终端按键信号(25min)

1、任务描述

在用户态编写一个信号捕获程序,捕获终端按键信号(包括ctrl+c、ctrl+z、ctrl+\)。
编译上述程序后运行,在终端输入按键信号(ctrl+c、ctrl+z、ctrl+\),查看输出信息。

2、实验过程

catch_signal.c文件

#include <signal.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> void signal_handler(int sig) { switch(sig){ case SIGINT: printf("\nGet a signal:SIGINT. You pressed ctrl+c.\n"); break; case SIGQUIT: printf("\nGet a signal:SIGQUIT. You pressed ctrl+\\.\n"); break; case SIGTSTP: printf("\nGet a signal:SIGHUP. You pressed ctrl+z.\n"); break; } exit(0); } int main() { printf("Current process ID is %d\n", getpid()); signal(SIGINT, signal_handler); signal(SIGQUIT, signal_handler); signal(SIGTSTP, signal_handler); for(;;); }

运行结果:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/13 2:10:31

Flutter 与 OpenHarmony 深度集成:构建分布式多端协同应用

Flutter 与 OpenHarmony 深度集成&#xff1a;构建分布式多端协同应用 作者&#xff1a;L、218 发布平台&#xff1a;CSDN 日期&#xff1a;2025年12月16日 引言 在前两篇文章中&#xff0c;我们成功将 Flutter 应用运行于 OpenHarmony&#xff0c;并通过 Platform Channel 调…

作者头像 李华
网站建设 2026/7/14 10:13:37

企业IT如何批量管理VM17许可证?快马解决方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个企业级VM17许可证管理系统&#xff0c;包含以下功能&#xff1a;1)批量生成VM17密钥&#xff1b;2)密钥分配追踪&#xff1b;3)到期自动提醒&#xff1b;4)使用情况统计面板…

作者头像 李华
网站建设 2026/7/10 20:03:34

对比评测:Poppler vs 其他Windows PDF工具效率

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个性能对比测试脚本&#xff0c;比较Poppler、PDFium和Ghostscript在Windows平台处理PDF的性能。测试项目包括&#xff1a;1) 100页PDF转文本速度&#xff1b;2) 高分辨率PDF…

作者头像 李华
网站建设 2026/7/13 17:47:01

电商系统如何用cron实现自动化运营

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个电商系统的定时任务集合&#xff0c;包含以下功能&#xff1a;1) 每30分钟检查未支付订单&#xff0c;超过2小时未支付的自动取消&#xff1b;2) 每天凌晨1点同步库存数据到…

作者头像 李华
网站建设 2026/7/13 20:45:07

循环队列在实时系统中的5个经典应用场景

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请实现一个用于音频数据处理的循环队列&#xff0c;要求&#xff1a;1. 队列大小为1024 2. 支持批量入队(每次最多128个采样点) 3. 支持批量出队 4. 实现一个简单的音频波形平滑处理…

作者头像 李华
网站建设 2026/7/13 20:27:06

书籍-刘勰《文心雕龙》

刘勰《文心雕龙》详细介绍 书籍基本信息 书名&#xff1a;文心雕龙 作者&#xff1a;刘勰&#xff08;南朝梁&#xff09; 成书时间&#xff1a;南朝梁武帝时期&#xff08;约公元501-502年&#xff09; 卷数&#xff1a;50卷 类别&#xff1a;文学理论、文学批评、古典文论、美…

作者头像 李华