Я разрабатываю модуль ядра Linux, который использует DebugFS для чтения некоторых значений из файлов в пространстве пользователя в пространство ядра.
На данный момент у меня есть каталог DebugFS по адресу /sys/kernel/debug/example
. Этот каталог содержит набор файлов, привязанных к переменным u32_t. Я могу читать значения из этих файлов и присваивать их переменным u32_t в моем модуле ядра.
Я хочу прочитать некоторые символы ASCII из файла DebugFS и присвоить их символу char[] произвольной длины. Однако (насколько я видел) документация DebugFS не содержит никаких функций специально для этой цели.
Текущий код создает файл «пример» по адресу /sys/kernel/debug/
и привязывает hello
к любому 32-битному беззнаковому целому числу, находящемуся в этом файле:
static u32 hello = 0;
int init_module(void)
{
struct dentry *junk;
dir = debugfs_create_dir("example", 0);
if (!dir) {
printk(KERN_ALERT "Failed to create /sys/kernel/debug/example\n");
return -1;
}
junk = debugfs_create_u32("hello", 0666, dir, &hello);
if (!junk) {
printk(KERN_ALERT "Failed to create /sys/kernel/debug/example/hello\n");
return -1;
}
return 0;
}
void cleanup_module(void)
{
debugfs_remove_recursive(dir);
}
Спасибо, мне удалось создать файл и реализовать эти операции, следуя janczer.github.io/create-simple-debugfs-object, но я не уверен, как получить строку из файла (этот пример записывает только в /читает из файла с терминала, а не в коде).
Примечание: вы не должны проверять ошибки API-интерфейсов debugfs, они должны работать и без них. Редким исключением является случай, когда код связан исключительно с debugfs.
Решено. Обратитесь к ссылке, которую я разместил в комментариях (https://janczer.github.io/create-simple-debugfs-object/), содержимое файла «data_file» присваивается char data[].
Вы можете либо создать двоичный объект, содержащий вашу строку, либо создать файл и реализовать над ним операции чтения и записи.