一、实验目的
分析一个典型的块设备RAM-DISK的驱动程序,学习编写设备驱动程序的一般过程。将这个RAM-DISK的程序改造成为U盘的驱动程序,并通过它来使用你的U盘。
二、实验内容
仔细阅读上一节中radimo的源代码,将radimo驱动程序改写成为一个U盘驱动程序。在检查时,你需要当场独立完成以下操作:
(1) 用lsmod命令查询系统中是否已经加载usb-storage的模块,这是Linux系统自带的U盘驱动程序。如果已经加载,则用rmmod命令卸载这个模块。
(2) 编译改装后的radimo程序,要求能编译通过,允许出现编译警告。
(3) 用insmod命令加载改装后的radimo程序。
(4) 插入U盘。要求在用dmesg查看log文件时,能够看到改装的radimo程序发现了U盘。允许你的程序只认识一种或者有限的几种U盘,不要求能够认出市面上所有U盘。
(5) 能够在log文件中显示出U盘的容量。
(6) 用mknod命令建立设备文件,并用mount命令挂接这个U盘的文件系统到/mnt。你的U盘可以预先用Windows格式化好。
(7) 用df命令应该能够看到已经挂接好的U盘。
(8) 用ls /mnt命令应该能够看到U盘中的内容。用cp命令能够将U盘中的任意文件复制到硬盘上。
(9) 用umount命令和rmmod命令清理现场。
(10) 在以上各步骤中,随时回答老师提出的问题。不要求回答完全准确,但基本原理必须能够阐述清楚,可以当场查资料。
三、实验过程记录
下载实验代码并解压
查看radimo.c文件
查看radimo.h文件
查看makefile文件
此处发现因版本问题编译失败,多方查询后选择使用旧版本镜像。用lsmod命令查询系统中是否已经加载usb-storage的模块。
输入mount -t vfat /dev/sdbl /mnt装载u盘。输入cd /mnt/进入U盘并查询U盘的目录内容
输入gcc -c -I/usr/src/linux-2.4/include radimo.c -mcmodel=kernel调用gcc编译这个radimo.c文件,得到一个radimo.o的文件,输入ls查看文件
输入mknod /dev/disk b 42 0<回车>,建立一个叫disk的设备文件
查看文件
装载内核模块
输入lsmod查看内核模块
输入mke2fs /dev/disk创建文件系统
输入mount /dev/my_mod /mnt,把这个磁盘挂载
输入df查看当前挂载的磁盘
用umount命令清理现场
用rmmod命令清理现场
四、实验小结
1.在本实验中,我们分析了一个典型的块设备RAM-DISK的驱动程序,学习编写设备驱动程序的一般过程。将这个RAM-DISK的程序改造成为U盘的驱动程序,并通过它来使用U盘。这个实验中我遇到的最大问题是因为实验所需要的版本过低、新版本不支持导致的反复编译失败问题。多方查询资料后无果,选择使用旧版内核进行本实验。
2.本实验的内容是非常深入的。需要对操作系统的设备驱动机制十分熟悉。尽管现在我并没有完美地完成实验,但本次实验也让我对操作系统设备驱动有了初步的了解,对后续的学习有显著帮助。