- 设备文件在/dev下
ls /dev/ (里面每一个文件代表一个硬件)
设备文件是用来索引驱动的(根据major)
major相当于数组的下标
设备号=主设备号(决定设备种类如led)+次设备号(led1,led2)
- 创建设备文件: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表示字符设备驱动)
- 写应用编程
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\n");
将应用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时会错误