使用字符驱动程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用字符驱动程序相关的知识,希望对你有一定的参考价值。

1、编译/安装驱动

在Linux系统中,驱动程序通常采用内核模块的程序结构来进行编写。因此,编译/安装一个驱动程序,其实质就是编译/安装一个内核模块。

创建memdev.c驱动程序(用内存来模拟的字符设备)

技术分享

技术分享

技术分享

技术分享

技术分享

Makefile文件

技术分享

然后编译:make,将memdev.ko文件拷贝到开发板中,安装insmod memdev.ko,查看是否成功:lsmod.

2、字符设备文件

应用程序用过字符设备文件可以使用相应的字符设备驱动程序来控制字符设备。

创建字符设备文件的方法:一般有两种:

1)、使用mknod命令

mknod /dev/字符设备文件名 c 主设备号  次设备号

2)、使用函数在驱动程序中创建

技术分享

查找驱动程序对应的主设备号(这是驱动程序而不是字符设备文件!!),使用cat /proc/devices,可以看到两列:数字对应设备号,后面对应名称;次设备号一般取非负的数

下面创建字符设备文件:mknod /dev/memdev0 c 253 0 (注意这里的253是刚安装的驱动程序对应的主设备号,所以在这里要让创建的字符设备文件也对应同样的主设备号!!)。

下面查看该字符设备文件 ls /dev/memdev0。

现在设备驱动程序已编成内核模块的形式安装到内核且字符设备文件也创建好了。

下面创建应用程序来测试

1)往寄存器写入内容(该寄存器是用数组虚拟的)

vi write_mem.c

技术分享

arm-linux-gcc  write_mem.c  -o  write_mem,把它放到开发板上运行:如果出现-/bin/sh:-/write_mem:not found,说明我们的应用程序所依赖的库找不到,出现这种情况,回到宿主机,使用命令arm-linux-readelf -d write_mem来检查,-d是查询该应用程序所依赖的动态链接库的,在我们开发板里没有该库ls /lib/下没有。

解决方法:

1、把该动态链接库找到,把它复制到开发板的lib下;

2、我们采用静态编译方法:arm-linux-gcc -static write_mem.c -o write_mem,再拷贝到开发板运行。

通过执行该程序,已经把2013数字写进相应字符设备之中了。

下面把该数字读取出来

vi read_mem.c

技术分享

编译arm-linux-gcc -static read_mem.c -o read_mem。运行之

技术分享

 

技术分享

以上是关于使用字符驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

字符设备驱动简介

如何使用 HIVE JDBC 驱动程序在列名中使用特殊字符?

无法使用驱动程序获取查询字符串

使用 Excel ODBC 驱动程序进行字符串比较

如何使用 MongoDB C++ 驱动程序将字符串转换为 BSON?

使用 JDBC Oracle Thin 驱动程序的错误字符串编码