操作系统的课程设计,本人也是一头雾水地做完了课程设计,在这里贴下操作过程,放下当时参考的一篇CSDN文章链接:https://blog.csdn.net/cxy_chen/article/details/80998510

这篇文章里贴了完整的代码,只需要simp_blkdev.c和Makefile两个文件

如果你有幸跟本人遇到同样的课程设计选题,并且还没有开始选题,作为前辈我可以跟你分享下选题的经验。

增加系统的调用是最简单的,虽然需要编译内核,但是可以容易地搜到许多完整的教程

其次是基于块的linux驱动程序,实际上就是块设备驱动程序,甚至可以说比增加系统调用还要简单,因为这个题目其实不用进行内核编译,但是能直接搜到的相关教程很少,其他大多数课程设计都是字符设备驱动程序,只能搜块设备驱动程序来查到比较少的例子。不用内核编译的话只要有代码程序再加载驱动程序模块就可以啦,再看看驱动程序的执行状况就ok了

再次是基于fuse的文件系统、基于模块的文件系统这两个,文件系统的验证操作比较多,读写文件和加密文件之类,会复杂一点,所以不好做

最后是VFS那个,基本找不到教程,没有人知道怎么做,选这题的人在课程设计的最后一天都不知道怎么做,最后还是老师手把手教他们该怎么做

开始之前有个需要提醒的是不要用Ubantu,班上的人用ubantu都用到急眼了,按照网上的教程,每一步都能报出错误,为了消除这些错误又花了老多时间,有些还找不到解决方法,让人手足无措,班上一个自学了一些Linux的大佬本该早早做完了课程设计,因为Ubuntu的问题硬生生被拖到倒数第二天换了个操作系统才做好,发动态说再用Ubuntu就是?。推荐使用的是centos 7操作系统,界面简洁而且使用比Ubuntu好用很多,不需要安装东西就能在主机和虚拟机间复制粘贴文本和文件,对于新手更加友好,推荐直接从官网下载centos 7操作系统iso镜像光盘文件,官网地址:https://www.centos.org/

系统安装教程自行搜索,为了让虚拟机运行得更流畅,设置虚拟机硬件的时候,建议内存分配3G,处理器分配4个或者2个二核处理器,如果想要编译内核的话硬盘空间分配60G。虚拟机没有网络的话,看看右上角关机键旁边点出的菜单显示的有线连接是否已经连接上,没有连接上的话启动连接,主机更换网络的时候虚拟机的有线连接会自动断开,有线连接已连接了的话尝试硬件配置中网络适配器三种网络模式切换,理论上总有一种模式能正常连到主机的网络的,注意不要连校园网,否则虚拟机在终端下载安装软件包的时候会有域名错误

详细操作步骤:

1.在终端中进入程序文件所在的目录,本人觉得目录位置不重要,所以直接放在了主目录,不必进行额外的目录移动操作。代码在上面贴出的另外一篇CSDN博客里,可以直接粘贴到记事本中再修改文件名及后缀,再剪切到虚拟机主目录中。如图主目录下右边两个文件

2.先输入命令su后输入密码开启管理员权限,输入命令make clean将上次编译的结果清除,再输入命令make编译程序,此时若进入存放程序文件的目录里可以看见编译好的模块文件

3.输入命令insmod simp_blkdev.ko将编译好的块设备驱动模块插入到内核,输入命令lsblk列出当前的块设备信息。如下图第一个块设备simp_blkdev就是刚刚添加上去的,大小SIZE为50M

4.输入命令mkfs.ext3 /dev/simp_blkdev在该块设备上建立ext3文件系统

5.连续输入命令mkdir -p /mnt/temp1,命令mount /dev/simp_blkdev /mnt/temp1/,命令mount | grep simp_blkdev将该块设备挂载到/mnt/temp1目录下,再输入命令lsmod查看模块调用情况。图中第四个模块simp_blkdev已被调用

