在 BeagleBone 上启用所有 GPIO 引脚,包括 eMMC 引脚
Enable all GPIO pins on BeagleBone, including the eMMC pins
我是 运行 BeagleBone Green 上的 Debian Jessie IOT 图像。
我喜欢使用最大的 GPIO,根据文档,这应该给我 65 个 GPIO。
GPIOs on BeagleBone Green
除与 eMMC 共享的引脚外,所有工作正常:
P8_3-6、P8_20-25
所以这可行:
config-pin -a P8_7 in+
这不起作用:
config-pin -a P8_22 in+
bash: /sys/devices/platform/ocp/ocp*P8_22_pinmux/state: No such file or directory
Cannot write pinmux file: /sys/devices/platform/ocp/ocp*P8_22_pinmux/state
一些信息......
root@beaglebone:~# cat /sys/devices/platform/bone_capemgr/slots
0: PF---- -1
1: PF---- -1
2: PF---- -1
3: PF---- -1
4: P-O-L- 0 Override Board Name,00A0,Override Manuf,cape-universala
cape-universala 应导出所有引脚
在 dmesg 中是....
[ 4.002843] pinctrl-single 44e10800.pinmux: pin 44e10814.0 already requested by 481d8000.mmc; cannot claim for ocp:P8_22_pinmux
[ 4.014528] pinctrl-single 44e10800.pinmux: pin-5 (ocp:P8_22_pinmux) status -22
[ 4.021901] pinctrl-single 44e10800.pinmux: could not request pin 5 (44e10814.0) from group pinmux_P8_22_default_pin on device pinctrl-single
[ 4.034756] bone-pinmux-helper ocp:P8_22_pinmux: Error applying setting, reverse things back
[ 4.089416] pinctrl-single 44e10800.pinmux: pin 44e10814.0 already requested by 481d8000.mmc; cannot claim for ocp:P8_22_pinmux
[ 4.101069] pinctrl-single 44e10800.pinmux: pin-5 (ocp:P8_22_pinmux) status -22
我似乎无法禁用 eMMC,这是 /boot/uEnv.txt
cmdline=coherent_pool=1M net.ifnames=0 quiet cape_enable=bone_capemgr.enable_partno=cape-universala cape_disable=bone_capemgr.disable_partno=BB-BONE-EMMC-2G
我正在从 SD 卡启动 BeagleBone,因此不必使用 eMMC。
怎么了?
这个目录,我相信你对这个过程很熟悉,/boot 里面有一个名为 uEnv.txt 的文件。
以前有一种调整设置的方法,它可能仍然适用。这个注释取消注释 eMMC 部分到 uEnv.txt 文件的应用程序应该允许您使用那些特定的引脚。
现在...请听。
我以前做过这个,一旦我取消注释,删除#标记,eMMC,就无法从我的 eMMC 启动。我知道您使用的是 SD 卡。我可以快速测试并回复您。
我只是想让你知道这是存在的,并且现在已经完成了更新的 Debian 映像中的 uboot 覆盖。所以,我很确定我们不会在特定的 Debian 发行版上使用设备树覆盖。我想这完全取决于您拥有的内核以及您在计算机上启动的映像。
嗯...我现在已经插入了我的机器,在我更改我的 /boot 目录文件 uEnv.txt 以取消对文件的 eMMC 部分的注释后,我将要测试 SD 卡支持。我在我的机器上使用 Linux beaglebone 4.4.91-ti-r136 以兼容 Adafruit_BBIO 的 PWM。
在该文件中,/boot 目录中的 uEnv.txt 文件,我不得不取消注释该部分:disable_uboot_overlay_emmc=1.
我要重启了。
好的...我能够通过取消注释 disable_uboot_overlay_emmc=1 部分到 uEnv.txt 文件来启动。
这应该打开引脚。我会很快测试它。
赛斯
P.S。 https://github.com/mvduin/bbb-pin-utils 是显示可用引脚的好工具。
This is the photo of my print out using that utility for the pins.
原来我一直在努力寻找...
这是使用所有可用 GPIO 引脚的方法:
root@beaglebone:~# more /boot/uEnv.txt | grep -v '#'
uname_r=4.4.91-ti-r133
dtb=am335x-boneblack-overlay.dtb
cmdline=coherent_pool=1M net.ifnames=0 quiet
就是这样!
最新图像,uname:4.9.78-ti-r94 并忽略所有覆盖内容
Oo 一个全新的图像,我在 Rail:P8 和 P9 上启用了所有 GPIO
只需更改 uEnv。请参阅#mco 评论。这些是唯一的变化
#uboot_overlay_addr2=/lib/firmware/<file2>.dtbo
#uboot_overlay_addr3=/lib/firmware/<file3>.dtbo
###
###Additional custom capes
#uboot_overlay_addr4=/lib/firmware/<file4>.dtbo
#uboot_overlay_addr5=/lib/firmware/<file5>.dtbo
#uboot_overlay_addr6=/lib/firmware/<file6>.dtbo
#uboot_overlay_addr7=/lib/firmware/<file7>.dtbo
###
###Custom Cape
#dtb_overlay=/lib/firmware/<file8>.dtbo
###
###Disable auto loading of virtual capes (emmc/video/wireless/adc)
disable_uboot_overlay_emmc=1
disable_uboot_overlay_video=1
disable_uboot_overlay_audio=1
#disable_uboot_overlay_wireless=1
#disable_uboot_overlay_adc=1
###
###PRUSS OPTIONS
###pru_rproc (4.4.x-ti kernel)
### mco-mco
# uboot_overlay_pru=/lib/firmware/AM335X-PRU-RPROC-4-4-TI-00A0.dtbo
###pru_uio (4.4.x-ti & mainline/bone kernel)
#uboot_overlay_pru=/lib/firmware/AM335X-PRU-UIO-00A0.dtbo
###
###Cape Universal Enable
enable_uboot_cape_universal=1
###
###Debug: disable uboot autoload of Cape
#disable_uboot_overlay_addr0=1
#disable_uboot_overlay_addr1=1
#disable_uboot_overlay_addr2=1
#disable_uboot_overlay_addr3=1
###
###U-Boot fdt tweaks... (60000 = 384KB)
#uboot_fdt_buffer=0x60000
###U-Boot Overlays###
cmdline=coherent_pool=1M net.ifnames=0 quiet omap_wdt.nowayout=0
#In the event of edid real failures, uncomment this next line:
#cmdline=coherent_pool=1M net.ifnames=0 quiet video=HDMI-A-1:1024x768@60e
##Example v3.8.x
#cape_disable=capemgr.disable_partno=
#cape_enable=capemgr.enable_partno=
##Example v4.1.x
#cape_disable=bone_capemgr.disable_partno=
#cape_enable=bone_capemgr.enable_partno=
##enable Generic eMMC Flasher:
##make sure, these tools are installed: dosfstools rsync
#cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3.sh
# mco-mco
### optargs=quiet capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN
### optargs=quiet capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN
#dtb=am335x-boneblack-emmc-overlay.dtb
然后我在启动时执行一个脚本到 'debunk' pwm 的系统文件,这些文件可以在重新启动之间更改。此脚本生成 /tmp/gpiossetup 并正确对齐 pwm 引脚。
#!/bin/bash
ERRORF=/tmp/pwmerrors.txt
PWMF=/tmp/pwmsetup
[[ -f $PWMF ]] && exit
echo > $PWMF
sync
pushd /sys/class/pwm
idx=0
pwms=(20000 20000 20000 20000 20000 20000 20000)
dutys=( 0 0 0 0 0 0 0)
expo=( 0 1 0 1 0 1 0)
right=(48302200 48302200 48300100 48300200 48300200 48304200 48304200)
for p in P9.14 P9.16 P9.42 P9.21 P9.22 P8.13 P8.19;do
config-pin $p pwm
for link in $(ls -l | awk '{print }');do
if [[ $link =~ ${right[$idx]} ]];then
#echo $link
#echo "sys folder for $p is $(echo $link | awk -F '/' '{print $NF}')"
sysfld=$(echo $link | awk -F '/' '{print $NF}')
pushd $sysfld
echo ">"$(pwd) exporting: ${expo[$idx]}"<"
ex=${expo[$idx]}
echo $ex > unexport
sync
echo $ex > export
if [[ -d "pwm$ex" ]];then
echo $(pwd) $p $ex >> $PWMF
echo ${pwms[$idx]} > "pwm$ex/period"
echo ${dutys[$idx]} > "pwm$ex/duty_cycle"
echo "1" > "pwm${ex}/enable"
#echo $(pwd)/pwm$ex/
else
echo "? cannot export ($pwd)" >> $ERRORF
fi
popd
fi
sleep 0.2
done
idx=$((idx+1))
sleep 0.2
done
popd
只需在 /boot/uEnv.txt 中取消对下面行的注释并重新启动。
#disable_uboot_overlay_emmc=1
至
disable_uboot_overlay_emmc=1
这将禁用 emmc 并释放分配给 emmc 的所有引脚。请注意,您有 运行 来自 SD 卡的 beaglebone。
我是 运行 BeagleBone Green 上的 Debian Jessie IOT 图像。 我喜欢使用最大的 GPIO,根据文档,这应该给我 65 个 GPIO。 GPIOs on BeagleBone Green
除与 eMMC 共享的引脚外,所有工作正常: P8_3-6、P8_20-25
所以这可行:
config-pin -a P8_7 in+
这不起作用:
config-pin -a P8_22 in+
bash: /sys/devices/platform/ocp/ocp*P8_22_pinmux/state: No such file or directory
Cannot write pinmux file: /sys/devices/platform/ocp/ocp*P8_22_pinmux/state
一些信息......
root@beaglebone:~# cat /sys/devices/platform/bone_capemgr/slots
0: PF---- -1
1: PF---- -1
2: PF---- -1
3: PF---- -1
4: P-O-L- 0 Override Board Name,00A0,Override Manuf,cape-universala
cape-universala 应导出所有引脚 在 dmesg 中是....
[ 4.002843] pinctrl-single 44e10800.pinmux: pin 44e10814.0 already requested by 481d8000.mmc; cannot claim for ocp:P8_22_pinmux
[ 4.014528] pinctrl-single 44e10800.pinmux: pin-5 (ocp:P8_22_pinmux) status -22
[ 4.021901] pinctrl-single 44e10800.pinmux: could not request pin 5 (44e10814.0) from group pinmux_P8_22_default_pin on device pinctrl-single
[ 4.034756] bone-pinmux-helper ocp:P8_22_pinmux: Error applying setting, reverse things back
[ 4.089416] pinctrl-single 44e10800.pinmux: pin 44e10814.0 already requested by 481d8000.mmc; cannot claim for ocp:P8_22_pinmux
[ 4.101069] pinctrl-single 44e10800.pinmux: pin-5 (ocp:P8_22_pinmux) status -22
我似乎无法禁用 eMMC,这是 /boot/uEnv.txt
cmdline=coherent_pool=1M net.ifnames=0 quiet cape_enable=bone_capemgr.enable_partno=cape-universala cape_disable=bone_capemgr.disable_partno=BB-BONE-EMMC-2G
我正在从 SD 卡启动 BeagleBone,因此不必使用 eMMC。
怎么了?
这个目录,我相信你对这个过程很熟悉,/boot 里面有一个名为 uEnv.txt 的文件。
以前有一种调整设置的方法,它可能仍然适用。这个注释取消注释 eMMC 部分到 uEnv.txt 文件的应用程序应该允许您使用那些特定的引脚。
现在...请听。
我以前做过这个,一旦我取消注释,删除#标记,eMMC,就无法从我的 eMMC 启动。我知道您使用的是 SD 卡。我可以快速测试并回复您。
我只是想让你知道这是存在的,并且现在已经完成了更新的 Debian 映像中的 uboot 覆盖。所以,我很确定我们不会在特定的 Debian 发行版上使用设备树覆盖。我想这完全取决于您拥有的内核以及您在计算机上启动的映像。
嗯...我现在已经插入了我的机器,在我更改我的 /boot 目录文件 uEnv.txt 以取消对文件的 eMMC 部分的注释后,我将要测试 SD 卡支持。我在我的机器上使用 Linux beaglebone 4.4.91-ti-r136 以兼容 Adafruit_BBIO 的 PWM。
在该文件中,/boot 目录中的 uEnv.txt 文件,我不得不取消注释该部分:disable_uboot_overlay_emmc=1.
我要重启了。
好的...我能够通过取消注释 disable_uboot_overlay_emmc=1 部分到 uEnv.txt 文件来启动。
这应该打开引脚。我会很快测试它。
赛斯
P.S。 https://github.com/mvduin/bbb-pin-utils 是显示可用引脚的好工具。
This is the photo of my print out using that utility for the pins.
原来我一直在努力寻找... 这是使用所有可用 GPIO 引脚的方法:
root@beaglebone:~# more /boot/uEnv.txt | grep -v '#'
uname_r=4.4.91-ti-r133
dtb=am335x-boneblack-overlay.dtb
cmdline=coherent_pool=1M net.ifnames=0 quiet
就是这样!
最新图像,uname:4.9.78-ti-r94 并忽略所有覆盖内容
Oo 一个全新的图像,我在 Rail:P8 和 P9 上启用了所有 GPIO 只需更改 uEnv。请参阅#mco 评论。这些是唯一的变化
#uboot_overlay_addr2=/lib/firmware/<file2>.dtbo
#uboot_overlay_addr3=/lib/firmware/<file3>.dtbo
###
###Additional custom capes
#uboot_overlay_addr4=/lib/firmware/<file4>.dtbo
#uboot_overlay_addr5=/lib/firmware/<file5>.dtbo
#uboot_overlay_addr6=/lib/firmware/<file6>.dtbo
#uboot_overlay_addr7=/lib/firmware/<file7>.dtbo
###
###Custom Cape
#dtb_overlay=/lib/firmware/<file8>.dtbo
###
###Disable auto loading of virtual capes (emmc/video/wireless/adc)
disable_uboot_overlay_emmc=1
disable_uboot_overlay_video=1
disable_uboot_overlay_audio=1
#disable_uboot_overlay_wireless=1
#disable_uboot_overlay_adc=1
###
###PRUSS OPTIONS
###pru_rproc (4.4.x-ti kernel)
### mco-mco
# uboot_overlay_pru=/lib/firmware/AM335X-PRU-RPROC-4-4-TI-00A0.dtbo
###pru_uio (4.4.x-ti & mainline/bone kernel)
#uboot_overlay_pru=/lib/firmware/AM335X-PRU-UIO-00A0.dtbo
###
###Cape Universal Enable
enable_uboot_cape_universal=1
###
###Debug: disable uboot autoload of Cape
#disable_uboot_overlay_addr0=1
#disable_uboot_overlay_addr1=1
#disable_uboot_overlay_addr2=1
#disable_uboot_overlay_addr3=1
###
###U-Boot fdt tweaks... (60000 = 384KB)
#uboot_fdt_buffer=0x60000
###U-Boot Overlays###
cmdline=coherent_pool=1M net.ifnames=0 quiet omap_wdt.nowayout=0
#In the event of edid real failures, uncomment this next line:
#cmdline=coherent_pool=1M net.ifnames=0 quiet video=HDMI-A-1:1024x768@60e
##Example v3.8.x
#cape_disable=capemgr.disable_partno=
#cape_enable=capemgr.enable_partno=
##Example v4.1.x
#cape_disable=bone_capemgr.disable_partno=
#cape_enable=bone_capemgr.enable_partno=
##enable Generic eMMC Flasher:
##make sure, these tools are installed: dosfstools rsync
#cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3.sh
# mco-mco
### optargs=quiet capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN
### optargs=quiet capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN
#dtb=am335x-boneblack-emmc-overlay.dtb
然后我在启动时执行一个脚本到 'debunk' pwm 的系统文件,这些文件可以在重新启动之间更改。此脚本生成 /tmp/gpiossetup 并正确对齐 pwm 引脚。
#!/bin/bash
ERRORF=/tmp/pwmerrors.txt
PWMF=/tmp/pwmsetup
[[ -f $PWMF ]] && exit
echo > $PWMF
sync
pushd /sys/class/pwm
idx=0
pwms=(20000 20000 20000 20000 20000 20000 20000)
dutys=( 0 0 0 0 0 0 0)
expo=( 0 1 0 1 0 1 0)
right=(48302200 48302200 48300100 48300200 48300200 48304200 48304200)
for p in P9.14 P9.16 P9.42 P9.21 P9.22 P8.13 P8.19;do
config-pin $p pwm
for link in $(ls -l | awk '{print }');do
if [[ $link =~ ${right[$idx]} ]];then
#echo $link
#echo "sys folder for $p is $(echo $link | awk -F '/' '{print $NF}')"
sysfld=$(echo $link | awk -F '/' '{print $NF}')
pushd $sysfld
echo ">"$(pwd) exporting: ${expo[$idx]}"<"
ex=${expo[$idx]}
echo $ex > unexport
sync
echo $ex > export
if [[ -d "pwm$ex" ]];then
echo $(pwd) $p $ex >> $PWMF
echo ${pwms[$idx]} > "pwm$ex/period"
echo ${dutys[$idx]} > "pwm$ex/duty_cycle"
echo "1" > "pwm${ex}/enable"
#echo $(pwd)/pwm$ex/
else
echo "? cannot export ($pwd)" >> $ERRORF
fi
popd
fi
sleep 0.2
done
idx=$((idx+1))
sleep 0.2
done
popd
只需在 /boot/uEnv.txt 中取消对下面行的注释并重新启动。
#disable_uboot_overlay_emmc=1
至
disable_uboot_overlay_emmc=1
这将禁用 emmc 并释放分配给 emmc 的所有引脚。请注意,您有 运行 来自 SD 卡的 beaglebone。