Параметр модуля insmod: неверные параметры

Я разрабатываю образец модуля ядра driver.ko. Я хочу указать размер блока структуры data_node с параметром модуля BlockSize. когда я запускаю только insmod driver.ko, это работает, но когда я указываю BlockSize insmod driver.ko BlockSize = 10, я получаю эту ошибку:

Error: could not insert module driver.ko: Invalid parameters

modinfo -p ./driver.ko команда дает мне это:

BlockSize: size of  buffer (int)

driver.c

#include <linux/init.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/kernel.h>
#include <linux/cdev.h>
#include <linux/kdev_t.h>
#include <linux/fs.h>
#include <asm/uaccess.h>
#include <linux/mutex.h>
#include <linux/device.h>
#include <linux/slab.h>


/* parametter  */
static int BlockNumber = 8;
static int BlockSize = 512;

 module_param( variable name, type, permission);  */

module_param(BlockSize, int, S_IRUGO);
MODULE_PARM_DESC(BlockSize , " size of  buffer");

/* using 'k' as magic number  */
#define SAMPLE_IOC_MAGIC 'k'
#define SAMPLE_IOCRESET _IOWR(SAMPLE_IOC_MAGIC, 0, int)
#define SAMPLE_IOC_MAXNR 0


struct cdev* my_cdev;
dev_t dev;

static int size_to_read;


/* Macro used to compute the minimum */
#define MIN(a,b) (((a) < (b)) ? (a) : (b))





/* data buffer structure */
typedef struct dnode
{
    int bufSize;
    char *buffer;
    struct dnode *next;
} data_node;


/* liste stucture */
typedef struct  lnode
{
    data_node *head;
    data_node *cur_write_node;
    data_node *cur_read_node;   
        int cur_read_offset;
        int cur_write_offset;
    }liste;


   code ..........................

..


person Community    schedule 08.08.2014    source источник
comment
Нетрудно найти пример этого, как в коде, так и в командной строке. В качестве дикой догадки, поскольку я давно не смотрел на это, вы пробовали это без пробелов, то есть insmod driver.ko BlockSize=10 ?   -  person Chris Stratton    schedule 08.08.2014
comment
@ChrisStratton большое спасибо, работает без места :) Я этого не заметил   -  person    schedule 08.08.2014


Ответы (1)


Получается, что параметры модуля нужно передавать без пробела между именем и значением, т.е. нужно использовать:

insmod driver.ko BlockSize=10

Это имеет некоторый смысл, так как в командной строке самого insmod «BlockSize=10» — это одна запись в *argv[], которая может быть передана ядру в виде куска, а «BlockSize = 10» — это три разных записи. ("BlockSize", "=", "10"), для повторного объединения которых кто-то должен написать код.

person Chris Stratton    schedule 08.08.2014