6.输入命令ls /mnt/temp1/查看挂载目录中的所有文件,输入命令cp /etc/init.d/* /mnt/temp1将另一个目录中的文件复制到挂载目录,再次输入ls /mnt/temp1/查看复制进来的文件,输入df -H查看挂载结果,可以看到最后一个我们新增的文件系统的资源使用情况为3%,再输入命令rm -rf /mnt/temp1/*删除挂载目录中的所有文件,再输入df -H查看资源使用情况已变为2%,这就是对块设备驱动的调用测试

7.输入命令umount /mnt/temp1/取消挂载,输入命令lsmod | grep simp_blkdev查看模块的调用结果,调用数已从1变回0了。输入命令rmmod simp_blkdev移除该模块,再输入lsmod | grep simp_blkdev已经查不到该模块了,操作到此结束

如果在第三步中没有办法正常将模块插入到内核,可以尝试编译内核

编译内核命令输入顺序:

(部分命令需要管理员权限,建议先进入管理员模式)

1. 从官网下载内核包到当前目录并解压

1.1 wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.20.2.tar.xz

1.2 tar -xvJf linux-4.20.2.tar.xz

2. 安装基本组件

2.1 yum -y install gcc

2.2 yum -y install ncurses-devel

2.3 yum -y groupinstall "Development Tools"

2.4 yum -y install zlib-devel

2.5 yum -y install openssl-devel

3. 编译安装kernel 4.20.2

3.1 cd linux-4.20.2

make menuconfig//见下方图片

3.2 make time -j4

3.3 make modules_install

3.4 make install

4. 输入reboot或者手动选择重启系统,选择新内核启动//见下方图片

内核编译过程说明:

建议选择较新的内核版本,可以自己去官网查看,就是上面wget命令后面的网址。安装组件需要联网。make menuconfig会进入如下界面,方向键移动光标选择save后选择exit退出即可,或者直接选择exit,退出时会提示是否保存设置,选择是即可,这样直接保留原设置,无需改动

make time -j4命令使得系统在编译内核的时候进行四线程同时编译,大大提高编译速度,当时我挂着编译洗了个澡大概四十分钟多就编译完了,重启系统后会出现下图的内核选择界面,选择编译好的新内核回车启动

课程设计详细报告链接:https://wenku.baidu.com/view/3af06e4d0d22590102020740be1e650e53eacf2e

基于块的linux驱动程序,基于块的Linux驱动程序 块设备驱动 centos内核编译过程 操作系统课程设计...相关推荐

  1. mini2440 linux内核编译与移植 课程设计,linux内核移植步骤-mini2440

    建立使用 Fedora 9,版本太高,由于链接库的区别可能造成不可预料的错误.或者说配置相对复杂多了.本教程仅提供给刚接触内核的朋友,大牛们当路过就是,有发现什么错误还望指教. ① 修改顶层的Make ...

  2. :linux内核编译过程的最终总结版

    参考了linuxsir和水母的linux版的精华区,本人不保留任何版权. 经过归纳整理,看看上面的就可以了,包括补丁如何打.具体的一些选项可以往下看,一些一看就懂的白痴选项,并没有选进来,因此适合对电 ...

  3. linux课程设计题目主存空间的分配与回收,可变分区分配与回收,哈尔滨理工大学操作系统课程设计报告.doc-资源下载在线文库www.lddoc.cn...

    可变分区分配与回收,哈尔滨理工大学 操作系统课程设计报告.doc 哈 尔 滨 理 工 大 学 课 程 设 计 ( 操 作 系 统 ) 题 目 可变分区分配与回收 (首次适应算法) 班 级 计算机科学与 ...

  4. 检索上Linux操作系统课程的教师名,Linux操作系统课程设计.docx

    课 程 设 计 报 告 课程名称 Linux操作系统课程设计 指导教师 起止日期 2016-03-21 至 2016-06-13 学 院 信息与通信工程学院 专 业 电子信息工程 学生姓名 班级/学号 ...

  5. linux课程设计死锁避免,linux操作系统课程设计—车辆死锁.doc

    linux操作系统课程设计-车辆死锁.doc 键入文字"操作系统原理"课程设计BX090709吴沛儒操作系统原理课程设计报告姓名吴沛儒班级BX0907学号9指导老师胡静二〇一一年十 ...

  6. 【Linux】Linux添加系统调用以及内核编译过程

    在想要替换原有系统内核或者需要在原来的系统中添加一些系统调用的时候就会涉及到Linux内核的编译.但是内核编译虽然步骤简单,但是需要注意的东西还是太多了.首先一点就是由于Linux的开源性导致的版本问 ...

  7. Linux并发程序课程设计报告,网络操作系统课程设计--进程机制与并发程序设计-linux下生产者与消费者的问题实现.doc...

    网 络 操 作 系 统 课 程 设 计 网络操作系统课程设计 设计内容:进程机制与并发程序设计inux下生产者与消费者的问题实现进程机制与并发程序设计inux下生产者与消费者的问题实现 (1)掌握基本 ...

  8. <Linux开发>--驱动开发-- 字符设备驱动(3) 过程详细记录

    <Linux开发>–驱动开发-- 字符设备驱动(3) 过程详细记录 驱动开发是建立再系统之上的,前面作者也记录了系统移植的过程记录,如果有兴趣,可进入博主的主页查看相关文章,这里就不添加链 ...

  9. 操作系统课程设计:Linux系统调用/基于模块的文件系统/Linux驱动/统计Linux系统缺页的次数 整合

    目录 一.可选题目 题目1:新增Linux系统调用 题目2:实现基于模块的文件系统 题目3:新增Linux驱动程序 题目4:统计Linux系统缺页的次数 二.操作顺序 附录:参考资料 题1 题2 题3 ...

最新文章

  1. 解释器模式(interpreter)解析例子
  2. 判断是不是一个数组?
  3. jQuery 序列化表单数据 serialize() serializeArray()
  4. javascript之值传递与引用传递
  5. JavaScript基础08-day10【函数的返回值、实参、立即执行函数、方法、全局作用域、函数作用域、提前声明、this、工厂方法创建对象、构造函数】
  6. 矩阵A对任意的可逆矩阵p都有Ap=pA,证明A为数量矩阵
  7. mysql+根密码是什么意思,重设MySQL根密码
  8. (30)Gulp 文件操作
  9. mediarecorder 录制的文件无法拖动进度条_如何下载网络ts视频文件
  10. 用VScode写html文件以及调用浏览器运行
  11. java设计模式-模板方法模式
  12. ecshop模板构建说明
  13. 域名转移:以腾讯云转至阿里云为例
  14. ajax帝国cms自动加载分页,帝国CMS7.0版ajax无刷新添加评论插件
  15. office办公软件 下载与安装教程
  16. cytus2打开显示taptap服务器,音乐世界Cytus2黑屏怎么办_音乐世界Cytus2黑屏解决方法_游戏吧...
  17. Reinforcement--Revit钢筋创建
  18. java打印字符串显示_JAVA调用系统打印机打印字符串
  19. 微信开发——熟悉支付流程
  20. 企业级带库走向大型化、智能化

热门文章

  1. 阿里巴巴为什么选择Apache Flink?
  2. jsjq面试笔记(下)
  3. 第三:jenkins集成httpclient项目并生成在线报告(接口自动化落地)
  4. Linux创建进程必须fork么,Linux - fork() 创建进程
  5. Spring Boot与JWT整合实现前后端分离的用户认证
  6. windows 操作系统及相应服务的管理 综合
  7. python壁纸超清全面屏_iOS 关于全面屏适配的方案及UI在不同尺寸下适配方案
  8. c语言 二进制输出_C语言编译器
  9. c语言增加动态分配的存储空间吗,C语言 关于内存动态分配问题
  10. ios java环境变量_iOS 环境变量配置(DebugReleaseTest)