20135314朱恒志-实验四
北京电子科技学院(BESTI)
实 验 报 告
课程:密码系统设计基础 班级:1353
姓名:朱恒志
学号:20135314
成绩: 指导教师: 娄嘉鹏 实验日期:2015.11.17
实验密级: 预习程度: 实验时间:15:30~17:30
仪器组次:4 必修/选修:必修 实验序号:14
实验名称: 内核驱动设计入门-模块方式驱动实验
实验目的与要求: 掌握使用模块方式进行驱动开发调试的过程
实验仪器:
名称 |
型号 |
数量 |
Arm开发板 |
UP-TECH |
1 |
联想电脑 |
|
1 |
实验内容、步骤:
1 、阅读和理解源代码
进入/arm2410cl/exp/drivers/demo,使用 vi 编辑器或其他编辑器阅读理解源代码。
2 、编译驱动模块及测试程序
在 Makefile 中有两种编译方法, 可以在本机上使用 gcc 也可以使用交叉编译器
进行编译,这里我们只介绍用 gcc 的结果。
[root@zxt /]# cd /arm2410cl/exp/drivers/demo/
[root@zxt demo]# make
gcc -c -I.. -Wall -O -D__KERNEL__ -DMODULE -I/usr/src/linux/include demo.c -o demo.o
demo.c:108: warning: initialization from incompatible pointer type
gcc -c -I.. -Wall -O -D__KERNEL__ -DMODULE -I/usr/src/linux/include hello.c -o hello.o
gcc -I.. -Wall -O -D__KERNEL__ -DMODULE -I/usr/src/linux/include -c -o test_demo.o test_demo.c
gcc test_demo.o -o test_demo
注意:如果编译的时候出现问题,可能是在/usr/src 下没有建立一个 linux 连接,可以使用
下面的命令:
[root@zxt demo]# cd /usr/src/
[root@zxt src]# ln -sf linux-2.4.20-8 linux
[root@zxt src]# ls
debug linux linux-2.4 linux-2.4.20-8 redhat
3 、测试驱动程序
如果使用 gcc 编译的话, 需要通过下面的命令来建立设备节点, 如果使用交叉编译器的话,不需要建立设备节点。
#mknod /dev/demo c 254 0
首先要插入驱动模块 demo.o,然后可以用 lsmod 命令来查看模块是否已经被插入,在不使
用该模块的时候还可以用 rmmod 命令来将模块卸载。
[root@zxt demo]# insmod demo.o
Warning: loading demo.o will taint the kernel: no license
See http://www.tux.org/lkml/#export-tainted for information about tainted modules
Module demo loaded, with warnings
下面使用测试程序来进行测试,按照上面步骤成功后会出现下面的结果:
[root@zxt demo]# ./test_demo
write 32 bytes data to /dev/demo
0: 0 1 2 3
1: 4 5 6 7
2: 8 9 10 11
3: 12 13 14 15
4: 16 17 18 19
5: 20 21 22 23
6: 24 25 26 27
Beijing Universal Pioneering Technology Co.,LTD.
236
TEL: 010-82110740 82110741 82110742 82110743
FAX:总机转 828
http://www.up-tech.com
博创科技(UP-TECH )
7: 28 29 30 31
*****************************************************
Read 32 bytes data from /dev/demo
0: 31 30 29 28
1: 27 26 25 24
2: 23 22 21 11
3: 12 13 14 15
4: 16 17 18 19
5: 20 10 9 8
6: 7 6 5 4
7: 3 2 1 0
*****************************************************
如果模块没有成功插入的话,会出现下面的情况:
[root@zxt demo]# ./test_demo
####DEMO device open fail####
在驱动模块成功插入后,会在/dev 下面建立一个叫做 demo 的设备文件,我们也可以
使用 cat 命令来直接调用 read 函数,来测试读过程。
[root@zxt demo]# cat /dev/demo
device open success!
实验体会:
Makefile出现错误,进入参考下面进行修改:
KERNELDIR = /usr/src/linux
#KERNELDIR = /arm2410cl/ kernel/linux-2.4.18-2410cl/
INCLUDEDIR = $(KERNELDIR)/include
#CROSS_COMPILE=armv41-unknown-linux-