内核版本:Linux-4.14

随便写了个 proc 下节点的测试程序,可以用来与应用层交互。

也可以单独的用来做调试打印使用,例如封装个 my_printk 将信息单独存在节点内,然后可以在应用层 cat 出来查看。

 #include <linux/uaccess.h>
#include <linux/proc_fs.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/delay.h>
#include <asm/uaccess.h>
#include <linux/sched.h>
#include <linux/init.h>
#include <asm/irq.h>
#include <asm/io.h> #define MSG_BUF_LEN 1024 static unsigned char msg_buf[MSG_BUF_LEN] = {};
static unsigned int msg_len = ;
static DECLARE_WAIT_QUEUE_HEAD(proc_msg_waitq); static ssize_t proc_msg_read(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos)
{
unsigned int ret = ; /* 如果 msg_len 为 0,则等待数据 */
wait_event_interruptible(proc_msg_waitq, msg_len);
copy_to_user(user_buf, msg_buf, msg_len);
ret = msg_len;
msg_len = ; return ret;
} static ssize_t proc_msg_write(struct file *file, const char __user *user_buf,
size_t count, loff_t *ppos)
{
if(copy_from_user(msg_buf, user_buf, count)) {
return -EFAULT;
}
msg_len = count;
wake_up_interruptible(&proc_msg_waitq); return count;
} const struct file_operations proc_msg_operations = {
.read = proc_msg_read,
.write = proc_msg_write,
}; static int proc_msg_init(void)
{
/* 在 proc 下创建了 proc_msg */
proc_create("proc_msg", S_IRUSR, NULL, &proc_msg_operations); return ;
} static void proc_msg_exit(void)
{
remove_proc_entry("proc_msg", NULL);
} module_init(proc_msg_init);
module_exit(proc_msg_exit);
MODULE_LICENSE("GPL");

编译脚本如下:

KERN_DIR = /home/lance/nanopi/linux-4.14/

all:
make -C $(KERN_DIR) M=`pwd` modules
rm -rf *.o *.bak *.order *.mod.c *.symvers clean:
make -C $(KERN_DIR) M=`pwd` modules clean obj-m += proc_msg.o

安装模块测试:

/ # insmod proc_msg.ko
/ # echo hello > /proc/proc_msg
/ # cat /proc/proc_msg
hello

成功输出节点内信息。

proc 下创建与应用交互的可读写节点的更多相关文章

  1. centos环境下创建数据库和表的方法

    centos环境下创建数据库和表的方法 //查询数据库的命令: mysql> SHOW DATABASES; +--------------------+ | Database         ...

  2. Android下创建一个输入法

    输入法是一种可以让用户输入文字的控件.Android提供了一套可扩展的输入法框架,使得应用程序可以让用户选择各种类型的输入法,比如基于触屏的键盘输入或者基于语音.当安装了特定输入法之后,用户即可在系统 ...

  3. 设备驱动基础学习--/proc下增加节点

    在需要创建一个由一系列数据顺序组合而成的/proc虚拟文件或一个较大的/proc虚拟文件时,推荐使用seq_file接口. 数据结构struct seq_fille定义在include/linux/s ...

  4. 微软Azure 经典模式下创建内部负载均衡(ILB)

    微软Azure 经典模式下创建内部负载均衡(ILB) 使用之前一定要注意自己的Azure的模式,老版的为cloud service模式,新版为ARM模式(资源组模式) 本文适用于cloud servi ...

  5. 无法在“EntityFramework”已存在的情况下创建影像复制该文件的解决方案

    问题产生的原因:你项目正在生成中你就打开浏览器预览了,导致这个问题解决方案:右击重新生成项目,等生成后再打开 “/”应用程序中的服务器错误. 无法在“EntityFramework”已存在的情况下创建 ...

  6. Linux:Ubuntu16.04下创建Wifi热点

    Linux:Ubuntu16.04下创建Wifi热点 说明: 1.Ubuntu16.04里面可以直接创建热点,而不用像以前的版本,还要其他辅助工具. 2.本篇文章转载自编程人生 具体步骤如下: 1.  ...

  7. 在Mac下创建ASP.NET Core Web API

    在Mac下创建ASP.NET Core Web API 这系列文章是参考了.NET Core文档和源码,可能有人要问,直接看官方的英文文档不就可以了吗,为什么还要写这些文章呢? 原因如下: 官方文档涉 ...

  8. 解决Oracle在scott用户下创建视图(VIEW)权限不足的方法

    问题描述:在scott用户下创建视图的时候,报错:权限不足.(其他用户以此类推)解决方法: 以dba用户登录 sqlplus / as sysdba 赋予scott用户创建VIEW的权限 grant  ...

  9. windows环境下创建 .文件夹

    一.windows环境下创建 .文件夹 1.新建一个文件夹 2.重命名为.properties.(名字前后都加点) 二.windows环境下创建 .文件 1.上面的方法对文件同样适用 2.运行CMD, ...

随机推荐

  1. 关于python Tk中实时的输出.

    源码如下: import time from Tkinter import * def run(): while True: txt.insert(END,'...') print '...' tim ...

  2. GPU的主要工作:图像合成、图形操作、光线表达

    GPU的主要工作:图像合成.图形操作 gpu不产生图片, 只表达和处理图片.图形:

  3. 条件随机场CRF原理介绍 以及Keras实现

    本文是对CRF基本原理的一个简明的介绍.当然,“简明”是相对而言中,要想真的弄清楚CRF,免不了要提及一些公式,如果只关心调用的读者,可以直接移到文末. 图示# 按照之前的思路,我们依旧来对比一下普通 ...

  4. ajax下post提交方式下载文件的处理(转)

    ajax是不能直接下载文件的,所以一般都是通过一个超链接的形式去下载一个文件 但是当牵扯到需要发送很多数据到服务器上再下载的时候超链接的形式就有些不好看了, /*=================== ...

  5. shell expect的简单实用

    一.在shell脚本中嵌入expect来实现密码输入 expect是一个自动交互功能的工具.expect是开了一个子进程,通过spawn来执行shell脚本,监测到脚本的返回结果,通过expect判断 ...

  6. E4A碰到打开自动闪退又自动打开又闪退一直循环的问题

    E4A碰到打开自动闪退又自动打开又闪退一直循环的问题 这几天写了一个脚本,自己手机上,模拟器上,均测试没有问题,可以正常操作 发给另一个人,他那边居然没有一个设备能运行成功! 而且一直闪退,闪退后又打 ...

  7. 一周 GitHub 开源项目推荐:阿里、腾讯、陌陌、bilibili……

    阅读本文大概需要 2.8 分钟. 陌陌风控系统正式开源 陌陌风控系统静态规则引擎,零基础简易便捷的配置多种复杂规则,实时高效管控用户异常行为. GitHub 地址 https://github.com ...

  8. Awesome Knowledge-Distillation

    Awesome Knowledge-Distillation 2019-11-26 19:02:16 Source: https://github.com/FLHonker/Awesome-Knowl ...

  9. Behavior Trees for Path Planning (Autonomous Driving)

    Behavior Trees for Path Planning (Autonomous Driving) 2019-11-13 08:16:52 Path planning in self-driv ...

  10. centos7没有ifconfig命令解决办法

    输入ifconfig 提示不存在   首先确认下是否是环境变量没有ifconfig 引起. ls /sbin/ifconfig   以上确定了系统是没有安装ifconfig,下面我们来安装 yum i ...