Короче говоря нужно написать драйвер(модуль ядра) для прозрачной расшифровки для линукса секторов винта, то есть нужно чтобы вызовы с юзерспейса приходили в мой драйвер и пере направлялись в драйвер саты, откуда читался бы сектор и вертался ко мне, я его расшифровывал и отправлял в юзерспейс. Устройство будет регистрироваться отдельно и не будет никаким образом мешать жизни основного драйвера. С написанием драйверов под линух знаком довольно сильно, но как решить эту проблему идей пока нет. Всем заранее спасибо за помощь!
Не совсем подходит, точнее вообще не подходит. dmcrypt реализация тоже не подходит, открыть устройство через sys_open() не подходит в рамках GPL. Есть LibATA, но в ней черт ногу сломает.
Эта фраза мне непонятна. GPL запрещает тебе использовать sys_open? Это как? Да и мне непонятно, при чём тут sys_open? Юзерспейс, в общем-то, ничего про sys_open знать не будет. Он будет вызывать open из libc, и работать с /dev/loop0, даже не подозревая, сколько драйверов устройств задействовано в чтении сектора. Я не понимаю зачем городить криптор не надстройкой над блочным устройством диска, а на более низком уровне. Тебе ж придётся писать не только функционал crypto-loop, но и функционал драйвера сата диска. Не забывая при этом про кеширование и прочую лабуду. А если, вдруг, надо будет сменить sata на usb или ещё что-нибудь? Писать ещё один драйвер? Я бы понял, если бы ты пытался встроить криптор в более высокий уровень -- в драйвер фс. Для надёжности хранения данных полезно криптовать не диск целиком, а отдельные файлы. Но пихать его ниже, по-моему, не совсем умно. Короче, объясни проблему подробно. Мне кажется, ты ищешь себе геморрой, там где его быть не должно.
ГПЛ не дает импортировать все функции в не открытые драйвера. Дается только основное апи, типа io_remap_pfn_range(), и модуль sys туда никаким образом не вписывается. Вкратце проблема выглядит следующим образом: есть винчестер, закриптованый злоалгоритмом, который мне не интересен и не нужен, на котором лежит файловая система с нужным софтом и тд. Линукс должен примонтировать етот раздел как корневой без изменения основных утилит типа mount прозрачно для себя. Для этого решено оставить устройство /dev/sda как есть и зарегистрировать сверху него /dev/sdacr, который будет по сути повторять sda, только выдавать операции чтения с уже росскриптоваными данными.
Через юзерспейс? пишется опенсурс драйвер блочного устройства, который выполняя свой read будет обращатся за данными к демону в юзерспейсе. Что там будет делать демон, этот драйвер даже не будет подозревать. А демон на самом деле будет выполнять read на /dev/sda и раскриптовывать. Уж из юзерспейса-то можно не нарушая гпл использовать open/read/write/lseek/close?