【问题标题】:Is the Common Clock Framework supported on Raspbian?Raspbian 是否支持通用时钟框架?
【发布时间】:2016-08-09 15:56:31
【问题描述】:

我正在尝试创建一个通用时钟框架设备驱动程序。我的测试环境是一个 Raspberry Pi 3,它连接到一个带有时钟芯片的评估板上(通过 I2C)。现在我只是想了解设备树并弄清楚如何修改它以包含现有时钟的驱动程序(即使该时钟实际上没有连接)。特别是,我计划只在设备树中添加一个 Si570 芯片,看看我是否可以查看日志以查看它是否在启动时正确加载(来自 drivers/clk/clk-si570.c)。

我已经成功构建并部署了一个新的 Raspbian 内核(4.4.16-v7)。 (顺便说一句,我对此非常非常陌生。这是我第一次编译内核)。现在我正在尝试使用“make menuconfig”来启用通用时钟框架,但我没有看到该选项。

从网上看,Raspbian 似乎支持 CCF。不过,我并不积极。我使用 / 在 menuconfig 中搜索 COMMON_CLK。它有一个“选择者”行,而不是取决于。那条线太长了,屏幕上放不下,所以它被切断了。它有像“X86_INTEL_QUARK [=n] && X86_32 [=n] && X86_EXTENDED_PLATFORM [=y] && X86_PLATFORM_DEVICES [=y]...”这样的子句,因为我在 PI/ARM 上,我不确定如何解释那条线。

此外,Raspbian 内核构建的 .config 文件中似乎甚至没有 CONFIG_COMMON_CLK=n; COMMON_CLK 不会出现在文件中的任何位置。

所以我真的有两个问题:

  1. Raspbian 是否完全支持 CCF?

  2. 我可以使用哪些其他技术来找出为什么驱动程序 > 通用时钟框架未显示在 menuconfig 中?

更新 通用时钟框架确实适用于 Raspberry Pi。在此处查看我的其他帖子:

Hello World for Common Clock Framework on Raspberry PI

【问题讨论】:

    标签: linux linux-kernel linux-device-driver


    【解决方案1】:

    答案

    首先,使用make menuconfig 是个好主意。不要担心行太长 - 只需使用键盘上的右箭头向右滚动即可。不过,您实际上并不需要它,因为最重要的一行是:

    Symbol: COMMON_CLK [=y]
    

    如果显示“=y”,则表示开启。如果您使用了bcm2709_defconfig(对于 RaspberryPi 3,您应该使用它),那么此选项默认设置为 y

    更多细节

    取决于 vs 选择者

    你把这两个弄混了。 Depends on,顾名思义,描述了此选项的依赖关系。这意味着必须满足所有这些依赖关系,否则根本无法设置此选项。 COMMON_CLK 没有任何依赖关系。

    另一方面,

    Selected by 表示如果满足条件,将自动选择此选项。在COMMON_CLK 的情况下,条件相当复杂,但它由许多 ORed 表达式组成。我们只需要找到我们感兴趣的表达方式。你从左到右,很快你会发现:

    ARCH_BCM2709 [=y] && <choice>
    

    (以及类似的ARCH_BCM2708 RPi0/1 变体)。所以这意味着如果设置了ARCH_BCM2709,我们的选项将被自动选择(=y 表示确实如此)。这里有一个奇怪的&amp;&amp; &lt;choice&gt;,它实际上是由于ARCH_BCM2709 在一个未命名的choice 块内而造成的伪影,这意味着只能选择一个架构。

    为什么在 menuconfig 中找不到常用时钟

    并非所有选项都在 menuconfig(或任何其他用于内核配置的“gui”)中可见。一个选项可能不可见的一个原因是它的依赖关系没有得到满足。另一个,COMMON_CLK 的情况是,该选项并非设计为用户可选择,因此它没有“提示值”。在这种情况下,只有满足“Selected by:”表达式才能选择该选项。

    X86_INTEL_QUARK 混淆

    您在此处粘贴的“选择者”行表明您没有正确使用“make menuconfig”。由于您正在尝试为非默认架构(即 X86)配置和构建内核,因此您应该使用 ARCH=arm 来表明这一点。就这样跑吧:

    make ARCH=arm menuconfig
    

    【讨论】:

    • 我确实使用了 bcm2709_defconfig,但 COMMON_CLK 设置为 n,而不是 y。 FWIW,我正在从 Ubuntu 进行交叉编译,我使用这一行来创建 .config:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig。我无法直接选择 COMMON_CLK 是有道理的,但我很困惑为什么设备驱动程序下的“通用时钟框架”选项不存在。
    • 啊,等等。我懂了。我不能只使用make menuconfig,我需要使用make ARCH=arm menuconfig。这是有道理的。
    • 确认!切换到make ARCH=arm menuconfig 后,我能够按预期看到设备驱动程序 > 通用时钟框架。现在 COMMON_CLK 信息看起来是正确的。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-06-05
    • 2017-02-01
    • 2017-02-11
    • 2021-09-08
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多