驱动班实验手册Part1.docx
- 文档编号:17837428
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:36
- 大小:86.99KB
驱动班实验手册Part1.docx
《驱动班实验手册Part1.docx》由会员分享,可在线阅读,更多相关《驱动班实验手册Part1.docx(36页珍藏版)》请在冰点文库上搜索。
驱动班实验手册Part1
LINUX设备驱动实验手册(Part1)
华清远见教材开发部编著
(内部资料,请勿外传)
华清远见(2009)版权所有V3.1
目录
实验一简单模块实验
(1)229
实验二简单模块实验
(2)230
实验三简单模块实验(3)231
实验四简单模块实验(4)232
实验五简单模块实验(5)233
实验六简单字符设备实验
(1)234
实验七简单字符设备实验
(2)235
实验八简单字符设备实验(3)236
实验九简单字符设备实验(4)237
实验十简单字符设备实验(5)238
实验十一简单字符设备实验(6)239
实验十二简单字符设备实验(7)240
实验十三简单字符设备实验(8)241
实验十四蜂鸣器驱动程序编写与测试242
实验十五pipe实验243
实验十六poll实验244
实验十七异步通知实验245
实验十八按键中断字符设备驱动编写与测试246
实验十九扫描键盘驱动程序编写与测试247
实验二十秒表字符设备249
实验二十一tasklet实验250
实验二十二工作队列实验251
实验二十三利用udev、sys动态创建设备结点252
实验二十四lddbus实验253
实验二十五sbull驱动254
实验二十六snull驱动257
实验一简单模块实验
(1)
【实验内容】
编写一个最基本的模块,加载模块,观察结果
【实验目的】
掌握模块的基本要素及加载、卸载、查看工具的使用
【实验平台】
Fs2410
【实验步骤】
1、将文件夹ex1-hello-world复制到linux环境中,如:
home/user$/base_drive_labs
#cpex1-hello-worldhome/user$/base_drive_labs–a
2、#cdhome/user$/base_drive_labs/ex1-hello-world
3、#make
4、通过insmod命令将模块加入内核
#insmodinsmodhello.ko
5、通过lsmod查看内核模块
#lsmod|grephello
6、通过rmmod删除内核中的模块
#rmmodhello
7、查看源码,适当修改,掌握实验内容
实验二简单模块实验
(2)
【实验内容】
在实验一的基础上,加入module_init、module_exit的支持
加载模块,观察结果
【实验目的】
掌握module_init、module_exit的使用
【实验平台】
Fs2410
【实验步骤】
2、将文件夹ex2-init-exit复制到linux环境中,如:
home/user$/base_drive_labs
#cpex2-init-exithome/user$/base_drive_labs–a
2、#cdhome/user$/base_drive_labs/ex2-init-exit
3、#make
4、通过insmod命令将模块加入内核
#insmodinsmodhello.ko
5、通过lsmod查看内核模块
#lsmod|grephello
6、通过rmmod删除内核中的模块
#rmmodhello
7、查看源码,适当修改,掌握实验内容
实验三简单模块实验(3)
【实验内容】
在实验二的基础上,加入模块描述信息的方法
【实验目的】
掌握MODULE_LICENSE、MODULE_AUTHOR等宏的使用
【实验平台】
Fs2410
【实验步骤】
1、将文件夹ex3-doc-license复制到linux环境中,如:
home/user$/base_drive_labs
#cpex3-doc-licensehome/user$/base_drive_labs/test–a
2、#cdhome/user$/base_drive_labs/test/ex3-doc-license
3、#make
4、通过insmod命令将模块加入内核
#insmodinsmodhello.ko
5、通过lsmod查看内核模块
#lsmod|grephello
6、通过rmmod删除内核中的模块
#rmmodhello
7、查看源码,适当修改,掌握实验内容
8、通过modinfo查看模块信息
#modinfohello.ko
实验四简单模块实验(4)
【实验内容】
在实验三的基础上,加入模块参数的传递功能
【实验目的】
掌握模块参数的传递的方法
【实验平台】
Fs2410
【实验步骤】
1、将文件夹ex4-param复制到linux环境中,如:
home/user$/base_drive_labs
#cpex4-paramhome/user$/base_drive_labs–a
2、#cdhome/user$/base_drive_labs/ex4-param
3、#make
4、通过insmod命令将模块加入内核
#insmodhello.komyshort=55myint=456mylong=4567mystring="foobar"array=2,3
5、通过lsmod查看内核模块
#lsmod|grephello
6通过demsg查看打印信息
#demsg
7、通过rmmod删除内核中的模块
#rmmodhello
8、查看源码,适当修改,掌握实验内容
实验五简单模块实验(5)
【实验内容】
多文件模块编译
【实验目的】
掌握由多个文件组成的模块编译方法
【实验平台】
Fs2410
【实验步骤】
1、将文件夹ex5-multi-file复制到linux环境中,如:
home/user$/base_drive_labs
#cpex5-multi-filehome/user$/base_drive_labs–a
2、#cdhome/user$/base_drive_labs/ex5-multi-file
3、#make
4、通过insmod命令将模块加入内核
#insmodfinal.ko
5、通过lsmod查看内核模块
#lsmod|grepfinal
6通过demsg查看打印信息
#demsg
7、通过rmmod删除内核中的模块
#rmmodfinal
8、查看Makefile,掌握多文件模块编译的方法
实验六简单字符设备实验
(1)
【实验内容】
添加设备号的注册
【实验目的】
掌握字符设备设备号的注册方法
【实验平台】
Fs2410
【实验步骤】
1、将文件夹ex6-char-register复制到linux环境中,如:
home/user$/base_drive_labs
#cpex6-char-registerhome/user$/base_drive_labs–a
2、#cdhome/user$/base_drive_labs/ex6-char-register
3、#make
4、通过insmod命令将模块加入内核
#insmodchar-reg.ko
5、通过lsmod查看内核模块
#lsmod|grepchar
6通过demsg查看打印信息
#demsg
7、通过rmmod删除内核中的模块
#rmmodchar-reg
8、查看源码,适当修改,掌握实验内容
实验七简单字符设备实验
(2)
【实验内容】
添加字符设备的注册
【实验目的】
掌握字符设备驱动的注册方法
【实验平台】
Fs2410
【实验步骤】
1、将文件夹ex7-char-dev-register复制到linux环境中,如:
home/user$/base_drive_labs
#cpex7-char-dev-registerhome/user$/base_drive_labs–a
2、#cdhome/user$/base_drive_labs/ex7-char-dev-register
3、#make
4、通过insmod命令将模块加入内核
#insmodchar-dev-reg.ko
5、通过lsmod查看内核模块
#lsmod|grepchar
6通过demsg查看打印信息
#demsg
7、通过rmmod删除内核中的模块
#rmmodchar-dev-reg
8、查看源码,适当修改,掌握实验内容
实验八简单字符设备实验(3)
【实验内容】
添加open、release功能,并编写应用程序操作驱动。
【实验目的】
掌握字符设备的open、release方法
【实验平台】
Fs2410
【实验步骤】
1、将文件夹ex8-char-dev-register-dynamic复制到linux环境中,如:
home/user$/base_drive_labs
#cpex8-char-dev-register-dynamichome/user$/base_drive_labs–a
2、#cdhome/user$/base_drive_labs/ex8-char-dev-register-dynamic
3、#make//编译设备驱动
4、#arm-linux-gnu-gcc-I~/linux-2.6.14/includetest.c-otest//编译应用程序
5、通过insmod命令将模块加入内核
#insmodchar-dev-reg.ko
6、通过lsmod查看内核模块
#lsmod|grepchar
7通过demsg查看打印信息
#demsg
8创建设备结点
#mknod/dev/helloc2530
9、运行应用程序
#./test
10、通过rmmod删除内核中的模块
#rmmodchar-dev-reg
11、查看源码,适当修改,掌握实验内容
实验九简单字符设备实验(4)
【实验内容】
添加write功能,并编写应用程序操作驱动。
【实验目的】
掌握字符设备的write方法
【实验平台】
Fs2410
【实验步骤】
1、文件夹ex9-write复制到linux环境中,如:
home/user$/base_drive_labs
#cpex9-writehome/user$/base_drive_labs–a
2、#cdhome/user$/base_drive_labs/ex9-write
3、#make//编译设备驱动
4、#arm-linux-gnu-gcc-I~/linux-2.6.14/includetest.c-otest//编译应用程序
5、通过insmod命令将模块加入内核
#insmodchar-write.ko
6、通过lsmod查看内核模块
#lsmod|grepchar
7通过demsg查看打印信息
#demsg
8创建设备结点
#mknod/dev/helloc2530
9、运行应用程序
#./test
10、通过rmmod删除内核中的模块
#rmmodchar-write
11、查看源码,适当修改,掌握实验内容
实验十简单字符设备实验(5)
【实验内容】
添加read功能,并编写应用程序操作驱动。
【实验目的】
掌握字符设备的read方法
【实验平台】
Fs2410
【实验步骤】
1、将文件夹ex10-read复制到linux环境中,如:
home/user$/base_drive_labs
#cpex10-readhome/user$/base_drive_labs–a
2、#cdhome/user$/base_drive_labs/ex10-read
3、#make//编译设备驱动
4、#arm-linux-gnu-gcc-I~/linux-2.6.14/includetest.c-otest//编译应用程序
5、通过insmod命令将模块加入内核
#insmodchar-read.ko
6、通过lsmod查看内核模块
#lsmod|grepchar
7通过demsg查看打印信息
#demsg
8创建设备结点
#mknod/dev/helloc2530
9、运行应用程序
#./test
10、通过rmmod删除内核中的模块
#rmmodchar-read
11、查看源码,适当修改,掌握实验内容
实验十一简单字符设备实验(6)
【实验内容】
在模块代码中加入debug控制。
【实验目的】
掌握模块debug信息控制方法
【实验平台】
Fs2410
【实验步骤】
1、文件夹ex11-debug复制到linux环境中,如:
home/user$/base_drive_labs
#cpex11-debughome/user$/base_drive_labs–a
2、#cdhome/user$/base_drive_labs/ex11-debug
3、#make//编译设备驱动
4、通过insmod命令将模块加入内核
#insmodhello.ko
5、通过lsmod查看内核模块
#lsmod|grephello
6通过demsg查看打印信息
#demsg
7、通过rmmod删除内核中的模块
#rmmodhello
8、查看源码及Makefile,适当修改,改变debug输出。
掌握实验内容。
实验十二简单字符设备实验(7)
【实验内容】
在模块代码中加入创建proc结点的内容。
【实验目的】
模块代码中加入创建proc结点的方法
【实验平台】
Fs2410
【实验步骤】
1、文件夹ex12-proc复制到linux环境中,如:
home/user$/base_drive_labs
#cpex12-prochome/user$/base_drive_labs–a
2、#cdhome/user$/base_drive_labs/ex12-proc
3、#make//编译设备驱动
4、通过insmod命令将模块加入内核
#insmodproc.ko
5、通过lsmod查看内核模块
#lsmod|grepproc
6通过proc查看内核信息
#cat/proc/hello
7、通过rmmod删除内核中的模块
#rmmodproc
8、查看源码及Makefile,适当修改,改变debug输出。
掌握实验内容。
实验十三简单字符设备实验(8)
【实验内容】
添加ioctl功能,并编写应用程序操作驱动。
【实验目的】
掌握字符设备的ioctl方法
【实验平台】
Fs2410
【实验步骤】
2、将文件夹ex13-ioctl复制到linux环境中,如:
home/user$/base_drive_labs
#cpex13-ioctlhome/user$/base_drive_labs–a
2、#cdhome/user$/base_drive_labs/ex13-ioctl
3、#make//编译设备驱动
4、#arm-linux-gnu-gcc-I~/linux-2.6.14/includetest.c-otest//编译应用程序
5、通过insmod命令将模块加入内核
#insmodhello-ioctl.ko
6、通过lsmod查看内核模块
#lsmod|grephello
7通过demsg查看打印信息
#demsg
8创建设备结点
#mknod/dev/helloc2530
9、运行应用程序
#./test
10、通过rmmod删除内核中的模块
#rmmodhello-ioctl
11、查看源码,加入自己的控制命令,测试结果。
实验十四蜂鸣器驱动程序编写与测试
【实验内容】
编写一个字符设备驱动程序,可以驱动蜂鸣器、LED
【实验目的】
结合GPIO设备操作步骤,通过编译一个简单的字符设备驱动内核模块,让学员掌握利用Linux操作基本的IO接口。
【实验平台】
主机:
Fs2410
目标板:
fs2410
目标内核版本:
2.6.8.1
交叉编译器版本:
3.3.2
【实验步骤】
1、将文件夹2410_beep复制到linux环境中,如:
home/user$/base_drive_labs
#cp2410_beephome/user$/base_drive_labs–a
2、#cdhome/user$/base_drive_labs/2410_beep
3、#make//编译设备驱动
4、#arm-linux-gnu-gcc-I~/linux-2.6.14/includemain.c-omain//编译应用程序
5、通过insmod命令将模块加入内核
#insmodbeep_drv.ko//由于驱动采用的是动态获取主设备号的方式,所以根据打印信息建立设备结点
helloGPIO_TESTdrv!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
simpledeviceinstalled,withmajor248
7、创建设备结点
#mknod/dev/simplec2480
9、运行应用程序
#./main
观察到LEDD12在闪烁
10、查看源码,适当修改,点亮D11.
实验十五pipe实验
【实验内容】
编写一个字符设备驱动,包含等待队列、信号量、fifo等功能
【实验目的】
掌握待队列、信号量、fifo等功能的实现方法
【实验平台】
Fs2410
【实验步骤】
1、将文件夹pipe复制到linux环境中,如:
home/user$/base_drive_labs
#cppipehome/user$/base_drive_labs–a
2、#cdhome/user$/base_drive_labs/pipe
3、#make
4、通过insmod命令将模块加入内核
#insmodpipe.ko
5、建立设备结点
#mknod/dev/pipec2530
6、#cat/dev/pipe
7、打开新的终端,输入#echo”hello”>/dev/pipe,可以在前一个终端上看到打印
出的“hello”
8、熟悉代码,掌握实验内容
实验十六poll实验
【实验内容】
编写一个字符设备驱动,包含等待队列、信号量、fifo、poll等功能
【实验目的】
掌握待poll功能的实现方法
【实验平台】
Fs2410
【实验步骤】
1、文件夹poll复制到linux环境中,如:
home/user$/base_drive_labs
#cppollhome/user$/base_drive_labs–a
2、#cdhome/user$/base_drive_labs/poll
3、#make
4、通过insmod命令将模块加入内核
#insmodglobalfifo.ko
5、建立设备结点
#mknod/dev/globalfifoc2530
6、#cat/dev/globalfifo
7、打开新的终端,输入#echo”hello”>/dev/globalfifo
8、比较读写及fifo部分和实验一的不同。
9、编译应用程序pollmonitor.c
#arm-linux-gnu-gcc-I~/linux-2.6.14/include–opollmonitorpollmonitor.c
10、#./pollmonitor
程序会不断地输出“Pollmonitor:
canbewritten”当通过echo向/dev/globalfifo写入一些数据后,将输出“Pollmonitor:
canberead”和“Pollmonitor:
canbewritten”;如果不断地通过echo向/dev/globalfifo写入数据直至写满FIFO,发现pollmonitor程序将只输出“Pollmonitor:
canberead”。
对于globalfifo而言,不会出现既不能读、又不能写的情况。
学员可以思考如何修改应用程序,才能出现阻塞等待现象?
实验十七异步通知实验
【实验内容】
编写一个字符设备驱动,包含等待队列、信号量、fifo、fasync等功能
【实验目的】
掌握待异步通知功能的实现方法
【实验平台】
Fs2410
【实验步骤】
1、将文件夹globalfifo_async复制到linux环境中,如:
home/user$/base_drive_labs
#cpglobalfifo_asynchome/user$/base_drive_labs–a
2、#cdhome/user$/base_drive_labs/globalfifo_async
3、#make
4、通过insmod命令将模块加入内核
#insmodglobalfifo.ko
5、建立设备结点
#mknod/dev/globalfifoc2530
6、编译应用程序asyncmonitor.c
#arm-linux-gnu-gcc-I~/linux-2.6.14/include–oasyncmonitorasyncmonitor.c
7、#./asyncmonitor
8、在其它终端:
#echo“hello”>/dev/globalfifo
原终端显示:
receiveasignalfromglobalfifo,signalnum:
29
实验十八按键中断字符设备驱动编写与测试
【实验内容】
编写一个字符设备驱动程序响应中断的方式的按键,并且加入tasklet低半部处理功能
【实验目的】
掌握中断程序、tasklet的注册方法,及熟悉S3C2410中断响应过程。
【实验平台】
主机:
Fs2410
目标板:
fs2410
目标内核版本:
2.6.8.1
交叉编译器版本:
3.3.2
【实验步骤】
1、将文件夹2410_beep复制到linux环境中,如:
home/user$/base_drive_labs
#cpbutton_irqhome/user$/base_drive_labs–a
2、#cdhome/user$/base_drive_labs/button_irq
3、#make//编译设备驱动
4、通过insmod命令将模块加入内核
#insmodbutton_irq.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 驱动 实验 手册 Part1