IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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");

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-06-29 19:27:13  更:2022-06-29 19:29:23 
 
开发: 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年11日历 -2024/11/15 12:44:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码