您的当前位置:首页正文

设备驱动(3)实验手册

来源:易榕旅网
华清远见 驱动高级2 实验手册

设备驱动(三)

华清远见—嵌入式学院

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、查看源码,找到上述现象的实现原理

因篇幅问题不能全部显示,请点此查看更多更全内容