Linux 编写一个 字符设备驱动
2021/7/18 7:08:20
本文主要是介绍Linux 编写一个 字符设备驱动,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Linux-DEVICE_ATTR()介绍及使用示例
驱动中动态创建设备号、设备节点
#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/platform_device.h> #include <linux/slab.h> #include <linux/rockchip/common.h> #include <linux/kdev_t.h> #include <linux/device.h> /** struct hello_test_data { struct device *classdev; int blue=456; } static struct hello_test_data *hello_data; **/ static struct class *hello_test_class; //定义设备类 static struct device *classdev; static char mybuf[100]="123"; //执行cat会调用到此函数 show对应的是read static ssize_t hello_test_show(struct device *dev, struct device_attribute *attr, char *buf) { return sprintf(buf, "%s\n", mybuf); } //执行echo 1 > hello_test会执行到此函数 store 对应的是write static ssize_t hello_test_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { sprintf(mybuf, "%s", buf); return count; } // _name _mode(权限) (显示函数) (写入) static DEVICE_ATTR(hello_test, 0777, hello_test_show, hello_test_store); //设备属性文件 名 // probe初始化函数 //cdev 分配设备对象空间 static int hello_test_probe(struct platform_device *pdev) { printk("Gatsby probe hello_test\n"); // 创建对应的节点file //device_create_file(&pdev->dev, &dev_attr_hello_test); classdev=device_create(hello_test_class, &pdev->dev, MKDEV(0, 0), NULL,"hello_test_device",0); sysfs_create_file(&pdev->dev.kobj, &dev_attr_hello_test.attr); return 0; } static const struct of_device_id hello_of_match[] = { { .compatible = "rockchip,hello_test"}, { }, }; // platform_driver 的结构 static struct platform_driver hello_test_driver = { .probe = hello_test_probe, .driver = { .name = "hello_test_class", .owner = THIS_MODULE, .of_match_table = hello_of_match, //需要再dts中做匹配 } }; static int __init hello_init(void) { printk("Gatsby hello_init\n"); /** struct device *classdev; classdev = device_create(hello_test, 0, MKDEV(0,0),NULL,"mytest_device"); //创建mytest_device设备 **/ hello_test_class = class_create(THIS_MODULE, "hello_test_class");// 在/sys/class目录下生成 hello_test目录 platform_driver_register(&hello_test_driver); return 0; } static void __exit hello_exit(void) { printk("Gatsby hello_exit\n"); platform_driver_unregister(&hello_test_driver); } module_init(hello_init); module_exit(hello_exit); MODULE_AUTHOR("hello_test"); MODULE_DESCRIPTION("Gatsby"); MODULE_LICENSE("GPL");makefile
obj-$(CONFIG_HELLO_TEST) += hello_test.okconfig
config HELLO_TEST tristate "Hello world for Gatsby" help Hello for Gatsby上一级目录 makefile
obj-y += gatsby/kconfig
source "drivers/gatsby/Kconfig"
这篇关于Linux 编写一个 字符设备驱动的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法