Хм. Если я что-то не упустил, похоже, что контроллер инициализируется дважды:
[ 5.195136] xhci_hcd 0000:05:00.0: xHCI Host Controller
[ 5.195145] xhci_hcd 0000:05:00.0: new USB bus registered, assigned bus number 3
[ 5.202621] xhci_hcd 0000:05:00.0: hcc params 0x014051cf hci version 0x100 quirks 0x00000090
....
[ 5.203568] xhci_hcd 0000:05:00.0: xHCI Host Controller
[ 5.203572] xhci_hcd 0000:05:00.0: new USB bus registered, assigned bus number 4
[ 5.204014] usb usb4: We don't know the algorithms for LPM for this host, disabling LPM.
В Информации о продукте Renesas говорится, что, несмотря на наличие двух портов для каждого устаревшего корневого концентратора USB 3.0/USB 2.0, существует только один корневой концентратор, поэтому я не понимаю, что происходит.
Если два экземпляра xhci_hcd
пытаются управлять картой одновременно, то, конечно, это пойдет не так.
Следующее, что я должен сделать, это просмотреть исходный код xhci_hcd
и перекомпилировать его с поддержкой отладки. Для этого требуется опыт программирования, поэтому, если вы не знаете, как это сделать, в качестве альтернативы отправьте отчет об ошибке для любого средства отслеживания ошибок ядра xhci_hcd
, даже если разработчики просто скажут вам, что я глуп, а повторная инициализация — это нормально.
Редактировать
При просмотре отладочных сообщений это выглядит очень странно:
[ 2.423207] xhci_hcd 0000:05:00.0: Finished xhci_run for USB2 roothub
[ 2.423420] xhci_hcd 0000:05:00.0: Endpoint 0x81 ep reset callback called
[ 2.423547] xhci_hcd 0000:05:00.0: set port power, actual port 0 status = 0x2a0
[ 2.423563] xhci_hcd 0000:05:00.0: set port power, actual port 1 status = 0x2a0
[ 2.423613] xhci_hcd 0000:05:00.0: xHCI Host Controller
[ 2.423616] xhci_hcd 0000:05:00.0: new USB bus registered, assigned bus number 2
[ 2.423621] xhci_hcd 0000:05:00.0: // Turn on HC, cmd = 0x5.
[ 2.426468] xhci_hcd 0000:05:00.0: Finished xhci_run for USB3 roothub
[ 2.426630] xhci_hcd 0000:05:00.0: Endpoint 0x81 ep reset callback called
[ 2.426798] xhci_hcd 0000:05:00.0: set port power, actual port 0 status = 0x2a0
[ 2.426819] xhci_hcd 0000:05:00.0: set port power, actual port 1 status = 0x2a0
[ 2.426893] xhci_hcd 0000:05:00.0: remove, state 1
[ 2.427674] xhci_hcd 0000:05:00.0: USB bus 2 deregistered
[ 2.427731] xhci_hcd 0000:05:00.0: remove, state 1
Итак, после инициализации всего и на USB 2.0, и на корневом концентраторе USB 3.0 вызывается сброс. Они удаляются, а затем драйвер снова пытается инициализировать все это (, что является второй инициализацией, которую я видел ). Только на этот раз сильно не получается.
В исходном коде ядра функция xhci_endpoint_reset
имеет комментарии вроде «Возможно, нам потребуется реализовать config ep cmd в xhci 4.8.1» и «Пока просто напечатайте отладку, чтобы следить за ситуацией».
Так что это определенно дело разработчиков ядра. Обязательно дополните отчет об ошибке выводом отладки.
Проблема в том, что вы смешиваете то, для чего используете стандартный ввод, предоставляя программу для выполнения на удаленной машине и ввод для этой программы.
Как написано, происходит следующее.
echo -e "Enter the case you want to echo\n 1.1 a \n 2.1 b"
со стандартного ввода и выполняет эхо. read option
со стандартного ввода и выполняет чтение. read
считывает case "\$option" in
со стандартного ввода и устанавливает для этого параметра опцию. 1)
из стандартного ввода и выдает синтаксическую ошибку. Здесь, в дополнение к ответу @icarus, вы можете написать это:
#!/bin/sh -
if [ "$#" -eq 0 ]; then
printf >&2 'Enter the raspberry ip address you want to connect to: '
IFS= read -r ip
set -- "$ip"
fi
for ip do
printf >&2 '%s\n' "Connecting to $ip"
SSHPASS=the@Donut sshpass -e \
ssh -oStrictHostKeyChecking=no "pi@$ip" "$(cat << 'EOF'
printf >&2 '%s\n' 'Enter the case you want to echo' \
' 1.1 a' \
' 2.1 b'
IFS= read -r option
case "$option" in
(1) echo a;;
(2) echo b;;
esac
EOF
)"
done
То есть:
echo
(echo -n
/ echo -e
не являются стандартным синтаксисом sh+utilities)read
обработки сообщения -по умолчанию и считывайте строку ввода в необработанном виде. actual_output=$(that-script)
, например ). ssh
вместо стандартного ввода, так что скрипт по-прежнему может запрашивать пользователя через стандартный ввод. cat
, который передается здесь -документу, чей терминатор(EOF
)указан в кавычках, поэтому в этом документе не выполняется расширение. Вышеприведенное предполагает, что оболочка входа пользователя pi
в $ip
похожа на POSIX -sh -.