Доброго времени суток всем!
Я в Линуксе совсем еще зеленый, а взялся ковырять довольно скольскую тему run-from-RAM - попутно вскрывая для себя все новые и новые пласты знания об устройстве системы с самого низа.
Сейчас немного завяз в устройствах (в разрезе моей задачи - на собранных разными способами initramfs то виден, то не виден оптический привод).
В ходе ковыряния темы подключения устройств, вроде, нащупал как все это происходит, но хотел бы услышать мнения Просветленнейших - правильно ли я понимаю и ничего ли не упустил.
Итак. Когда мы имеем устройство, физически подключенное к какому то слоту в ПК, его сперва распознает (сам факт подключения) либо ядро как таковое, либо один из его модулей. Факт подключения можно выяснить одной из многочисленных команд типа lspci, hw, lsusb, hwinfo и иже с ними. Если поддержка устройства есть прямо в ядре - мы его сразу должны увидеть в выдаче, если в выдаче его нет - нужно выяснять, каким модулем оно распознается - для этого есть инструментарий lsmod (можно запустить его на системе, в которой устройство успешно работает и посмотреть - эвристически подобрав название, разумеется - название его модуля), а также modinfo, insmod и modprobe.
Соответственно, когда мы нашли недостающий модуль - тупо можно скопировать его в каталог /lib/modules (или в /lib64/modules? Как правильно, если система amd64?), а затем загрузить любой из двух команд:
modprobe ИМЯМОДУЛЯ
или
insmod ПУТЬКМОДУЛЮ
Любой модуль должен строго соответствовать своему ядру, поэтому при трансплантации модулей из системы в систему это надо учитывать))
Когда устройство появляется в выдаче, необходимо сопоставить ему соответствующий файл в вФС /dev - для этого существует некий udev - он переводит работу с устройствами на более высокий уровень абстракции, создавая файлы устройств на основе информации о физически подключенном оборудовании, которую поставляет ему ядро/модули ядра.
Чтобы вызвать udev мы при старте системы должны смонтировать вФС типа devtmpfs:
mount -t devtmpfs udev /dev
А если при ее монтировании нужный для конкретного устройства модуль ядра не был загружен - то устройство придется создавать в ручную - по сути руками делать то, что udev делает как скрипт:
mknod /dev/КАКНАЗОВЕМФАЙЛУСТРОЙСТВА b или с ОСН.НОМЕР ВТ.НОМЕР
Ну вот как то так я все это понял. Рад буду замечаниям и поправкам.