This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM3352:启用 spidev 支持

Guru**** 2618505 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/580996/linux-am3352-enabling-spidev-support

器件型号:AM3352

工具/软件:Linux

你(们)好

我正在尝试在基于 BeagleBoneBlack 的电路板上启用 spidev 支持。

我继承了使用 SDK 8.00.00.00 (Linux/ARM 3.14.26)开发的使用/dev/spidev2.0的项目

我正在将此项目移植到最新的 TISDK 中、发现我无法在/dev/.中看到任何 spidev
我已在我的.config 中启用 CONFIG_SPI_SPIDEV=y

我已从原始项目中复制 pinmux 定义:

SPI1_Pins:pinmux_SPI1_Pins{
pinctrl-single、pins =<
0x108 0x32
0x194 0x33
0x198 0x13
0x19c 0x13
>;
}; 

并确认这些内容符合原理图、数据表和 TRM (旧代码正常工作是不足为奇的!)

SPI1上还定义了以下节点:

&SPI1{
status ="确定";
pinctrl-names ="默认值";
pinctrl-0 =<&SPI1_PINs>;

spidev@0{
SPI-max-frequency =<24000000>;
reg =<0>;
compatible ="Linux、spidev";
};

spidev@1{
spi-max-frequency =<24000000>;
reg =<1>;
compatible ="linux、spidev";
};

}; 

-通过在兼容字段中添加"Linux"项、此处的语法已与原始语法不同
-我注意到,如果我不这么做,我就会在内核启动序列中遇到错误,如下所示

[1.032904] spidev spi2.0:dbuggy DT:spidev 直接列在 DT
[1.038679]---- [在此处剪切]-----
[1.042994]警告:CPU:0 PID:1 at drivers/spi/spidev.c:719 spidev_probe + 0x1a0/0x1bc ()
[1.050598]链接的模块:
[1.053448] CPU:0 PID:1 Comm:swapper not prosced 4.4.4.19-gdb0b54cdd #30]
硬件树[1.03337
](展开回扫)从[ ](show_stack+0x10/0x14)
[1.072753][ ](show_stack)从[ ](warn_slespath_common+0x80/0xac)
[1.080281][ ](warn_slowpath_common)、来自[ ](warn_slespath_null+0x1c/0x)
[1.088454][ ](warn_slowpath_null)、来自[ ](spidev_prob+0x1a0/0x1bc)
[1.096128][ ](spidev_probe)从[ ](SPI_drv_probe +0x7c/0xa8)
[1.103252][ ](SPI_drv_probe)、来自[ ](driver_probe_device+0x1fc/0x2f0)
[1.111110][ ](driver_probe_device)从[ ](bus_for_each _drv+0x60/0x94)
[1.119039][ ](bus_for_each _drv)从[ ](_device_attach+b0/0x114)
[1.126711][ ](_device_attach)从[ ](bus_probe_device+0x84/0x8c)
[1.134317][ ](bus_probe_device)、来自[ ](device_add+0x370/0x56c)
[1.141682][ ](device_add)从[ ](SPI_ADD_DEVICE_0x9C/0x134)
[1.148805][ ](SPI_ADD_DEVICE)从[ ](of _register_SPI_DEVICE_0x224/0x2)
[ 1.156973][ ](of _register_spi_device)、来自[ ](SPI_REGISTER_MASTER+0x25)
[ 1.165531][ ](SPI_REGISTER_MASTER)、来自[ ](devm_SPI_register_master+0x)
[1.174104][ ](devm_spi_register_master)、来自[ ](OMAP2_mcspi_probe+0x2C)
[ 1.182680][ ](OMAP2_mcspi_probe)、来自[ ](platform_drv_probe +0x4c/b0)
[1.190607][ ](platform_drv_probe)、来自[ ](DRIVER_PROBLE_DEVICE_0x1FC/0x)
[1.198854][ ](driver_probe_device)从[ ](__driver_attach+0x8c/0x90)
[ 1.206686][ ](__driver_attach)从[ ](BUS_TO_EASE_DEV_0x68/0x9C)
[1.214292][ ](bus_for_each_dev)、来自[ ](BUS_ADD_DRIVER+0x1a0/0x218)
[1.221977][ ](BUS_ADD_DRIVER)从[ ](driver_register+0x78/0xf8)
[1.229420][ ](driver_register)、从[ ](do_one _initcall+0x90/0x1dc)
[ 1.237036][ ](多个_initcall)、来自[ ](kernel_init_freeed+0x12c/0x1b)
[1.245120][ ](kernel_init_freable)从[ ](kernel_init+0xc/0xec)
[ 1.252648][ ](kernel_init)、来自[ ](RET_FAND_FANK+0x14/0x3c)
[1.259724]-[结束跟踪 b4816ec3f58ddc0f ]-[
1.264822] spiddev 2.1:buggy DT:spidev 直接列在 DT
[1.270539]中]---- [在此处剪切]----- 

