blkid :blkid _probe _lookup _значение()-странные типы разделов

Первый шаг — определить, какие параметры конфигурации необходимо установить для построения модуля. Я использую

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
0
12.05.2021, 23:08
1 ответ

Если вас интересует, какая файловая система находится на 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);
    }
}
0
28.07.2021, 11:33

Теги

Похожие вопросы