设备驱动(三)
华清远见—嵌入式学院
2008
华清远见 驱动高级2 实验手册
实验一、秒表字符设备
【实验内容】
编写一个字符设备“second”(即“秒”)的驱动,它在被打开的时候初始化一个定时器并将其添加到内核定时器链表,每秒输出一次当前的“秒”值 【实验目的】
掌握内核定时器的用法。 【实验平台】 Ubantu7.04 【实验步骤】
1、 将文件夹second复制到linux环境中,如:/home/linux/test
#su root
#cp second /home/linux/test –a
2、#cd /home/linux/test/second
3、#make
4、通过insmod命令将模块加入内核
# insmod second.ko 5、建立设备结点
# mknod /dev/second c 253 0 6、编译应用程序
# gcc –o second_test second_test.c
7、运行second_test后,内核将不断地输出目前的jiffies值,如下所示:
current jiffies is 17216 current jiffies is 17316 current jiffies is 17416 current jiffies is 17516 current jiffies is 17616
8、而应用程序将不断输出自打开/dec/second以来经历的秒数,如下所示:
]# ./second_test
seconds after open /dev/second :1 seconds after open /dev/second :2 seconds after open /dev/second :3 seconds after open /dev/second :4 seconds after open /dev/second :5
华清远见 驱动高级2 实验手册
实验二、tasklet实验
【实验内容】
在globalfifo的实验中加入tasklet的功能。 【实验目的】
掌握tasklet的用法。 【实验平台】 Ubantu7.04 【实验步骤】
1、 文件夹tasklet复制到linux环境中,如:/home/linux/test
#su root
#cp tasklet /home/linux/test –a
2、#cd /home/linux/test/tasklet
3、#make
4、通过insmod命令将模块加入内核
# insmod globalfifo.ko 5、建立设备结点
# mknod /dev/globalfifo c 253 0 6、# echo “hello” > /dev/globalfifo 7、#demsg 查看内核打印信息
8、查看源码,设当修改,掌握tasklet的实现方法。
华清远见 驱动高级2 实验手册
实验三、工作队列实验
【实验内容】
在globalfifo的实验中加入工作队列的功能。 【实验目的】
掌握工作队列的用法。 【实验平台】 Ubantu7.04 【实验步骤】
1、 文件夹work_queue复制到linux环境中,如:/home/linux/test
#su root
#cp work_queue /home/linux/test –a
2、#cd /home/linux/test/work_queue
3、#make
4、通过insmod命令将模块加入内核
# insmod globalfifo.ko 5、建立设备结点
# mknod /dev/globalfifo c 253 0 6、# echo “hello” > /dev/globalfifo 7、#demsg 查看内核打印信息
8、查看源码,设当修改,掌握工作队列的实现方法。
华清远见 驱动高级2 实验手册
实验四 利用udev、sys动态创建设备结点
【实验内容】
编写一简单设备驱动,能够利用udev和sys文件系统实现动态创建设备结点 【实验目的】
掌握常用udev工具的用法及动态创建设备结点的方法。 【实验平台】 Ubantu7.04 【实验步骤】
1、 将文件夹udev复制到linux环境中,如:/home/linux/test
#su root
#cp udev /home/linux/test –a
2、#cd /home/linux/test/udev
3、#make
4、通过insmod命令将模块加入内核
# insmod char-read.ko 查看/dev/farsight_dev 5、编译应用程序 #gcc –o test test.c 6、# ./test
7、查看源码,设当修改,掌握udev工具的用法及动态创建设备结点的方法。 # udevtest /sys/class/farsight_class/farsight_dev/ //列出udev处理一个class 设备的过程
# udevinfo -a -p /sys/class/farsight_class/farsight_dev/ //列出设备的属性
# udevinfo -q path -n /dev/farsight_dev //得到设备在sys中的位置
# Udevmonitor //跟踪udev的运行
# vim /etc/udev/rules.d/20-names.rules //改变命名规则文件
可以添加: # Other devices
KERNEL==\"hw_random\ NAME=\"hwrng\" KERNEL==\"tun\ NAME=\"net/%k\" #KERNEL==\"farsight_dev\
华清远见 驱动高级2 实验手册
实验五 为/sys添加结点
【实验内容】
编写一驱动,能够实现在sys文件系统系统下创建新的/sys/bus总线模型、及新的/sys/device模型,并在/sys/bus总线模型下创建新的属性 【实验目的】
掌握sys文件系统模型,及操作方法。 【实验平台】 Ubantu7.04 【实验步骤】
1、 将文件夹lddbus复制到linux环境中,如:/home/linux/lddbus
#su root
#cp lddbus /home/linux/lddbus–a
2、#cd /home/linux/lddbus
3、#make
4、通过insmod命令将模块加入内核
# insmod lddbus.ko
5、查看/sys/bus/,这时就多了一个文件夹ldd,查看里面的内容为:
root@farsight:/sys/bus/ldd# ls devices drivers version
root@farsight:/sys/bus/ldd# cat version (version为新创建的属性) $Revision: 1.9 $
6、查看/sys/device/,发现多了一个名为ldd0的文件夹,表示系统多了一个名为ldd0的设备
7、查看源码,找到上述现象的实现原理
因篇幅问题不能全部显示,请点此查看更多更全内容