Freescale MPC85XX系列BSP各设备注册浅析

来源:互联网 发布:考研英语人工智能 编辑:程序博客网 时间:2024/06/07 11:00

这几天项目不太忙,于是抽空看了一下关于BSP相关的东西,记下来跟大家分享一下。

我们公司用的产品主要是freescale公司的powerpc系列,期中MPC8548,MPC8572用的比较多。由于要给老外做整个板卡上硬件的测试工作,所以对于板上资源是必须要了解的。本篇文章的侧重点在于板上各设备是如何注册的(只讲设备注册,不讲驱动注册),而对于板上有哪些资源,datasheet上都写得明明白白,在此不再赘述。

 

好了,我们先查看一下在linux-2.6.23内核上的MPC85XX系列的板级资源文件

arch/ppc/syslib/mpc85xx_devices.c

由于文件太大,我把主要部分列出来

 

比较多啊,其实还没列完,前面还省略了一部分内容,比如串口部分。

虽然很长,其实内容都一样哈,这些板上资源被定义为平台设备,注意最后

ppc_sys_device_fixup = mach_mpc85xx_fixup;
这里ppc_sys_device_fixup 在内核中是一个全局的函数指针,大家或许已经注意到了,在ppc系列可能有很多处理器类型,这里指向了

MPC85XX系列是因为我们选择了该类型处理器。如果是在其他型号板子资源文件中肯定指向其他了。

 

好,接着看这么多的设备是怎么注册的呢,要看另一个文件

arch/ppc/syslib/ppc_sys.c

 

我只需要看该文件的最后部分

 

然后在内核起来的时候进行注册各设备。

device向内核注册了,那么与device相关的driver什么时候注册的,driver代码在哪呢?

这些driver代码分散在drivers目录下各目录中,比如dma controller相关的driver在 drivers/dma下,

i2c controller相关的driver在drivers/i2c下。

这里以i2c controller作为例子。

各i2c controller驱动在drivers/i2c/busses/目录下,而各i2c device驱动在drivers/i2c/chips/目录下

我们要查看的i2c controller驱动文件为

drivers/i2c/busses/i2c-mpc.c

 

驱动内容很简单,就不贴出来了。主要就是一个平台设备的驱动,实现了i2c的读写,i2c device的探测,remove等功能。

然后向内核去注册这个驱动。

驱动怎么匹配设备的?

这个我就不关心了,由总线的方法去匹配。这里platform总线匹配方法很简单的。根据struct platform_device 和

struct platform_driver里面的.name域,看名字是否相同进行匹配。

 

写这篇文章主要是为了理清板级设备如何注册。这跟我们平常做设备驱动方法有点不同,我们平常做一个设备驱动,通常把注册设备和注册驱动放在一起。内核则不同,其实都一样的啦,有设备驱动模型在,总能匹配的。

原创粉丝点击