Причина Вы не можете найти его в репозитории об/мин запаса, который идет с CentOS, состоит в том, что rtorrent является традиционно настольным приложением даже при том, что это - базирующаяся командная строка. CentOS является завершением Red Had Enterprise Linux, который не включает приложения как rtorrent. Быстрый поиск онлайн и я не мог найти репозитории сторонних производителей для CentOS, который включал rtorrent.
Мое персональное предложение состоит в том, чтобы использовать Fedora, который все еще основан на архитектуре Red Hat, но включает намного более широкий диапазон пакетов включая rtorrent.
Модуль ядра является небольшим количеством скомпилированного кода, который может быть вставлен в ядро во времени выполнения, такой как с insmod
или modprobe
.
Драйвер является небольшим количеством кода, который работает в ядре, чтобы говорить с некоторым устройством. Это "управляет" аппаратными средствами. Почти каждый бит аппаратных средств в Вашем компьютере имеет связанный драйвер. ¹ значительная часть рабочего ядра код драйвера. ²
Драйвер может быть создан статически в файл ядра на диске. ³ драйвер может также быть создан как модуль ядра так, чтобы он мог быть динамично загружен позже. (И затем возможно, разгруженный.)
Общепринятая практика состоит в том, чтобы создать драйверы как модули ядра, если это возможно, вместо того, чтобы связать их статически с ядром, так как это дает больше гибкости. Существуют серьезные основания не к, однако:
Иногда данный драйвер абсолютно необходим для помогания начальной загрузке системы встать. Этого не происходит так часто, как Вы могли бы вообразить, из-за initrd функции.
Статически созданные драйверы могут быть точно, что Вы хотите в системе, которая статически ограничена по объему, такие как встроенная система. То есть, если Вы знаете заранее точно, какие драйверы всегда будут необходимы и что это никогда не будет изменяться, у Вас есть серьезное основание не обеспокоиться динамическими модулями ядра.
Если Вы создаете свое ядро статически и отключаете динамическую опцию загрузки модуля Linux, Вы предотвращаете модификацию во время выполнения кода ядра. Это обеспечивает дополнительную безопасность и устойчивость за счет гибкости.
Не все модули ядра являются драйверами. Например, относительно недавняя функция в ядре Linux - то, что можно загрузить другой планировщик процесса. Другой пример - то, что более составные типы аппаратных средств часто имеют несколько универсальных слоев, которые находятся между драйвером оборудования низкого уровня и пространством пользователя, таким как драйвер HID USB, который реализует конкретный элемент стека USB, независимого от используемого оборудования.
Asides:
Одним исключением к этому широкому оператору является микросхема ЦП, которая не имеет никакого "драйвера" по сути. Ваш компьютер может также содержать аппаратные средства, для которых у Вас нет драйвера.
Остальная часть кода в ядре ОС предоставляет универсальные услуги как управление памятью, IPC, планирование, и т.д. Эти сервисы могут, прежде всего, обслуживать приложения пространства пользователя, как с примерами, связанными ранее, или они могут быть внутренними сервисами, используемыми драйверами или другой инфраструктурой внутриядра.
Тот в /boot
, загруженный в RAM во время начальной загрузки загрузчиком рано в процессе начальной загрузки.
Отвечать на Ваш конкретный вопрос о lspci
вывод, строка "драйвера ядра" относится, к которому драйвер в настоящее время связывается с картой, в этом случае собственное nvidia
драйвер. "Строка" модулей ядра перечисляет все драйверы, которые, как известно, были способны к привязке к этой карте. Здесь, собственный драйвер разоблачает его другое имя, вероятно, из-за как lspci
найденный драйвером и его именем файла по сравнению с именем, кодированным в сам драйвер.
man lspci
- это говорит точно, что Вы записали.
– Binarus
27.12.2017, 18:40
Мой ответ пойдет с Jim. Драйвер ядра является программой (модуль ядра), который разработан для управления частью аппаратных средств. Вывод lspci говорит, что Nvidia является драйвером ядра, как это loaded
модуль для устройства. Наряду с ним прибывает другие доступные доступные модули ядра.
Я добавлю, что команды в Linux, чтобы перечислить и удалить драйверы lsmod
и rmmod
соответственно. Который говорит модуль списка, и удалите модуль.
Все Драйверы являются модулями. Не все модули являются драйверами.
Модули могут быть вставлены во времени выполнения. Модули/Драйверы могут быть статически скомпилированы наряду с ядром также.
Типичный модуль init имеет
module_init(init_fn);
init_fn()
{
/* some code */
}
Тот же модуль может быть сделан драйвером
module_init(init_fn);
init_fn()
{
device_register(&device);
/* some code */
}
Согласно этому хорошему учебному руководству:
... один тип модуля является драйвером устройства, который позволяет ядру получать доступ к аппаратным средствам, подключенным к системе.
Так, если мы попытаемся потянуть дерево, то у нас будет "Драйвер устройства", который наследовался (расширяет) Модуль, и который имеет более определенные характеристики, между которыми мы находим "доступ к аппаратным средствам"...
Модуль ядра может вообще не быть драйвером устройства.
Термин «драйвер ядра» не вполне определен, но давайте попробуем.
Это модуль ядра, который не управляет каким-либо аппаратным обеспечением, поэтому его нельзя разумно считать «драйвером устройства»:
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
static int myinit(void)
{
printk(KERN_INFO "hello init\n");
return 0;
}
static void myexit(void)
{
printk(KERN_INFO "hello exit\n");
}
module_init(myinit)
module_exit(myexit)
После сборки вы можете использовать его с:
insmod hello.ko
и он печатает hello init
в dmesg
.
Однако существуют модули ядра, которые не являются драйверами устройств, но на самом деле полезны, например, модули, предоставляющие информацию об отладке ядра/производительности.
Драйверы устройств обычно также являются модулями ядра.
Пример чего-то, что является «драйвером устройства», сгенерировать немного сложнее, поскольку для управления им требуется аппаратное обеспечение, а описание аппаратного обеспечения, как правило, сложное.
Однако, используя QEMU или другие эмуляторы, мы можем создавать программные модели реального или упрощенного оборудования, что является отличным способом научиться общаться с оборудованием. Вот простой пример минимального драйвера устройства PCI: https://github.com/cirosantilli/linux-kernel-module-cheat/blob/6788a577c394a2fc512d8f3df0806d84dc09f355/kernel_module/hello.c
Затем мы видим, что в x86, общение с оборудованием сводится к:
in
и out
инструкциям, например, https://stackoverflow.com/questions/3215878/what-are-in-out-instructions-in-x86-used-for/33444273#33444273Эти операции, как правило, не могут выполняться из пространства пользователя , как объяснено в: В чем разница между пространством пользователя и пространством ядра? Однако есть некоторые исключения: https://stackoverflow.com/questions/7986260/linux-interrupt-handling-in- пространство пользователя.
Затем ядро предлагает API более высокого уровня, чтобы сделать такое взаимодействие с оборудованием более простым и переносимым:
request_irq
для обработки прерыванийioreadX
и сопоставление памяти ввода-вывода
man lspci
: "Выставочные драйверы ядра-k, обрабатывающие каждое устройство и также модули ядра, способные к обработке его". Вы могли считать что как: "Показывайте драйвер в настоящее время / на самом деле обработка устройства и также всех модулей, которые могли / быть предназначенными для обработки его". – Binarus 27.12.2017, 18:38