| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 一个linux最简otg驱动源代码 -> 正文阅读 |
|
[系统运维]一个linux最简otg驱动源代码 |
/* 加载内核模块:sudo insmod otg.ko 卸载内核模块:sudo rmmod otg 列举内核模块: lsmod | grep otg 查看信息;如下图所示。 编译: make -C /lib/modules/4.19.161-kernel/build M=/home/appninja/driver modules Makefile中: make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules */ #include <linux/module.h> #include <linux/fs.h> #include <linux/proc_fs.h> #include <linux/version.h> #include <linux/kernel.h> #include <linux/init.h> static struct proc_dir_entry *proc_otg_entry = NULL; static ssize_t proc_otg_read(struct file *filp, char __user *buf, size_t count, loff_t *offp) { ? ? int n = 0, ret; ? ? char secrets[100]; ? ? sprintf(secrets, "kernel secrets %s\n", filp->f_path.dentry->d_iname); ? ? n = strlen(secrets); ? ? if(*offp < n) ? ? { ? ? ? ? *offp = n+1; ? ? ? ? ret = n+1; ? ? } ? ? else ? ? ? ? ret = 0; ? ? return ret; } static ssize_t proc_otg_write(struct file *file, const char __user *buffer, ? ? size_t count, loff_t *data) { ? ? char cmd[100] = { 0x00 }; ? ? int i = 0; ? ? if (count < 1) ? ? { ? ? ? ? printk("count <=1\n"); ? ? ? ? return -1; ? ? } ? ? if (count > sizeof(cmd)) ? ? { ? ? ? ? printk("count > sizeof(cmd)\n"); ? ? ? ? return -2; ? ? } ? ? return i; } #if LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0) static const struct proc_ops proc_otg_fops = { ?.proc_read = proc_otg_read, ?.proc_write = proc_otg_write, }; #else static const struct file_operations proc_otg_fops = { ?.owner = THIS_MODULE, ?.read ?= proc_otg_read, ?.write = proc_otg_write, }; #endif static int __init otg_init(void) { ? ? proc_otg_entry = proc_create("otg_usb", 0, NULL, &proc_otg_fops); ? ? return 0; } static void __exit otg_exit(void) { ? ? if(proc_otg_entry) ? ? ? ? proc_remove(proc_otg_entry); } module_init(otg_init); module_exit(otg_exit); MODULE_LICENSE("GPL"); |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/29 8:45:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |