第12课第2.2节 字符设备驱动程序之LED驱动程序_测试改进.wmv

首先熟悉几个概念和几个文件:

概念:

  •  设备文件: Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件
  •  设备节点: 当我们创建一个设备节点时需要指定主设备号和次设备号。对于设备节点来说,名字不是重要的,设备号才是最重要的,它实际指定了对应的驱动程序和对应的设备。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号,如硬盘的主设备号是3

  我们可以想象,当用户手动创建一个设备文件(mknod /dev/xyz c 111 0)后,那么在/dev/目录下就会出现我们建立的“用户层”的设备文件xyz,主设备号是111,从设备号是0,我们通过这个文件中设备号访问我们需要的内核中寄存器中存有该设备号的区域,得到相关指向路径,由此调用某些函数,实现我们所谓的“驱动”,我们可以手动分配设备号或者自动分配,手动分配的话在写驱动时需要写一样的设备号,这样便于设备号规划;如果是自动的话,是在驱动中直接定义,如果需要支持一些新的设备直接在手动分配主设备下的从设备就好了,从长远的角度来说两者又差不多。

文件:

  /dev/设备名  手动设定设备节点:mknod /dev/xyz c 111 0(主设备111,从0)

  /sys/class    设备文件及信息存放位置

  /proc/device 设备号,设备名存放位置 cat /proc/devices这一个对应的不是我们的设备文件,设备文件的创立对应的使用户,而设备号和器设备名,在这里是将驱动载入内核后得到的,我们可以将其认为属于内核层

 

下载过程出现的两个问题:

1、显示一些函数未定义

对应出现问题的几个函数排查出没有加上<linux/device.h>这个头文件,待添加后一切正常。

 

2.提示内核未许可且同样上述那几个函数不能识别

因此推断是未加上许可造成的,待加上内核许可,即c文件中添加MODULE_LICENSE("GPL");后重新编译和下载,成功执行,查看设备,能够看到新添加设备:

 

附:涉及到自动创建设备号函数

firstdrv_class_dev= class_device_create(firstdrv_class, NULL, MKDEV(major, 0), NULL, "xyz");

文件:/etc/init.d/rcS

posted @ 2016-09-24 11:59  达达kiki  阅读(135)  评论(0)    收藏  举报