5.2.10.应用程序如何调用驱动

  1. 设备文件在/dev下

ls /dev/ (里面每一个文件代表一个硬件)

设备文件是用来索引驱动的(根据major)
major相当于数组的下标

设备号=主设备号(决定设备种类如led)+次设备号(led1,led2)

  1. 创建设备文件:mknod /dev/xxx c 主设备号 次设备号(c表示字符设备驱动)

已知:[ 516.028089] chrdev_init Success.mymajor = 250

   #mknod /dev/test c 250 0
   #ls /dev/test -l
        crw-r--r--    1 root     0         250,   0 Jan  2 02:23 /dev/test    (c表示字符设备驱动)
  1. 写应用编程

touch app.c

编写代码
修改makefile:arm-none-linux-gnueabi-gcc ,cp app 路径

make
make cp
此时开发板已经安装了之前写的驱动

分析:fd = open(FILE, O_RDWR);------》#define FILE "dev/test"-------------》.open = test_chrdev_open,-----》printk(KERN_INFO "test_chrdev_open ");
将应用app.c与驱动文件module_test.c链接起来的关键在于#define FILE "dev/test"即文件操作符file_operations。通过file找到file_operations里面绑定的test_chrdev_open函数名字,找到对应函数,在对应函数里面操作硬件。

 # ./app
[ 3934.887282] test_chrdev_open
 [ 3934.888872] test_chrdev_release
   open /dev/test success.
 或者
   [ 3934.887282] test_chrdev_open
   open /dev/test succ[ 3934.888872] test_chrdev_release
  ess.

close对应的函数test_chrdev_release关闭文件

注意一定不要将#define FILE "/dev/test"写成#define FILE "dev/test",否则找不到设备文件,运行app.c时会错误

原文地址:https://www.cnblogs.com/Ocean-Star/p/9250335.html