#ifdef KERNEL2x & file_operations (.., .., .., ..), функция ssize_t, printk () - PullRequest
0 голосов
/ 15 декабря 2010

Привет, у меня есть несколько вопросов. Буду рад если кто-то ответит :) Я пытаюсь скомпилировать драйвер Linux для ЖК-модуля 16X2. Я пытаюсь использовать в своем коде struct file_operations (); 1. По другим кодам я замечаю, что для компиляции они добавляют #ifdef KERNEL21. Я попытался это сделать, и я получил гораздо меньше ошибок. почему так работает. я использую ядро ​​2.6.18-128.4.1.el5 .. так мне нужно перейти на #ifdef KERNEL26? Я получаю больше ошибок, если пытаюсь сделать soo.

2. Некоторые аргументы file_operation являются функцией rtuen ssize_t. что это значит? в другом примере кода также есть "#ifdef KERNEL21", но все равно я получаю ошибку: «lcd_module.c: 74: ошибка: ожидаемый идентификатор или ג (ג перед ג {ג токеном» *

3.Последний выпуск, я работал с примером Makfile и получаю файл .o, а не .ko, с которым я работаю. как запустить модуль с файлом .o?

благодарю заранее:)

1 Ответ

1 голос
/ 16 декабря 2010

ssize_t - это, по сути, size_t со знаком и широко используется в ядре, поскольку значения меньше нуля используются для возврата ошибок в местах, где ожидается размер без знака. Например, ожидается, что файловая операция read вернет количество прочитанных байтов, но в случае нехватки памяти вы можете вернуть -ENOMEM, и errno будет правильно установлено в программе пользовательского пространства.

С ядром 2.6 вы должны использовать Makefile из пакета kernel-headers, а не созданный вручную, и он создает файл .ko вместо .o. Дальнейшее чтение здесь: http://www.cyberciti.biz/tips/build-linux-kernel-module-against-installed-kernel-source-tree.html

...