В f()
измените %s
на %q
:
f() { read -rn 1 -p "Enter a character: " char && \
printf "\nYou entered '%q'\n" "$char"; }
f;f
Вывод, если пользователь вводит новую строку , затем ' Ctrl -D ':
Enter a character:
You entered ''''
Enter a character: ^D
You entered '$'\004''
Из `man printf:
%q ARGUMENT is printed in a format that can be reused as shell input,
escaping non-printable characters with the proposed POSIX $'' syntax.
Устройство, на котором находится ваш корневой раздел, — это /dev/mmcblk0
, то есть SD-карта. Модули для этих устройств обычно компилируются не в ядро, а во внешние модули, поэтому их необходимо включить в ваши initramfs (или initrd ), чтобы их можно было загрузить до того, как ваша корневая файловая система сможет быть смонтирована.
В Debian вы можете пересобрать файл initrd.img
с помощью команды update-initramfs
.
Но сначала вам нужно обновить конфигурацию, чтобы убедиться, что нужные вам модули будут включены в обновленные файлы initramfs.
Вы можете настроить это с помощью директивы MODULES
в /etc/initramfs-tools/initramfs.conf
, а также указать модули для загрузки в /etc/initramfs-tools/modules
и в /usr/share/initramfs-tools/modules.d/*
. См.man initramfs.conf
для более подробной информации.
Вам нужны модули mmc_core
и mmc_block
. Возможно, вам также понадобятся sdhci
и sdhci-pci
, так что рассмотрите возможность их перечисления.
Как только вы обновите свою конфигурацию, повторно создайте initramfs для версии ядра, которую вы пытаетесь загрузить, с помощью:
$ sudo update-initramfs -u -k 4.19.0-5-amd64
Или, чтобы восстановить файлы initramfs для всех ядер:
$ sudo update-initramfs -u -k all
Надеюсь, это все, что нужно ядру, чтобы найти корневой раздел при загрузке.