Parâmetros do módulo do kernel vs / sys / class /… explanação

4

Eu estava fazendo (meu primeiro) módulo do kernel para brincar com os pinos gpio do meu pandaboard e interrompe.

Já "built-in", notei que você pode fazer (brevemente)

cd /sys/class/gpio
echo 138 > export  # a file gpio138 appears    
echo out > gpio138/direction
echo 1 > gpio138/value

para aumentar ou diminuir a voltagem nos pinos do conector.

Similarmente em um módulo do kernel você tem parâmetros de módulo e você pode fazer echo 3 > /sys/module/my_module/parameters/delay_seconds por exemplo

Minhas perguntas:

  1. O que lida com / sys / class / gpio? Um módulo do kernel? um driver?

  2. Qualquer que seja 1., é possível ter parâmetros de módulo mais complicados em um módulo do kernel, com alguma estrutura de diretório? Como um diretório de 'atrasos' contendo os parâmetros para atrasos, ... /sys/module/my_module/parameters/delays/delay_led1_seconds

  3. Você pode ter os parâmetros em algum outro lugar além do caminho / sys / module / my_module / parameters / ...? (/ sys / class / a_name / ... por exemplo)

  4. Como a coisa do gpio cria / exclui arquivos em / sys / class / gpio quando você escreve em [un]export ?

por Thomas 27.12.2013 / 14:04

2 respostas

2

1) What handles /sys/class/gpio ? A kernel module ? a driver ?

É uma interface do kernel semelhante ao diretório /proc .

2) is it possible to have more complicated module parameters in a kernel module, with some directory structure ? Like a 'delays' directory containing the params for delays

Sim; algumas coisas em /proc e /sys usam hierarquias de diretório. Se você quiser modificá-los ou expandi-los, você terá que modificar o kernel.

# 3 tem uma resposta semelhante - para fazer alterações você precisa alterar o código do kernel relevante.

4) How does the gpio thing creates new/deletes files in /sys/class/gpio when you write to [un]export ?

Estes não são arquivos em disco, são apenas interfaces de sistema. 1 Quando você vai ler dados de um arquivo procfs ou sysfs, o que você está fazendo é fazer uma requisição por informações de o kernel. Os dados são formatados e retornados. Provavelmente não é armazenado em nenhum lugar da forma que você o vê, embora partes dele possam ser armazenadas no kernel.

Quando você escreve em tal arquivo - nem todos permitem isso - você está enviando um pedido ao kernel para fazer algo específico. Isso pode incluir, por exemplo, ativar ou expandir a interface do GPIO.

1. read e write chamadas são sempre chamadas do sistema de qualquer maneira, já que os arquivos normais normalmente estão no disco, e o kernel é necessário para acessar o hardware. Portanto, usar uma API de estilo de sistema de arquivos aqui é natural; mesmo que não sejam "arquivos reais", acessar qualquer recurso que eles representem deve envolver chamadas do sistema.

    
por 27.12.2013 / 14:39
1
  1. Can you have the parameters somewhere else than in the path /sys/module/my_module/parameters/... ? (/sys/class/a_name/... for instance)

Eu usaria / sys / class / module_name / * para parâmetros, é muito fácil de usar. Veja o código no link como exemplo (também há um exemplo para o atributo somente leitura < href="http://lxr.free-electrons.com/source/sound/pci/hda/hda_hwdep.c#L180"> __ ATTR_RO ).

static struct class_attribute gpio_class_attrs[] = {
        __ATTR(export, 0200, NULL, export_store),
        __ATTR(unexport, 0200, NULL, unexport_store),
        __ATTR_NULL,
};

static struct class gpio_class = {
        .name =         "gpio",
        .owner =        THIS_MODULE,

        .class_attrs =  gpio_class_attrs,
};

/*
 * /sys/class/gpio/export ... write-only
 *      integer N ... number of GPIO to export (full access)
 * /sys/class/gpio/unexport ... write-only
 *      integer N ... number of GPIO to unexport
 */
static ssize_t export_store(struct class *class,
                                struct class_attribute *attr,
                                const char *buf, size_t len)
{
    // ...

Entre. Eu recomendo que você leia o artigo O Sistema de Arquivos sysfs por Patrick Mochel e uma breve postagem no blog por Greg Kroah-Hartman Como criar um arquivo sysfs corretamente .

    
por 18.02.2014 / 20:12