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-

posted on 2015-11-26 22:23  20135314朱恒志  阅读(150)  评论(0编辑  收藏  举报