根据linux驱动设备模型,我们可以知道非热插拔设备的驱动在进行注册的时候实际上是在匹配driver和device的信息,信息匹配上了才会进入probe函数进行一些初始化工作。那么对于非热插拔设备,一般在系统添加驱动之前会把device信息静态的添加在内核中,这样driver注册时才能去内核中匹配时找到对应的device。比如,我们写一个i2c设备mma8451的驱动,该设备连接在i2c0上,属于非热插拔设备,因此在加载驱动之前,要静态的在内核中添加上mma8451的device信息。该信息在linux-3.0.15/arch/arm/mach-mx6目录下的板级文件board-mx6q_sabresd.c中。很多cpu内资源的信息(设备信息)在arch/arm/plat-mxc目录中devices目录中分别定义。
注意,这里提到,非热插拔设备是在两个地方定义的,一部分是在板级路下的板级文件中,一部分是在平台目录下的设备文件信息中。私以为,cpu内部的模块设备信息在平台目录arch/arm/plat-mxc定义;其他独立设备在板级文件中定义。
设备信息有了,但设备还没有注册,内核还是不知道有这个设备,还需要注册。注册的信息一般都在板级文件中。例如我用的开发,imx6q的cpu,该板子上设备的注册在linux-3.0.15/arch/arm/mach-mx6目录下的板级文件board-mx6q_sabresd.c中进行。
|