Книга: Разработка ядра Linux
Отсутствие библиотеки libc
Отсутствие библиотеки libc
В отличие от обычных пользовательских приложений, ядро не компонуется со стандартной библиотекой функций языка С (и ни с какой другой библиотекой такого же типа). Для этого есть несколько причин, включая некоторые ситуации с дилеммой о курице и яйце, однако первопричина — скорость выполнения и объем кода. Полная библиотека функций языка С, и даже только самая необходимая ее часть, очень большая и неэффективная для ядра.
При этом не нужно расстраиваться, так как многие из функций библиотеки языка С реализованы в ядре. Например, обычные функции работы со строками описаны в файле lib/string.с
. Необходимо лишь подключить заголовочный файл <linux/string.h>
и пользоваться этими функциями.
Заголовочные файлы
Заметим, что упомянутые заголовочные файлы и заголовочные файлы, которые будут упоминаться далее в этой книге, принадлежат дереву исходного кода ядра. В файлах исходного кода ядра нельзя подключать заголовочные файлы извне этого дерева каталогов, так же как и нельзя использовать внешние библиотеки,
Отсутствует наиболее известная функция printf()
. Ядро не имеет доступа к функции printf()
, однако ему доступна функция printk()
. Функция printk()
копирует форматированную строку в буфер системных сообщений ядра (kernel log buffer), который обычно читается с помощью программы syslog
. Использование этой функции аналогично использованию printf()
:
printk("Hello world! Строка: %s и целое число: %dn",
a_string, an_integer);
Одно важное отличие между printf()
и printk()
состоит в том, что в функции printk()
можно использовать флаг уровня вывода. Этот флаг используется программой syslog
для того, чтобы определить, нужно ли показывать сообщение ядра. Вот пример использования уровня вывода:
printk(KERN_ERR "Это была ошибка !n");
Функция printk()
будет использоваться на протяжении всей книги. В следующих главах приведено больше информации о функции printk()
.
- 13.3.4.2. Только GLIBC:
- Глава 8 Образцы, экземпляры и библиотеки
- Настройка библиотеки
- Обеспечение безопасности библиотеки
- Удаление библиотеки
- Не хочу, чтобы компьютером пользовались в мое отсутствие. Как установить пароль и блокировать машину?
- Как можно узнать, когда в мое отсутствие включался компьютер, какие программы запускались и т. д.?
- 12.5. Другие библиотеки для создания графических интерфейсов
- Setting Up an NIS Client with GNU libc
- Библиотеки SharePoint
- 3.2.1.9. Только GLIBC: чтение целых строк: getline() и getdelim()
- 10.4.4.2. Только GLIBC: TEMP_FAILURE_RETRY()