beaglebone-black使用TI-sdk 通过修改dts文件来使能 spidev1.0

本文是使用的TI sdk 如果你用的是debian请参考我之前的文章


在3.2之前版本的内核里spi驱动要先注册spi_board_info结构体,然后匹配spi_master, 再创建spi_device. 创建完设备之后再到spi总线上寻找有没有同名的spi_driver. 如果有的话就调用spi_driver的probe函数. 在probe函数里register_chrdev/class_create/device_create, 创建chrdev然后通过fops里的函数来读写spi设备.

在新版的内核里推荐使用dts来描述设备信息, 并且先注册spi_master, 然后再创建设备, 最后跟platform总线上的driver的 .of_match_table成员里的元素匹配, 如果匹配成功就调用probe. 所以新版的内核里我们不需要再写spi_baord_info 和spi_register_board_info这样的代码了


折腾了一个星期的人表示看到上边这个画面简直泪如雨下.  下边我们就看如何在不修改一丁点内核代码的情况下让系统显示出这个画面.

首先交代一下我使用的系统. 我使用的是TI最新板的sdk: ti-processor-sdk-linux-am335x-evm-01.00.00.00-Linux-x86-Install.bin

root@am335x-evm:~# uname -a
Linux am335x-evm 3.14.26 #22 Wed Jul 22 16:14:16 CST 2015 armv7l GNU/Linux
我们先找到我们要修改的文件: am335x-boneblack.dts

(sdk)/ti-processor-sdk-linux-am335x-evm-01.00.00.00/board-support/linux-3.14.26-g2489c02/arch/arm/boot/dts/am335x-boneblack.dtb

因为dts文件层层包含我们不容易搞清楚结构, 那还不如将dtb反编译回dts, 看看最终的dts文件.

dtc -I dtb -O dts am335x-boneblack.dtb > am335x-boneblack.dts

第一处修改:




第二处修改:


添加这两部分的代码, spi0_pins 和spi1_pins分别对应spi0和spi1引脚的配置, 关于引脚的配置值可以用TI官方的pinmux工具来生成.

第三处修改:


spi@48030000 对应spi0 

spi@481a0000 对应spi1

compatible = "ti,omap4-mcspi" 对应spi驱动底层 spi_master驱动(spi-omap2-mcspi.c)下 的platform_drvier里的 .of_match_table 成员.如果 .of_match_table 数组里有 "ti,omap4-mcspi" 那么就可以调用该platform_driver的probe函数.在spi_register_master中创建设备

compatible = "rohm,dh2228fv" 对应spi驱动上层 spi_driver (spidev.c)的 .of_match_table 成员. 如果 .of_match_table 数组里有 "rohm,dh2228fv",就可以调用 spi_driver的probe函数了.


至此dts文件已经修改完毕, 只需要编译之后让系统加载这个新的dtb就可以了

dtc -I dts -O dtb am335x-boneblack.dts > am335x-boneblack.dtb








猜你喜欢

转载自blog.csdn.net/gongyuan073/article/details/46956767