问题: 客户的3399 的板子上,烧写ubuntu 发现, 没有热插拔。
测试情况: 系统在第一次烧写完成之后,是有热插拔的,但是第二次启动就没有了。
还有一个情况,就是 ,如果我一开始 上电的时候就不接上 HDMI 的话,等系统启动之后,再 街上HDMI , 那么 这时候 就有了 热插拔了。很奇怪。
开始我的调试:
先来看看网上的资料,这个资料给了我很多的启发。
firefly@firefly:/etc/udev/rules.d$ cat /usr/local/bin/hdmi-toggle#!/usr/bin/env bashUSER="$(who | grep :0\) | cut -f 1 -d ' ')"export XAUTHORITY=/home/$USER/.Xauthorityexport DISPLAY=:0########### Settings ############ Use 'xrandr' to find theseDP="DP-1"VGA="VGA-1"HDMI="HDMI-1"INTERNAL_DISPLAY="LVDS-1"# Check /sys/class/drm for the exact locationDP_STATUS="$(cat /sys/class/drm/card0-DP-1/status)"VGA_STATUS="$(cat /sys/class/drm/card0-VGA-1/status)"HDMI_STATUS="$(cat /sys/class/drm/card0-HDMI-A-1/status)"# Do no change!EXTERNAL_DISPLAY=""# Check to see if the external display is connectedif [ "${DP_STATUS}" = connected ]; thenEXTERNAL_DISPLAY=$DPfiif [ "${VGA_STATUS}" = connected ]; thenEXTERNAL_DISPLAY=$VGAfiif [ "${HDMI_STATUS}" = connected ]; thenEXTERNAL_DISPLAY=$HDMIfi# The external display is connectedif [ "$EXTERNAL_DISPLAY" != "" ]; then# Set the display settingsxrandrxrandr --output $EXTERNAL_DISPLAY --autoelse# Restore to single displayxrandr --output $EXTERNAL_DISPLAY --offfiexit 0
------------------------------------------------------------------------------------------------------------------
什么是 lightdm , startx , xrandr
这个我单独写一篇文章, 不混在一起。
------------------------------------------------------------------------------------------------------------
什么是 systemctl , systemd , 自启动脚本。
这个我单独写一篇文章, 不混在一起。
------------------------------------------------------------------------------------------------------
我自己对于硬件的测试。
这里涉及到 HPD 这个引脚。
这个脚 ,当我插入HDMI 的时候, 为5V,当我 拔掉HDMI 的时候为0V。
无论 热插拔 是正常,还是不正常,都是这个情况。
所以可能跟硬件是没有关系的。
所以我去看一下,源码中的 Linux 的设备树吧。
这里就没有热插拔 什么事儿。可能3399 本身就不支持热插拔。
也去看一下, uboot 的设备树吧。
uboot 里面的设备树 也是一样的。
---------------------------------------------------------------------------------------------------------------
我自己对于永远 默认插上HDMI 的源码修改。
我参考的是网上的资料
我就是这么改的。
-----------------------------------------------------------------------------------------------------------------------
我自己的调试。
我尝试 重启一下, lightdm 发现竟然有了热插拔。
情况是这样的,
已经没有热插拔了。
我重启 lightdm , 屏幕点亮。
然后继续插拔接口, 发现有了热插拔。
然后断电重启,有没有了热插拔。
那问题就简单了,直接写个 自启动脚本那就可以了。
自启动脚本是我从网上抄的。
无论我 插上HDMI ,还是 拔出HDMI 永远都是 connected .
我本想使用xrandr 查看一下 系统的屏幕, 但是系统有这个命令,但是 无法执行。
这是我的自启动服务。
[Unit]
After=multi-user.target[Service]
Type=oneshot
User=root
ExecStart=/usr/bin/openttyTHS1.sh[Install]
WantedBy=multi-user.target
这是那个脚本。
为什么这里有个 sleep 函数呢?
我发现如果没有这个函数的话,即便是 启动了,服务, 也不会有 重启桌面的这个操作。
所以干脆延时,知道系统完完全全的启动,在启动这个服务。
这样 问题就解决了。