一个简单的字符设备驱动

 

    工作需要,开始学习驱动开发。从课本上学习到的第一个简单的驱动开发及调试,记录如下。

    建立源文件chardev.c,文件内容如下:

    一个简单的字符设备驱动_第1张图片

   

    Makefile如下:

    一个简单的字符设备驱动_第2张图片

    直接make,得到chardev.ko。

    然后可以用insmod和rmmod转载和卸载该驱动。

    运行insmod chardev.ko,然后我们cat /proc/devices查看设备信息,可以看到以下信息:

    一个简单的字符设备驱动_第3张图片

    这里数字250对应代码中的MAJOR_NUM值,在insmod后如果看不到对应的信息(如250 chardev),原因是已经有这样的设备存在了,可以修改一个没有的值。

    然后我们可以建立设备节点,mknod /dev/chardev c 250 0,那么在/dev下就可以找到对应的设备文件,此时我们就可以对这个设备文件进行操作。

    以下是对设备文件/dev/chardev操作的测试代码chardevtest.c,这个测试工具打开设备文件,往设备文件中写入一个整数,然后再读取这个整数并显示:

    一个简单的字符设备驱动_第4张图片

    直接gcc -o chardevtest chatdevtest.c编译成chardevtest,然后运行,运行时输入1,然后再读取设备值并显示在屏幕上。

    注:

          1.上面chardev_init()函数返回必须为0,否则会报-1 Device or resource busy的错误。

          2.代码里有prink驱动打印的函数,内核打印函数只有在原屏幕上能打印出来,一般的终端登录工具上insmod和rmmod时将无法打印,此时会将

             打印写到/var/log/message文件中。

          3.在用测试程序打开文件时,驱动会调用read函数,从chardev_var中读取数值并显示。我们输入一个整数,然后驱动会调用write将数值写入chardev_var中。

             这个过程可以(只能)在原屏幕上打印出来。

    至此,测试结束。

    本文测试代码来自《ARM嵌入式开发》

    转帖请注明出处。

你可能感兴趣的:(测试,gcc,嵌入式,makefile,测试工具,终端)