Первый шаг — определить, какие параметры конфигурации необходимо установить для построения модуля. Я использую
make menuconfig
для этого; /
, за которым следует нужный параметр конфигурации, подскажет, где его найти и каковы его зависимости. Для ECHAINIV
вам нужно включить CRYPTO
, а затем включитьECHAINIV
(как модуль, поскольку это то, что вам нужно — в make menuconfig
запись должна показывать <M>
, а не <*>
).
Чтобы собрать модуль, найдите каталог, содержащий соответствующий исходный код:
find. -name echainiv\*
Код находится в crypto
, поэтому
make crypto/echainiv.ko
(из каталога верхнего уровня -)создаст для вас модуль.
Чтобы установить модуль, предполагая, что вы используете целевое ядро, запустите
sudo mkdir -p /lib/modules/$(uname -r)/kernel/crypto
sudo cp -i crypto/echainiv.ko /lib/modules/$(uname -r)/kernel/crypto
Если вас интересует, какая файловая система находится на sdb1
, вы должны использовать USAGE
, чтобы сначала проверить, является ли она filesystem
, а затем получить тип файловой системы с помощью TYPE
.
Вам необходимо установить эти флаги, чтобы включить поиск в файловой системе:
blkid_probe_set_superblocks_flags(probe, BLKID_SUBLKS_USAGE | BLKID_SUBLKS_TYPE |
BLKID_SUBLKS_MAGIC | BLKID_SUBLKS_BADCSUM);
О вашем результате :вам нужно проверить возвращаемое значениеblkid_probe_lookup_value
(или сначала использовать blkid_probe_has_value
), вы не инициализируете ptname
на NULL
, поэтому вы получите мусор, если поиск не удастся. И поиск завершится ошибкой, потому что разделы не имеют PTTYPE
. (Я не уверен, почему это сработало для вас с NTFS, в моем случае и NTFS, и раздел ext4 не имеют PTTYPE
.)
Версия с использованием и типом может выглядеть так
#include <blkid/blkid.h>
#include <stdio.h>
#include <string.h>
int main()
{
blkid_probe pr;
const char *value = NULL;
const char* devname = "/dev/sdb1";
int ret = 0;
pr = blkid_new_probe_from_filename(devname);
if (!pr)
printf("faild to open device\n");
else
{
blkid_probe_enable_partitions(pr, 1);
blkid_probe_set_superblocks_flags(pr, BLKID_SUBLKS_USAGE | BLKID_SUBLKS_TYPE |
BLKID_SUBLKS_MAGIC | BLKID_SUBLKS_BADCSUM);
blkid_do_fullprobe(pr);
ret = blkid_probe_lookup_value(pr, "USAGE", &value, NULL);
if (ret != 0) {
printf("lookup failed\n");
return 1;
} else
printf("usage: %s\n", value);
if (strcmp(value, "filesystem") != 0) {
printf("not filesystem\n");
return 1;
}
ret = blkid_probe_lookup_value(pr, "TYPE", &value, NULL);
if (ret != 0) {
printf("lookup failed\n");
return 1;
} else
printf("type: %s\n", value);
blkid_free_probe(pr);
}
}