基于块的Linux驱动程序 块设备驱动 centos内核编译过程 操作系统课程设计

  • Post author:
  • Post category:linux


操作系统的课程设计,本人也是一头雾水地做完了课程设计,在这里贴下操作过程,放下当时参考的一篇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



版权声明:本文为qq_21456825原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。