我正在寻找使用设备树支持修改我的覆盆子pi的GPIO驱动程序。 首先有2个文件:
并且对于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。
并且对于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支持制作了一个驱动程序。因此,管理动态设备节点创建。 我没有使用平台模型。
答案 0 :(得分:3)
1。 从互联网上的参考资料中可以理解reg = 0x7e200000但是什么是0xb4。 reg =&lt; 0x7e200000 0xb4&gt;
这里0xb4指的是寄存器的长度。 &#34; reg:为设备设置的寄存器的地址和长度&#34;
您可以查看此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 /&#34; bcm2835.dtsi&#34;
这意味着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