Linux Kernel Lab 7: I/O Multiplexing & Character Device Polling ...

需积分: 0 0 下载量 147 浏览量 更新于2024-08-04 收藏 942KB DOCX 举报
本章节的实验主要涉及Linux内核开发与I/O多路复用技术在ARM架构上的应用。在Lab7中,学生将学习如何在虚拟设备中添加I/O多路复用(I/O Multiplexing)的支持,以便提高系统对并发输入输出请求的处理能力。 首先,参与者需要进入指定的Lab7目录,并设置相应的环境变量,如`export ARCH=arm`和`export CROSS_COMPILE`,确保指向自己的runninglinuxkernel_4.0源码目录。在这个环境下,他们需要编译一个名为`gcctest.c`的test程序,通过`arm-linux-gnueabi-gcc`编译器将其链接为静态库,并执行`make`命令。 接着,将编译后的ko内核模块和test程序复制到`kmodules`目录下,这是为了在运行时加载到正在使用的Linux内核中。实验的核心是通过脚本`run.sh arm32`启动Qemu虚拟机,其中使用传统字符设备注册方法而非misc机制,手动创建设备节点。test程序在此背景下作为后台进程运行,采用`&`符号确保它进入等待模式,以监听来自设备的输入。 实验的关键步骤包括使用`echo`命令向设备0写入字符串,观察test进程能否接收到并打印出来,以此验证I/O多路复用功能的实现。进一步地,实验者需要尝试向设备1写入数据,同样检查test进程是否能有效响应。 进阶思考部分鼓励读者深入理解字符设备驱动中的polling方法,即设备驱动如何利用poll函数集来优化设备访问。此外,挑战读者思考如何将test程序由polling方法改写为select方法,这涉及到操作系统调度和多路复用机制的更深层次理解。 整个实验不仅提供了实践平台,还与笨叔的最新教程作品相联系,该教程是一套5小时的高清视频课程,包含140多页PPT和8个实验,覆盖x86_64和arm64架构,专注于Linux内核崩溃处理(kdump+crash)的实际应用。对于Linux运维或研发人员来说,掌握这些技能至关重要,因为他们需要能够解决服务器和嵌入式产品开发中的死机黑屏问题。 订阅视频课程可通过笨叔的淘宝店铺获取,进一步提升Linux技术能力,成为能够在职场中解决实际问题的专家。

7.main方法参数的使用。阅读下面的代码。 --------程序清单------------------------------------------------------------------------------------------------------------ package chapter06; public class CommandLine { public static void main(String[] args) { if (args.length == 0) { System.out.println("Hello, welcome to Java!"); } else { switch (args[0]) { case "-draw" -> { for (int i = 0; i < 3; i++) { for (int j = i; j < 3; j++) System.out.print("*"); System.out.println(); } } case "-add" -> {// + int sum = 0; for (int i = 1; i < args.length; i++) { int num = Integer.parseInt(args[i]); sum += num; if (i != 1 && num > 0) System.out.print("+"); System.out.print(args[i]); } System.out.println("=" + sum); } default -> { System.out.println("no such command-line option"); } } } } } --------------------------------------------------------------------------------------------------------------------------------- 以下操作都在该类源文件所在的文件夹下。 (a)(2分)编译完该类后,如果在终端通过输入命令“java chapter06.CommandLine -cdl Wenzhou”运行该类,此时main方法的形参args其每个元素的值是什么? (b)(16分)分别通过以下命令运行该程序,其输出结果是什么?请简单说明你的理由(没有理由不给分)。 java chapter06.CommandLine -add 12 31 44 -1 -2 java chapter06.CommandLine -draw java chapter06.CommandLine java chapter06.CommandLine -cdl (c)(2分)在Eclipse里设置运行配置,然后得到(b)中第1条命令运行效果并截图。 答:

2023-05-25 上传