它似乎是调用 spidev_probe

我的困惑在于、如果我修改 DTS 以包含所需的"Linux"术语、我似乎永远不会在引导时调用 spidev 探测器(我已经插入了串行字符串、以检查代码流以在此处输入)

如果我检查这些节点的 DTB、我会看到:

62672:SPI@481a0000{
62695:compatible ="ti、omap4-mcspi";
62738-#address-cells =<hw01>;
62781-#size-cells =<0x00000000000000000000 >;
62821- reg =<0x481a0000 0x00000001c1>;
62864- 0x00000003<0x00000003<0x00000003<0x000000000000003<0x00000003<0x00000003<0x0000000270003<0x00000003<0x00000003<0x00000003<0x00000003<0x00000003<0x00000003<0x00000003<0x00000003<0x00000003<0x00000003<0x00000003<0x00000003<0x00000003<0x00000003<0x00000003<0x00000003<0x0000000



63131- dma-names ="tx0"、"rx0"、"tx1"、"rx1";
63183- status ="oke";
63212- pinctrl-names ="default";
63251- pinctrl-0 =<0x00000044>;
63289:spidev@




@0{63312:SPI-max- frequency = 0x3362>;63356001- e000= 0x36000001<spidp =
0x3600>
;636001e0001<spidp = 0x335600>;636001e0001<spidp = 0x335600>;636001<sp03900>
兼容="spidev";
636600-};
63615-}; 

如果我在 printk 级别启用详细调试、则引导时会出现以下相关字符串:

