Я экспериментировал с модулем ядра g_mass_storage.
Сначала я попробовал загрузить его, поместив его в /etc/modules и опции в /etc/modprobe.d/file.conf
Это сработало, но когда я подключил устройство к компьютеру, хранилище массовых файлов было только для чтения - не то, что я искал.
Я решил, что это потому, что при загрузке модуля корневая файловая система монтируется как доступная только для чтения, а не для чтения-записи.
Это проблема, потому что драйвер ядра пытается получить файловый хэндл для чтения-записи для своего резервного хранилища, и если он не может договориться о таком хэндле rw, он возвращается к read-only.
Единственное решение, которое мне приходит в голову, - это перенести загрузку модуля ядра на более поздний этап загрузки.
Я перенес инициализацию модуля в /etc/rc.local с помощью modprobe, и это сработало как при чтении, так и при записи - но мне кажется, что это немного хак, чтобы загрузить модуль там.
Есть ли рекомендуемое место для загрузки модулей ядра, которым нужен rw доступ к файлу?
[вероятно, не идеальное] решение этой проблемы заключалось в подключении к службе systemd "systemd-remount-fs.service", которая является перемонтированием файловая система для чтения-записи.
Это означает, что модуль будет загружен как можно раньше, в то время как он все еще загружается после того, как файловая система перейдет в режим чтения и записи.
Мой пример конфигурационного файла systemd выглядит следующим образом:
[Unit]
Description=Starts kernel modules for USB OTG
After=systemd-remount-fs.service
DefaultDependencies=false
[Service]
Type=simple
ExecStart=/home/pi/programs/startmod.sh
WorkingDirectory=/home/pi/programs/
[Install]
WantedBy=local-fs.target
Это работает, хотя и немного хакерски.