操作系统课程设计:新增Linux驱动程序(重制版)(一)

简介: 操作系统课程设计:新增Linux驱动程序(重制版)

一、课程设计目的

知识方面:

1.掌握操作系统功能模块的设计与实现方法。

能力与素质方面:

1.能够在阅读和分析开源操作系统的基础上,对其进行功能模块划分;能够指出现有功能模块的不足,并能够通过文献的研究给出解决方案。

2.能够完成操作系统功能模块的设计、实现与测试,同时在设计操作系统功能模块中,能体现优化和创新意识。

3.能够制定合理的实验方案及对实验结果进行分析并得出结论,针对实验结果分析解决过程的影响因素,论证解决方案的合理性,以获得有效结论。

4.能够根据设计任务和要求组成团队,分工协作,并能承担个体、团队成员以及负责人的角色。

5.能够用口头和书面方式清晰表述设计原理及相关概念与原理,包括陈述发言,清晰表达和回应指令。

6.能够撰写比较规范的课程设计报告。

二、设计内容及具体要求

题目3:新增Linux驱动程序

增加一个驱动程序(使用内存模拟设备),使用模块编译方式。

要求:

(1)可以动态加载和卸载新的驱动。

(2)通过程序或命令行使用该驱动。

(3)至少能通过该驱动保存256MB的数据,还能将这些数据读取出来。

(4)要重新编译Linux内核,可模仿ramdisk的实现方式。

三、实验环境

物理机:Windows11 教育版

虚拟机:VMware Workstation Pro 16

虚拟机操作系统:CentOS 8 64位(CentOS-8.5.2111-x86_64)

Linux内核版本:linux-4.18.20

四、实验步骤-内核编译

在实验开始前,需要预先与队友统一实验环境中的虚拟机操作系统与Linux内核版本,以在后续的整合步骤中便于操作。

首先,在CentOS官网上点击“Download”,在该页面点击“x86_64”,并进入找到CentOS在国内的镜像下载站,选择进入南京大学的镜像下载站。http://mirrors.nju.edu.cn/centos/8.5.2111/isos/x86_64/

并下载文件大小约为10GB的iso文件,而不是文件大小约为800m的boot文件。

安装VMware Workstation 16 pro。由于之前已经装过VMware14,在更新过程中可能系统会提示安装失败的情况。经查阅相关资料,需要按图中流程进行操作:以管理员身份打开cmd,执行”sc stop vmx86& sc delete vmx86”和”sc stop vstor2-mntapi20-shared &sc delete vstor2-mntapi20-shared”。在”C:\Windows\System32\drivers\”目录下删除”vmx86.sys”、”vstor2-mntapi20-shared.sys”、”vstor2-x64.sys”。在”C:\windows\system32\drvstore”目录下删除所有前缀为”vmx86”的文件。同时,也要以管理员身份打开组策略编辑器(gpedit),在HEKY_LOCAL_MACHINE\SOFTWARE中删除与VMware有关的项目。

最后重启主机。运行VMware 16 Pro安装程序。至此,VMware虚拟机得以正确地安装。

打开VMware,点击“创建新的虚拟机”,运行安装向导。采用典型配置,进行简易安装,如图所示。

为了方便后续操作,可以将用户账户和根账户(root)的密码设置成1。

虚拟机网络采用网络地址转换NAT。在虚拟机操作系统安装完成后,即可直接连接外部网络。

在配置虚拟机硬件时,虚拟机内存可以分3GB。处理器可以分4个,每个处理器有两个内核,以在编译内核时可以使用8个内核运行编译。磁盘空间需要开足够大,使用80GB而不是默认推荐的20GB,以防止内核编译过程中出现磁盘空间不足的情况。同时,需要注意删去虚拟机硬件设置中的打印机与USB接口。否则,在物理机中可能会出现蓝屏的情况。

在虚拟机创建完成后,即可以启动虚拟机,配置系统。需要说明的是,CentOS 8的系统配置过程较为简单,只需等待其进度条读完后,即可以直接进入图形化界面。

为了方便地调出terminal控制台,可以在桌面右键设置Display Settings,在键盘上添加快捷键,如图,设置可以用快捷键打开控制台。

调出terminal控制台后,输入cat /proc/version,即可以查看当前使用的Linux内核版本号与gcc编译器版本号。

由于windows11系统可能与vmware的vmware tools不兼容,不能从主机直接拖文件向虚拟机,所以需要使用xftp共享文件夹的方式从主机向虚拟机传文件。Centos8的网络IP地址配置文件在/etc/sysconfig/network-scripts 文件夹下,名为ifcfg-ens160。在cmd输入ifconfig,得到本机dhcp时的IP地址inet。利用xftp进行连接,会话的主机就是本次ifconfig得到的ip地址。利用sftp协议。

下载需要进行编译的新的内核的版本。在本文中,选用linux-4.18.20版本。如图,已经成功将linux源码文件包传入。但是,如需直接传入/usr/src/kernels文件夹中,可能会因为权限问题而传输失败。所以,需要先将文件传入~/Desktop.在CentOS 8 中,可以直接双击解压,无需输入命令行。但在把Desktop的文件复制到/usr/src/kernels时,因为用户没有权限,所以只能通过命令行的形式将文件复制进入。执行如下语句:

