2013-02-12 1 views
1

Я изучаю разработку драйвера устройства Linux и создал код базового модуля ядра, который создает псевдосимвольное устройство. Этот модуль был скомпилирован и вставил тоже .. Когда я сделал lsmod результат был как этотМаксимальные значения основных и второстепенных номеров в linux

Module     Size Used by 
modeldriver    2540 0 

что же это число означает? что подразумевается под размером модуля? И каково максимальное значение основных и второстепенных чисел в Linux? Где я могу узнать о значениях linux kernel 2.6.37

ответ

2

1. «Размер» - это объем памяти, который занимает модуль ядра, то есть размер кода, данные и, возможно, некоторые специальные разделы модуля, загруженного в память. Обратите внимание, что динамическая память, выделяемая самим модулем, там не включена.

2. Что касается основных/младших номеров, лучше не полагаться на конкретные лимиты. Если вам необходимо зарезервировать такие номера для ваших персональных устройств, например, вы можете использовать alloc_chrdev_region().

Из определений MAJOR(), MINOR() и MKDEV() в <linux/kdev_t.h>, то отсюда следует, что 12 бит используются для кодирования основного номера (0..4095, кажется), 20 бита - для детей. Раздел «Внутреннее представление чисел устройства» главы 3 «Драйверы устройств Linux» книги (3-е изд.) Подтверждает, что тоже:

В версии 2.6.0 ядра, dev_t является 32- бит с 12 бит, выделенными для основного номера, и 20 для младшего номера. Конечно, ваш код не должен делать никаких предположений о внутренней организации номеров устройств; он должен, вместо этого, использовать набор макросов, найденный в Linux/kdev_t.h

Если вы еще не сделали этого, я рекомендовал бы взглянуть на Linux Device Drivers book упомянутые выше. Хотя в некоторых местах он немного устарел, он по-прежнему очень полезен.

+0

спасибо большое .. это помогло мне .. – GVK