华清远见—嵌入式学院
2008实验一、秒表字符设备
【实验内容】
编写一个字符设备“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实验二、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的实现方法。
实验三、工作队列实验
【实验内容】
在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、查看源码,设当修改,掌握工作队列的实现方法。
实验四 利用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
KERNEL=="tun
#KERNEL=="farsight_dev
【实验内容】
编写一驱动,能够实现在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、查看源码,找到上述现象的实现原理下载本文