当前位置: 技术问答>linux和unix
那位看过标准的spi驱动,spidev.c中有些问题系想不明白。急急急
来源: 互联网 发布时间:2016-09-09
本文导语: spidev.c中的spidev_init(),在完成register_chrdev(),class_register()后调用。 注册spidev_spi时,调用spi_register_driver(); spidev的注册过程大致为:spi_register_driver()-> driver_register() -> bus_add_driver() -> bus_add_driver() -> dri...
spidev.c中的spidev_init(),在完成register_chrdev(),class_register()后调用。
注册spidev_spi时,调用spi_register_driver();
spidev的注册过程大致为:spi_register_driver()-> driver_register() -> bus_add_driver() -> bus_add_driver() ->
driver_attach() -> bus_for_each_dev()
在bus_for_each_dev()中查找spi总线上的设备,既遍历bus->klist_devices上的设备,如果有设备则调用drv的probe函数。这里是spidev.c中的spidev_probe()探测函数。
但在我的系统上运行,发现有这么个问题:spi总线上的bus->klist_devices是空的,没有任何设备,所以spidev_probe()没有被调用,这样spidev的注册失败。
问题:bus->klist_devices上的设备时如何注册上的,在什么时间注册。由谁注册。
注册spidev_spi时,调用spi_register_driver();
spidev的注册过程大致为:spi_register_driver()-> driver_register() -> bus_add_driver() -> bus_add_driver() ->
driver_attach() -> bus_for_each_dev()
在bus_for_each_dev()中查找spi总线上的设备,既遍历bus->klist_devices上的设备,如果有设备则调用drv的probe函数。这里是spidev.c中的spidev_probe()探测函数。
但在我的系统上运行,发现有这么个问题:spi总线上的bus->klist_devices是空的,没有任何设备,所以spidev_probe()没有被调用,这样spidev的注册失败。
问题:bus->klist_devices上的设备时如何注册上的,在什么时间注册。由谁注册。
|
在开发板的/sys/bus/spi下的drivers和devices下看看没有设备驱动和相应的设备。开发板的模块应该有好几个我用的devkit8000有四个,只有spi1.0是可用于用户扩展的借口,如果注册设备需要修改文件目录在/arch/arm/match-你的板子的具体型号(你的板子的设置文件)添加类似代码
struct spi_board_info omap3devkit9100_spi_board_info[] = {
[0] = {
.modalias = "spidev",
.bus_num = 1,
.chip_select = 0,
.max_speed_hz = 1500000,
.controller_data = &****_config,
.irq = OMAP_GPIO_IRQ(OMAP3_BEAGLE_TS_GPIO),
估计是这个问题 ,我是新手 希望多交流
不知道对你有用不 也不知道是否是你面对的问题 如果不管用 就当帮顶了
struct spi_board_info omap3devkit9100_spi_board_info[] = {
[0] = {
.modalias = "spidev",
.bus_num = 1,
.chip_select = 0,
.max_speed_hz = 1500000,
.controller_data = &****_config,
.irq = OMAP_GPIO_IRQ(OMAP3_BEAGLE_TS_GPIO),
估计是这个问题 ,我是新手 希望多交流
不知道对你有用不 也不知道是否是你面对的问题 如果不管用 就当帮顶了
|
帮 你 顶...