嵌入式linux驱动识别设备的过程

嵌入式linux驱动识别设备的过程,第1张

驱动程序识别设备时,有以下两种方法:

(1)驱动程序本身带有设备的信息,比如开始地址、中断号等:加载驱动程序时,就可以根据这些信息来识别设备。

(2)驱动程序本身没有设备的信息,但是内核中已经(或以后)根据其他方式确定了很多设备的信息;加载驱动程序时,将驱动程序与这些设备逐个比较,确定两者是否匹配(match)。如果驱动程序与某个设备匹配,就可以通过该驱动程序 *** 作这个设备了。内核常使用第二种方法来识别设备,这可以将各种设备集中在-一个文件中管理,当开发板的配置改变时,便于修改代码。在内核文件include/linux/platform _deviceh 中,定义了两个数据结构来表示这些设备和驱动程序: platform_ device 结构用来描述设备的名称、ID、所占用的资源(比如内存地址/大小、中断号)等; platform_ driver 结构用来描述各种 *** 作函数, 比如枚举函数、移除设备函数、驱动的名称等。内核启动后,首先构造链表将描述设备的platform_device结构组织起来,得到一一个设备的列表:当加载某个驱动程序的platform_ driver 结构时,使用一些匹配函数来检查驱动程序能否支持这些设备,常用的检查方法很简单:比较驱动程序和设备的名称。

嵌入式驱动的话,国内一般搞嵌入式linux驱动的比较多,但是对于小白来说难度还是挺高的。

他涉及到linux驱动的加载模式(kernel模块方式加载)和模块编写语法,这才是基础。

还有 *** 作系统的原理得明白。

各种硬件的工作原理和分类(字符设备、块设备、网络设备),网络设备的驱动最难

然后就是驱动的机制和策略是非常不容易把握的平衡点。

但是对于有嵌入式linux系统从事经验的人来说,学起来倒不是太难。

我也是新手,说的不对,不要扁我哦。

静态 就是 驱动程序 编译进 内核,

动态就是 模块 加载。

类似于 XP中,

静态 就是 系统自带的 驱动程序。

动态, 就是 开机 启动 的 程序。

嵌入式Linux中如何实现应用程序与驱动程序函数接口问题,以GPIO为例

驱动中的函数定义:

static int sbc2440_leds_ioctl(

struct inode inode,

struct file file,

unsigned int cmd,

unsigned long arg)

{

switch(cmd) {

case 0:

case 1:

if (arg > 4) {

return -EINVAL;

}

s3c2410_gpio_setpin(led_table[arg], !cmd);

return 0;

default:

return -EINVAL;

}

}

应用程序中的函数定义:

ioctl(fd, on, led_no);

不明白的地方是函数名都不一样,应用程序中的ioctl函数是如何将参数传递到驱动程序sbc2440_leds_ioctl中的?

xicain

以上就是关于嵌入式linux驱动识别设备的过程全部的内容,包括:嵌入式linux驱动识别设备的过程、学嵌入式系统驱动难不难是干什么的、在嵌入式实验中,设备驱动程序添加的两种方式(静态方式和动态方式)的区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9270786.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存