为一般性帮助我的问题提前道歉。我试着研究这个问题:
我的目标是编写一个简单的.dts文件(使用DT 1.4.4编译到.dtbo ),以便在运行 Debian 10.3 的Beaglebone上配置一个GPIO输出,我打算将.dtbo放在/lib/固件中,然后在/ boot /uEnv.txt中指定它。
我了解.dts文件的某些部分,并尝试过对/lib/ .dtbo /中存在的.dtbo文件进行反编译以获得指导,但它们都不是一个简单的GPIO输出示例。很多在线资源涉及到制作和制作安装,但我相信DT现在应该能够处理它了,对吗?
我能够编译以下内容,但有问题:
/* dtc -O dtb -o BB-P8_13-LED.dtbo -b 0 -@ BB-P8_13-LED-00A0.dts */
/dts-v1/;
/plugin/;
compatible = "ti,beaglebone-black";
/* identification */
part-number = "BB-P8_13-LED";
version = "00A0";
/* state the resources this cape uses */
exclusive-use =
/* the pin header uses */
"P8.13", /* GPIO_23 */
/* the hardware ip uses */
"gpio23";
fragment@0 {
target = <&am33xx_pinmux>;
__overlay__ {
bb_gpio23_pin: pinmux_bb_gpio23_pin {
pinctrl-single,pins = < 0x024 0x07 >; /*P8_13 GPIO23 MODE7*/
fragment@1 {
target = <&gpio23>;
__overlay__ {
leds {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&bb_gpio23_pin>;
compatible = "gpio-leds";
P8_13 {
label = "P8_13";
default-state = "on";
};
问:为什么在/boot/uEnv.txt中加载这个.dtbo会导致所有其他gpio从/sys/class/gpio/消失?我认为fragment0是为了排除一个gpio,而不是所有的gpio。
###Additional custom capes
uboot_overlay_addr4=/lib/firmware/BB-P8_13-LED-00A0.dtbo
问:用于控制GPIO的文件(用于测试)在哪里,或者更确切地说,我可以在我的.dts文件中添加什么,以便gpio23仍然出现在/sys/class/gpio或甚至/sys/class/leds中?最终,我想要能够控制这个GPIO与节点红色。
问:我是否需要与我对P8.13和P8_13的使用保持一致?我想我混淆了用make编译的.dts文件中使用的术语。
问:我认为我的片段@1 P8_13子节点缺少一些东西来指定gpio库和活动的高/低设置。类似于"gpios =<&gpio 3 19 GPIO_ACTIVE_HIGH>;“,我可以在哪里研究GPIO23在哪一家银行?那句话中的“19”是什么意思?
我不想偷懒,只是厌倦了转动轮胎/一无所获。
德里克·莫莉博士做得很好,我在他的回购中用了这个例子。下面是他为解释如何在引导时使用设备树覆盖配置GPIO而创建的一个页面: http://derekmolloy.ie/beaglebone/beaglebone-gpio-programming-on-arm-embedded-linux/
尽管他的解决方案是内核3.8,但我还是能够在4.19上编译以下内容
/* dtc -O dtb -o BB-P8_13-LED-00A0.dtbo -b 0 -@ BB-P8_13-LED-00A0.dts */
/dts-v1/;
/plugin/;
compatible = "ti,beaglebone-black";
part-number = "BB-P8_13-LED";
version = "00A0";
fragment@0 {
target = <&am33xx_pinmux>;
__overlay__ {
pinctrl_test: BB-P8_13-LED {
pinctrl-single,pins = <
0x024 0x27 /* P8_13 9 PULLUP ENABLED OUTPUT MODE7 - The LED Output */
fragment@1 {
target = <&ocp>;
__overlay__ {
test_helper: helper {
compatible = "bone-pinmux-helper";
pinctrl-names = "default";