环境:centOS 虚拟机
1.下载了一个块设备驱动源码 类似于ramdisk 源码ramhd_mkreq.c
2.生成Makefile文件,来编译此c文件
[zyq@promote disk]$ cat Makefile
obj-m := ramhd.o
ramhd-objs := ramhd_mkreq.o
KERNELDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
make -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -f *.o *.ko *.mod.*
注意:
make -C xxx;rm -f xxx 前面不是空格而是Tab键(通过tab来鉴定是命令行)。
还有,字母不要写错(我就是把第二个KERNELDIR写成了KERNElDIR 一个L 一个l,就没能读出内核中/lib/modules/2.6.32-504.el6.x86_64/build,报错找不到此文件)
若内核中没有 /lib/modules/2.6.32-504.el6.x86_64/build,就要重新编译内核
3.此时/home/zyq/disk下有ramhd_mkreq.c Makefile 两个文件。
4.make 编译
[zyq@promote disk]#make 编译生成.o .ko 文件
[zyq@promote disk]# ls
Makefile Module.symvers ramhd.ko.unsigned ramhd_mkreq.o ramhd.mod.o
modules.order ramhd.ko ramhd_mkreq.c ramhd.mod.c ramhd.o
5.将编译生成的模块ramhd.ko加入内核
[zyq@promote disk]#insmod ramhd.ko 加载模块
[zyq@promote disk]#dmesg
–出现–
ramhda: unknown partition table
ramhdb: unknown partition table
[zyq@promote disk]#ls /dev/ram* 查看设备,多了两个新设备,这就是我们块设备驱动加载出来的。
/dev/ramhda
/dev/ramhdb
6.对设备进行分区
[root@promote disk]# fdisk /dev/ramhda
参考 http://www.jb51.net/LINUXjishu/57192.html
7.为设备创建文件系统
[root@promote disk]# mkfs.ext3 /dev/ramhda1
[root@promote disk]#dmesg
8.设备有文件系统后,可以被挂载
[root@promote disk]# mount /dev/ramhda1 /my
[root@promote disk]#dmesg
EXT3-fs (ramhda1): using internal journal
EXT3-fs (ramhda1): mounted filesystem with ordered data mode
SELinux: initialized (dev ramhda1, type ext3), uses xattr
最后可以在/my下创建目录,文件,(都是属于ext3文件系统属性)
卸载 #umount /my
#rmmod ramhd.ko