linux内核 2.6.35下的驱动例子

2023-05-16

创建 设备节点
 
mknod  /dev/hello   c(字符设备)或者b(块设备)   250    1
查看 cat /proc/devices   当前设备节点
insmod 安装 rmmod 删除
编译  Makefile
1.需要配置好的,编译好的内核
Makefile 中的
modules
-c  指的的内核中的  也就是 你编译内核中的 那个大总管 Makefile
 然后 内核中的 总的 Makefile 调用 当前的makefile  (运行生成  .o)
然后在到   kernel/Makefile 
在到 当前Makefile  链接成 .ko 的 文件
看printk  的打印的 优先级   优先级 数字低 的   优先级 高 
  查看 方法     第一个数是指 的 当前终端的 打印 级别
修改 是     
但是 ubuntu  默认是屏蔽 好像是 4 一下的 信息的
dmesg  显示 系统当前到启动所屏蔽的信息  加  -c  表示 删除
linux 字符设备驱动 结构 
有 静态  和 动态 2种
  先要构建   就是 申请设备号  linux 为我们提供了一个宏  MKDEV(主设备号,副设备号)
 还有救是注册 设备号  
dev_t devno = MKDEV(led_major, led_minor);      设备名
result = register_chrdev_region(devno, 1, "s5pc100_led");
cdev_init(cdev, fops);
cdev->owner = THIS_MODULE;
result = cdev_add(cdev, devno, 1);
然后 static struct file_operations   这是一个非常重要的结构体,这个设备是字符驱动的核心,当应用程序操作设备文件的时候所调用的 open,read,write,close等函数时,最终会调用这个结构体中指定的 对应函数。
file_operatios    xx__fops={
.owner = THIS_MODULE //指向拥有该结构的模块,内核使用该结构维护模块使用计数
.open   = XX__open //打开设备函数
.read    =xx__read //读的接口函数
.write   = XX__write// 写的接口函数
.fasync =  xx__fasync// 异步通知的函数
.poll    = xx_poll // poll 函数
.release =xx_release //关闭设备函数
}
异步通知 函数
注意要申请异步通知的结构体
struct fasync_struct  *async_xxxx;
signal(SIGIO,处理函数入口);
fcntl(设备节点,F_SETOWN,getpid);
oflags=fcntl(设备节点,F_GETFL);
fcntl(设备节点,F_GETFL,oflags|FASYNC);
在驱动中 设置接口函数   这样的话 你就可以在应用层 进行调用 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux内核 2.6.35下的驱动例子 的相关文章

  • 比较不同文件中的列并打印那些不匹配的列

    我有两个文件 file1 和 file2 我想将 file1 的几列 1 2 3 和 4 与 file2 的几列 1 2 3 和 4 进行比较 并打印 file2 中与 file1 中任何行都不匹配的那些行 E g file1 aaa bb
  • 有没有办法使用 perf 工具查找流程中各个功能的性能?

    我正在尝试在流程中实现各个功能的性能 我该如何使用 perf 工具来做到这一点 还有其他工具吗 例如 假设 main 函数调用函数 A B C 我想分别获得主要功能以及功能 A B C 的性能 有没有一个很好的文档来了解 perf 源代码
  • Linux c++:api 与 /proc 文件?

    我正在开发一个应用程序来收集和发送各种系统信息 分区空间 可用空间 笔记本电脑电池信息等 我没有成功地以直接 c api 的形式获取这些信息 尽管它都可以通过 proc 或类似 中的文件获得 所以 我想知道在我的 C 应用程序中读取 解析这
  • crontab 作业的 STDOUT 和 STDERR 输出在哪里

    有谁知道 CentOS 中正常 crontab 作业输出的 STDOUT 和 STDERR 在哪里 我检查了 var log cron文件 但它只记录了 cron 作业执行的时间和命令 没有找到 STDOUT 或 STDERR 内容 看看
  • 将多页 PDF 转换为单个图像

    我必须将多页 PDF 文档转换为 png 图像 我尝试使用 ImageMagick 但无法获得最终结果 convert document pdf document png or convert adjoin document pdf doc
  • 在 CentOS 6.4 中意外删除了符号链接 libc.so.6。如何获得 sudo 权限来重新创建它?

    我不小心删除了符号链接 lib64 libc so 6 gt lib64 libc 2 12 so sudo rm libc so 6 然后我不能使用任何东西 包括ls命令 我输入的任何命令都会出现错误 ls error while loa
  • 在远程机器上执行多个命令

    在下面的命令中 我尝试 ssh 命令并执行多个命令 如果任何命令失败 即如果 command1 退出 那么如果 command1 和 commnd 2 退出 否则在远程计算机上执行命令 3 我如何退出 我怎样才能做到这一点 ssh logi
  • CMake错误:本项目中使用了以下变量,但它们被设置为NOTFOUND

    我正在尝试配置whalebot带有 tar 文件的爬虫whalebot 0 02 00 tar gz 我已正确提取它 root Admin1 dls tar xvzf whalebot 0 02 00 tar gz 之后我想对其进行配置 r
  • 如何从 USB 加载 LUKS 密码,然后返回键盘?

    我想设置一台具有全磁盘加密功能的无头 Linux Debian Wheezy PC 能够使用 USB 驱动器或通过键盘输入密码来解锁磁盘 我的起点是使用 Debian 安装程序中基本的整个磁盘加密选项进行全新安装 该安装程序将 boot 之
  • 服务器启动时 Java 运行时环境 SIGSEGV 错误

    我正在使用 java 版本 1 7 0 45 和 eclipse kepler 在服务器启动时我收到以下错误日志 虽然我发现了几个帖子 1 https stackoverflow com questions 19332489 how to
  • 如何禁用浮点单元(FPU)?

    我想在 x86 系统中禁用 FPU MMX SSE 指令 并且我将为设备不可用异常实现一个处理程序 我已经提到过控制寄存器 wiki 页面 http en wikipedia org wiki Control register 看来我必须在
  • 使用 libjpeg 编写 jpeg(段错误)

    尝试使用 libjpeg 从一些原始数据写入 jpeg 文件 它会触发分段错误jpeg start compress 这是代码的相关部分 void write sub image char filename int start int en
  • 为什么删除目标文件后写入文件描述符会成功?

    code int main int argc char argv int fd open test txt O CREAT O RDWR 0200 0400 if fd 1 printf failure to oepn exit 1 int
  • 执行bash脚本时如何显示行号

    我有一个测试脚本 其中有很多命令并将生成大量输出 我使用set x or set v and set e 因此当发生错误时脚本将停止 但我还是很难定位到哪一行执行停止了 从而定位问题所在 有没有一种方法可以在每行执行之前输出脚本的行号 或者
  • Nvcc 的版本与 CUDA 不同

    我安装了 cuda 7 但是当我点击 nvcc version 时 它打印出 6 5 我想在 GTX 960 卡上安装 Theano 库 但它需要 nvcc 7 0 我尝试重新安装cuda 但它没有更新nvcc 当我运行 apt get i
  • 请求失败的错误:GLXBadDrawable (C++ bgfx)

    我试图用 glfw 和 bgfx 创建一个紫色窗口作为我的游戏引擎的起点 但是在启动二进制文件时它会抛出一个错误 我正在尝试创建紫色窗口 如下图所示 我正在使用 cmake 错误是 anuj fedora D C C c o build g
  • Ruby 脚本即服务

    嗯 标题说明了一切 我有一个 ruby 脚本 我想在我的 Linux 机器上作为一项服务 我可以启动和停止 运行 我找到了如何在 Windows 上执行此操作here https stackoverflow com questions 16
  • 调试严重的 SIGILL 崩溃:文本段损坏

    我们的系统是基于 PowerPC 的运行 Linux 的嵌入式系统 我们遇到了随机的 SIGILL 崩溃 这种情况在各种应用程序中都会出现 崩溃的根本原因是将要执行的指令归零 这表明内存中的文本段已损坏 由于文本段是以只读方式加载的 因此应
  • elf .rel.text 部分中 R_386_32/R_386_PC32 的含义

    为了理解重定位的概念 我编写了一个简单的 chk c 程序 如下所示 1 include
  • 删除损坏的链接 Unix

    我想删除损坏的链接 但在此之前我想确认目录中是否存在链接文件 我们来调用一下链接A if a A then print ya A is ther fi But if A链接已损坏 那么我该如何检查 find L type l找到损坏的符号链

随机推荐