驱动编程
‘壹’ 如何编写驱动程序
可以啊 不过得找到硬件号以及工作的必要端口号
然后用c语言些
看看硬件通信方面的书籍对你有帮助的当然有些东西是商业机密 你不一定能拿到所有的公开信息
原理吗就是消息响应机制
比如首先为摄像头创建进程x
进程1希望调用进程x 利用摄像头
进程x开放端口给进程1 进程1取得资源
进程x同时挂起(有很多算法如 银行家算法)。。。。。。
是不是偏题了?
‘贰’ 我想学习如何编写驱动程序(C)
开发驱动用delphi最简单,最快速
你可以到书店去找一下《delphi底层开发大全》
里面有很详细的驱动开发的做法,并且不难
delphi把驱动所需的相关内容都做成接口的
使用起来比C++简单
To楼上的,微软那个驱动制作工具叫Microsoft Driver Creator
不过现在好像已经下载不到了。。
‘叁’ 学完驱动编程(开发)是不是就等于学习内核编程了
以linux为例。内核实际上由大量的模块构成。你学了驱动开发,实际上也可以说学习内核编程了
‘肆’ 什么是windows驱动编程
windows驱动编程,这个有很多,多数硬件驱动,USB驱动,pci
ddr驱动等等!是基于win32的编程。根据CPU指令,进行windows系统与硬件交互的开发!这个要了解很多!我也不大清楚。
反正需要了解的知识大概是汇编,C语言,电路基础,以及了解某款CPU的指令集!还有了解windows内核等等吧!
‘伍’ 如何编写驱动程序
代码:
#include<linux/mole.h>
#include<linux/kernel.h>
#include<asm/io.h>
#include<linux/miscdevice.h>
#include<linux/fs.h>
#include<asm/uaccess.h>
//流水灯代码
#define GPM4CON 0x110002e0
#define GPM4DAT 0x110002e4
static unsigned long*ledcon=NULL;
static unsigned long*leddat=NULL;
//自定义write文件操作(不自定义的话,内核有默认的一套文件操作函数)
static ssize_t test_write(struct file*filp,const char __user*buff,size_t count,loff_t*offset)
{
int value=0;
int ret=0;
ret=_from_user(&value,buff,4);
//底层驱动只定义基本操作动作,不定义功能
if(value==1)
{
*leddat|=0x0f;
*leddat&=0xfe;
}
if(value==2)
{
*leddat|=0x0f;
*leddat&=0xfd;
}
if(value==3)
{
*leddat|=0x0f;
*leddat&=0xfb;
}
if(value==4)
{
*leddat|=0x0f;
*leddat&=0xf7;
}
return 0;
}
//文件操作结构体初始化
static struct file_operations g_tfops={
.owner=THIS_MODULE,
.write=test_write,
};
//杂设备信息结构体初始化
static struct miscdevice g_tmisc={
.minor=MISC_DYNAMIC_MINOR,
.name="test_led",
.fops=&g_tfops,
};
//驱动入口函数杂设备初始化
static int __init test_misc_init(void)
{
//IO地址空间映射到内核的虚拟地址空间
ledcon=ioremap(GPM4CON,4);
leddat=ioremap(GPM4DAT,4);
//初始化led
*ledcon&=0xffff0000;
*ledcon|=0x00001111;
*leddat|=0x0f;
//杂设备注册函数
misc_register(&g_tmisc);
return 0;
}
//驱动出口函数
static void __exit test_misc_exit(void)
{
//释放地址映射
iounmap(ledcon);
iounmap(leddat);
}
//指定模块的出入口函数
mole_init(test_misc_init);
mole_exit(test_misc_exit);
MODULE_LICENSE("GPL");
(5)驱动编程扩展阅读:
include用法:
#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。
插入头文件的内容
#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:
1、#include<文件名>
2、#include"文件名"
如果需要包含标准库头文件或者实现版本所提供的头文件,应该使用第一种格式。如下例所示:
#include<math.h>//一些数学函数的原型,以及相关的类型和宏
如果需要包含针对程序所开发的源文件,则应该使用第二种格式。
采用#include命令所插入的文件,通常文件扩展名是.h,文件包括函数原型、宏定义和类型定义。只要使用#include命令,这些定义就可被任何源文件使用。如下例所示:
#include"myproject.h"//用在当前项目中的函数原型、类型定义和宏
你可以在#include命令中使用宏。如果使用宏,该宏的取代结果必须确保生成正确的#include命令。例1展示了这样的#include命令。
【例1】在#include命令中的宏
#ifdef _DEBUG_
#define MY_HEADER"myProject_dbg.h"
#else
#define MY_HEADER"myProject.h"
#endif
#include MY_HEADER
当上述程序代码进入预处理时,如果_DEBUG_宏已被定义,那么预处理器会插入myProject_dbg.h的内容;如果还没定义,则插入myProject.h的内容。
‘陆’ Windows驱动编程和Linux驱动编程 区别大吗
原理是差不多的,但是所用的函数是不同的.一般都是用的c语言和少部分汇编
不过学驱动编程重要的不是编程而是理解操作系统的内核原理。当你理解了内核的原理剩下的只是学用那些函数而已。
你可以去看看<linux内核源代码情景分析>和<windows内核情景分析>
如果你只是想写几个驱动来玩玩的,你只以只看看<windows驱动开发技术详解>
如果你想成为高手那么内核原理的书是必看的。
‘柒’ 驱动程序怎么编写
要看是什么操作系统,还要先了解底层接口。
‘捌’ VC驱动编程
推荐几本
《天书夜读-从汇编语言到windows内核编程》
《寒江独钓-windows内核安全编程》
《Windows驱动开发技术详解》
网上都有pdf版本的,你可以到verycd上或者其他地方搜索的到下载地址
‘玖’ C语言如何编写驱动
这问题问的,你想直接拿C语言写驱动这显然是完成不了的,你使用的是什么环境?Linux/Windows这些区别好大的,驱动光C语言也是完成不了的,必须还得有一定的汇编语言知识。
‘拾’ 如何编程安装驱动程序
这个问题可能大家都知道,但是认识可能不是很深刻,我也是自己写过一个驱动后才明白。驱动,就是屏蔽到底层设备的细节,比如,键盘驱动程序,QT在打开键盘的设备节点的时候,它不知道系统的键盘是什么,是GPIO接的,是I2C总线接的,它都不知道,它所做的就是read,如果有按键,那么就能读出键值,如果没有sleep啊。应用程序就只能做到这里了,剩下的都是由驱动完成了。这就是驱动的任务。
上边说的可能大家都明白,这些还是经常被忽略的。
2 驱动的工作流程。
3 驱动的编写方法
我觉得写驱动需要很多驱动以外的知识,我是学计算机的,直到我写驱动程序后,我才明白了很多计算机体系结构,操作系统和组成原理讲的东西。
然后再去看看linux device driver可能会好点。
不过今天多说一句,如果现在有计算机系的学生想做这个,我很负责的说,不要做这个,如果想做一个合格的计算机系的研究生,就要去做人工智能,模式识别,算法复杂度,机器学习,其它的都是没有什么意义的。写一个驱动,移植一个os,上了两年学,学到的就是这些,那还不如去工作,工作两年绝对可以学到这些多多的东西。但是工作后是没有办法学习那些理论性的东西,那些对你今后十年都影响的东西。