sudo cp -r /home/zombotany/Desktop/linux-4.18.20 /usr/src/kernels

接下来的步骤为配置编译环境。需要说明的是,CentOS 8的编译环境安装过程与其他Linux发行版的安装流程区别较大。在此,将CentOS8的编译环境安装过程进行详细介绍。

首先,安装gcc。sudo yum install gcc

安装g++。在centos中,安装g++的命令需要写成sudo yum install gcc-c++ 在安装过程中可能会提示未找到匹配的包。经查阅相关资料,知道了是yum源的原因。于是安装 EPEL 源,使用最新版本8。执行语句:yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

在CentOS8中,安装devtoolset时,不能用yum,而是使用dnf.需要注意的是,scl在CentOS8的yum源中是不提供的。需要执行语句:sudo dnf -y group install "Development Tools"

接下来,同样地,执行语句sudo dnf install devtoolset-9-gcc

还需要安装的是bison、flex、gdb、make、bc等工具。这些语句在CentOS各个版本是相同的,不作赘述。

sudo yum install gdb -y

sudo yum install make -y

sudo yum install bison -y

sudo yum install flex -y

sudo yum install bc -y

在想要编译的文件夹中输入make,会被提示缺文件。被系统建议安装libelf-dev libelf-develefutils-libelf-devel

但是,只能安装第三个,前两个都不是centos能装的,只能执行sudo yum -y install efutils-libelf-devel

在生成编译配置.config之前,还需要执行如下两条语句:

sudo yum install ncurses-devel -y

sudo yum install openssl-devel -y

在安装完如上文所述的所有依赖后,进入需要编译的内核所在的文件目录,执行命令:cd /usr/src/kernels/linux-4.18.20

在编译之前,首先需要执行清理命令。执行:make mrproper。在执行完之前残留的编译结果后,需要生成编译配置文件。执行make menuconfig,在等待数秒后,控制台会显示如图14的图形界面。利用键盘方向键进行选择,直接全部使用默认参数。选定save项,并采用默认的配置文件名.config,如图15所示。

输入make -j8,启动8个核开始编译。这一步骤大约需要一小时左右。如果发现系统很快执行完,则说明该步骤没有被正确地执行完毕,仍然存在较多文件没有被正确地编译。若报错missing file,则make相应的文件。若在make bzImage时又被提示”no rule to make target ‘certs/rhel.pem’”,则用vi编辑器打开.config文件,中注释掉CONFIG_SYSTEM_TRUSTED_KEYS或写死CONFIG_SYSTEM_TRUSTED_KEYS=””,解决该问题。该配置项大约在文件结束处。修改完成后,输入键盘的esc,并输入”:wq”退出并写入文件。

编译完成后生成了bzImage,该文件在目录arch/x86_64/boot下,如图17所示。编译完成后输入make modules编译模块。输入make modules_install安装模块,输入make install安装新内核。安装完成新内核后,输入reboot,进入新内核。


相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
16天前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
43 1
|
18天前
|
安全 Linux 数据安全/隐私保护
深入Linux操作系统:文件系统和权限管理
在数字世界的海洋中,操作系统是连接用户与硬件的桥梁,而Linux作为其中的佼佼者,其文件系统和权限管理则是这座桥梁上不可或缺的结构。本文将带你探索Linux的文件系统结构,理解文件权限的重要性,并通过实际案例揭示如何有效地管理和控制这些权限。我们将一起航行在Linux的命令行海洋中,解锁文件系统的奥秘,并学习如何保护你的数据免受不必要的访问。
|
18天前
|
搜索推荐 Linux
深入理解Linux操作系统的启动过程
本文旨在揭示Linux操作系统从开机到完全启动的神秘面纱,通过逐步解析BIOS、引导加载程序、内核初始化等关键步骤,帮助读者建立对Linux启动流程的清晰认识。我们将探讨如何自定义和优化这一过程,以实现更高效、更稳定的系统运行。
|
16天前
|
存储 缓存 网络协议
Linux操作系统的内核优化与性能调优####
本文深入探讨了Linux操作系统内核的优化策略与性能调优方法,旨在为系统管理员和高级用户提供一套实用的指南。通过分析内核参数调整、文件系统选择、内存管理及网络配置等关键方面,本文揭示了如何有效提升Linux系统的稳定性和运行效率。不同于常规摘要仅概述内容的做法,本摘要直接指出文章的核心价值——提供具体可行的优化措施,助力读者实现系统性能的飞跃。 ####
|
17天前
|
缓存 监控 网络协议
Linux操作系统的内核优化与实践####
本文旨在探讨Linux操作系统内核的优化策略与实际应用案例,深入分析内核参数调优、编译选项配置及实时性能监控的方法。通过具体实例讲解如何根据不同应用场景调整内核设置,以提升系统性能和稳定性,为系统管理员和技术爱好者提供实用的优化指南。 ####
|
1月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
95 8
|
1月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
269 6
|
1月前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
80 3
|
1月前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
73 2