【问题标题】:BCM2835 gpio device tree raspberry piBCM2835 gpio 设备树树莓派
【发布时间】:2014-10-18 10:56:50
【问题描述】:

我正在寻找使用设备树支持修改我的树莓派 GPIO 驱动程序。 首先有 2 个文件:

  1. 我读取了 /arc/arm/boot/dts/bcm2835.dts 中的设备树文件

对于 gpio,存在以下部分:

gpio:gpio {

                   compatible = "brcm,bcm2835-gpio";
                   reg = <0x7e200000 0xb4>;
                   /*
                    * The GPIO IP block is designed for 3 banks of GPIOs.
                     * Each bank has a GPIO interrupt for itself.
                     * There is an overall "any bank" interrupt.
                     * In order, these are GIC interrupts 17, 18, 19, 20.
                     * Since the BCM2835 only has 2 banks, the 2nd bank
                     * interrupt output appears to be mirrored onto the
                     * 3rd bank's interrupt signal.
                     * So, a bank0 interrupt shows up on 17, 20, and
                     * a bank1 interrupt shows up on 18, 19, 20!
                     */
                    interrupts = <2 17>, <2 18>, <2 19>, <2 20>;
                    gpio-controller;
                    #gpio-cells = <2>;
                    interrupt-controller;
                    #interrupt-cells = <2>;
            };

从网上的参考资料 reg = 0x7e200000 理解为 0xb4 是什么。

  1. 我读取了 /arch/arm/boot/dts/bcm2835-rpi-b.dts 中的设备树文件

对于 gpio,存在以下部分:

/ {
    compatible = "raspberrypi,model-b", "brcm,bcm2835";
    model = "Raspberry Pi Model B";

    memory {
            reg = <0 0x10000000>;
    };

    leds {
            compatible = "gpio-leds";

            act {
                    label = "ACT";
                    gpios = <&gpio 16 1>;
                    default-state = "keep";
                    linux,default-trigger = "heartbeat";
            };
    };
};

&gpio {
    pinctrl-names = "default";
    pinctrl-0 = <&alt0 &alt3>;

    alt0: alt0 {
            brcm,pins = <0 1 2 3 4 5 6 7 8 9 10 11 14 15 40 45>;
            brcm,function = <4>; /* alt0 */
    };

    alt3: alt3 {
            brcm,pins = <48 49 50 51 52 53>;
            brcm,function = <7>; /* alt3 */
    };
};

那么,我应该使用哪个 dts 文件,以及如何读取和解释这些键值对,例如:什么是 pinctrl。以及这种方法对我的代码有何影响。

我知道我在这里问了很多东西,但这是新的并且看起来很有趣,我想使用这种方法修改我的驱动程序。请帮忙。

PS:我制作了一个使用标准 udev 支持的驱动程序。所以动态设备节点的创建是被管理的。 我没有使用平台模型。

【问题讨论】:

    标签: linux-kernel raspberry-pi linux-device-driver gpio device-tree


    【解决方案1】:

    1。 从网上的参考资料 reg = 0x7e200000 理解为 0xb4 是什么。 reg =

    这里的0xb4指的是寄存器的长度。 "reg : 为设备设置的寄存器的地址和长度"

    您可能可以查看此 pdf 以获得更好的信息 http://events.linuxfoundation.org/sites/events/files/slides/petazzoni-device-tree-dummies.pdf

    2。 那么,我应该使用哪一个 dts 文件,以及如何读取和解释那些键值对,

    我将把问题分成两部分。读取键值对:

    每个设备树条目都有一个关联的绑定文件,描述您如何读取键值对。 例如 http://lxr.free-electrons.com/source/Documentation/devicetree/bindings/arm/bcm/brcm,bcm11351-cpu-method.txt 。可以得到相应的详细信息。

    关于我应该使用哪些 dts 文件:

    现在,如果您注意到 bcm2835.dtsi。不是 dts 文件,而是 dtsi 文件。 http://lxr.free-electrons.com/source/arch/arm/boot/dts/bcm2835.dtsi

    dtsi 文件可以包含到其他 dts 或 dtsi 文件中,就像我们包含其他库(如 conio.h)一样。或我们的 C 代码中的 stdio.h。

    这里的 bcm2835-rpi-b.dts 是一个 dts 文件,如果你注意到这里的文件 http://lxr.free-electrons.com/source/arch/arm/boot/dts/bcm2835-rpi-b.dts

    它包括以下内容:

    /include/ "bcm2835.dtsi"

    这意味着 bcm2835.dtsi 中的所有 dt 条目都被导入到 bcm2835-rpi-b.dts 中。 您可以选择保留节点原样或修改 rpi-b-dts 中的属性,但 dts 文件中的最终条目将反映在 dtb 中。

    3。 例如:什么是 pinctrl。以及这种方法对我的代码有何影响。

    Pinctrl 是内核中提供的用于访问 PIN 的框架,这里是 gpio。您可能可以查看使用的文档 https://www.kernel.org/doc/Documentation/pinctrl.txt

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多