[ 14.126735]器件类'spidev':注册
[ 14.130861] kobject:'spidev'(spibb188):kobject_add_internal:'class'、set:'class'
[ 14.138792] kobject:'spidev'(ddbcb188):kobject_uevent_envs:'sledv':
[14.40pedv'

(/class/spidev):'shipcev':'shum_drivers':[14.40pedv':'shipcev':'n100_cpuev':[14.4625] 'drivers'
[14.162915] kobject:'spidev'(ddbce800):kobject_uevent_env
[14.168185] kobject:'spidev'(ddbce800):ffill_kobj_path:path ='/bus/spi/drivers/spidev <--snip->[14.326125]



总线:'spidev'(ddbce800):fill _kobj_path:path ='<--snip->[14.330000
:sp430_probe 与设备匹配的设备驱动程序[14.3481msp2]msp430_msp4678_mspi:v_msp430_mspi 设备[14.32]平台:真正匹配的设备驱动程序[msp430_sp430_mspin
添加1个 pinctrl 映射
[14.346768] devices_kset:将481a0000.SPI 移动到列表末
尾[14.352057] omap_hwmod:SPI1:启用
[14.3555537] powerdomain:在0个循环中完成转换
[14.360464] omap4域:l4ls_clkdm:启用
[14.36421] omap2

:启用[14.36421]设备[14.3mod4:1:启用 OMAP4个模块:1:'mod4个 OMAP4个 OMAP_clkmcock1:1:1:启用[14.362] device_add
[ 14.376697] kobject:'spi_master'(ddbe0780):kobject_add_internal:'481a0000.spi'、set:'(null)'
[ 14.385599] kobject:'sb2'(ddbc5408):kobject_add_internal:'sus:'sus:'481a0000.spi'、set:'14.40162'


/devices/platform/ocp/481a0000.spi/spi_master/spi
(dcpi_mspi2')[14.40162':'dcpu100_mu1004pi204pines':'s:'d) device_add
[14.416784] kobject:'s 2.0 (ddbc5808):kobject_add_internal:'sip2'、set:'Device (设备)'
[14.424820]总线:'spi':add device spida2.0
[14.428762] pim:adding info for SPI:
14.432562] kobject:[14.4388](设备 pidc28386'):'s v_64c8cw28b](
/devices/platform/ocp/481a0000.spi/spi_master/s 设备 pedv_event: dcpuv_w28388a':[14.432429]

kobject_add_internal:parent:'spi2'、set:'Device es'
[ 14.460061] bus:'spi':add device spi2.1
[ 14.464011] PM:adding info for SPI:spi2.1
[ 14.467337] kobject:fill 2.1
obj (ddbc5c08):kobject_uevent_env [ 14.467337]m /devices/platform/ocp/481a0000.spi/spi_master/s

:'bt vn vn vn vn vn v72m:'dcpuat' m:'dcpuat' m 144824802' m:'m:'m bd' m bd' m bd' bt bt bt bt bt bt bd' bm:'m bd' bd' bd' bd' b40863c0863 将器件481a0000.SPI 绑定到驱动器 OMAP2_mcspi
[ 14.498127] kobject:'omap2_mcspi'(ddbce880):kobject_uevent_env
[ 14.503788] kobject:'omap2_mcspi'(ddbce880):fill_kobj_path:'/bus/platform/drivers/omap2_mcspi 

但是、我仍然看不到任何尝试调用 spidev_probe 的内容、并且我期望的/dev/entries 永远不会出现

我可以在/sys/bus/spi/devices 下找到这些条目

lrwxrwxrwx 1 root root 用户0 Jan 1 00:12 spi1.0 ->../../../devices/platform/ocp/48030000.spi/spi_master/spi1/spi1.0
lrwxrwxrwx 1 root 用户0 Jan 1 00:12 spi2.0 ->../../../devices/platform/ocp/481a0000.spi/spi_master/spi2/spi2.0
lrwxrwxrwx 1 root 用户0 Jan 1 00:12 spi2.1 ->../../../devices/platform/ocp/481a0000.spi/spi_master/spi2/spi2.1 

有什么建议可供我查看?

感谢你的帮助。

祝你一切顺利、
Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    请检查这些主题:
    e2e.ti.com/.../1300759
    e2e.ti.com/.../340805

    希望这对您有所帮助。

    BR
    玛格丽塔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Margarita

    我已经阅读过这两个文档几次
    -并已尝试为我的 spidev 节点指定时钟  
    -我在我的.config 中设置了所有提到的启用项

    代码仍然不会调用 spidev_probe 函数。

    我想知道这些线程是否有点过时、因为它们包含对兼容字符串形式的引用、而不提及"Linux"(使用最新内核执行此操作会导致我在原始帖子中粘贴的错误。

    如果我查看我的 sys 文件夹:
    root@proto-board:~.# find /sys-name SPI*
    /sys/bus/spi
    /sys/bus/spi/devices/spi1.0
    /sys/bus/spi/devices/spi2.0
    /sys/bus/spi/devices/spi2.1
    /sys/bus/spi/drivers/spidev
    /sys/devices/platform/ocp/48030000.spi/spi_master
    /sys/devices/platform/ocp/48030000.spi/spi_master/spi1
    /sys/devices/platform/ocp/48030000.spi/spi_master/spi1/spi1.0
    /sys/devices/platform/ocp/48030000.spi/spi_master/spi1/spi1.0/statistics/spi_sync_immediate
    /sys/devices/platform/ocp/48030000.spi/spi_master/spi1/spi1.0/statistics/spi_sync
    /sys/devices/platform/ocp/48030000.spi/spi_master/spi1/spi1.0/statistics/spi_async
    /sys/devices/platform/ocp/48030000.spi/spi_master/spi1/statistics/spi_sync_immediate
    /sys/devices/platform/ocp/48030000.spi/spi_master/spi1/statistics/spi_sync
    /sys/devices/platform/ocp/48030000.spi/spi_master/spi1/statistics/spi_async
    /sys/devices/platform/ocp/481a0000.spi/spi_master
    /sys/devices/platform/ocp/481a0000.spi/spi_master/spi2
    /sys/devices/platform/ocp/481a0000.spi/spi_master/spi2/spi2.0
    /sys/devices/platform/ocp/481a0000.spi/spi_master/spi2/spi2.0/statistics/spi_sync_immediate
    /sys/devices/platform/ocp/481a0000.spi/spi_master/spi2/spi2.0/statistics/spi_sync
    /sys/devices/platform/ocp/481a0000.spi/spi_master/spi2/spi2.0/statistics/spi_async
    /sys/devices/platform/ocp/481a0000.spi/spi_master/spi2/spi2.1
    /sys/devices/platform/ocp/481a0000.spi/spi_master/spi2/spi2.1/statistics/spi_sync_immediate
    /sys/devices/platform/ocp/481a0000.spi/spi_master/spi2/spi2.1/statistics/spi_sync
    /sys/devices/platform/ocp/481a0000.spi/spi_master/spi2/spi2.1/statistics/spi_async
    /sys/devices/platform/ocp/481a0000.spi/spi_master/spi2/statistics/spi_sync_immediate
    /sys/devices/platform/ocp/481a0000.spi/spi_master/spi2/statistics/spi_sync
    /sys/devices/platform/ocp/481a0000.spi/spi_master/spi2/statistics/spi_async
    /sys/class/spi_master
    /sys/class/spi_master/spi1
    /sys/class/spi_master/spi2
    /sys/class/spidev
    /sys/firmware/devicetree/base/ocp/spi@48030000
    /sys/firmware/devicetree/base/ocp/spi@48030000/SPI-FLASH@0
    /sys/firmware/devicetree/base/ocp/spi@48030000/SPI-FLASH@0/SPI-max 频率
    /sys/firmware/devicetree/base/ocp/spi@481a0000
    /sys/firmware/devicetree/base/ocp/spi@481a0000/spidev@0
    /sys/firmware/devicetree/base/ocp/spi@481a0000/spidev@0/SPI-max-frequency
    /sys/firmware/devicetree/base/ocp/spi@481a0000/spidev@1.
    /sys/firmware/devicetree/base/ocp/spi@481a0000/spidev@1/SPI-max-frequency
    /sys/firmware/devicetree/base/ocp/spinlock@480ca000
    /sys/module/spidev

    在给定文档的情况下、我似乎缺少/dev/spidev #.#和/sys/class/spidev/spidev #.#。

    我的印象是、在引导时调用 spidev_probe 是这样做的关键:有什么想法如何说服我的内核执行此操作?

    感谢你的帮助
    Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的  

    自从我上一篇帖子以来、我已经了解了几个方面:

    -避免在“兼容”属性中的逗号后面出现空格
    -您需要确保 spidev 驱动程序中有一个"兼容的"of _device 用于定义您的节点

    在这两种情况下、我找到了必要的/dev/spidev #.#和引导 而不发出警告

    感谢您的建议
    Richard

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我很高兴这个问题得到解决。 请验证您的答案、以便可以关闭该主题。
    对于新问题、您可以打开一个新主题。

    此致、
    玛格丽塔