проект книги: "Модули ядра Linux"

Здесь будут размещаться ссылки и отзывы на интересные публикации по Linux

Модераторы: Olej, vikos

Правила форума
Запрещается помещать сообщения, не имеющие отношения к обсуждаемой статье. Все такие сообщения будут удаляться непосредствено после обнаружения.
Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: проект книги: "Модули ядра Linux"

Непрочитанное сообщение Olej » 01 ноя 2013, 19:50

Olej писал(а):
xor.kruger писал(а):Скажите пожалуйста, собираетесь ли Вы в ближайшее время выкладывать обновленную версию книги?
В Вашем блоге она уже давненько не обновлялась :(
Заранее спасибо за любой ответ.
Пока не собирался. ;-)
По очень простой причине:
- все вопросы для себя, которые у меня вызывали неясности - я разрешил (для себя)...
- всё, что я хотел сказать - я сказал
- сейчас у меня нет конкретной работы в этой области, которая давала бы материал для дальнейшего разбирательства...
- если бы у кого-то из читателей (у вас, к примеру ;-) ) возникали конкретные вопросы (как сделать так чтобы...?) - то мы бы разобрали и нашли решение; таким образом и появились многие главы в теперешнем виде рукописи...
Вот и возникла прогнозируемая ситуация, связанная с изменениями обработчиков операции ioctl(), см. не проходит вызов ioctl();

Вопрос, в общем, понятен и решён...
Я сейчас "причешу" этот этот вариант (это будет редакция 173) и примеры, и обновлю выложенное в блоге.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: проект книги: "Модули ядра Linux"

Непрочитанное сообщение Olej » 07 ноя 2013, 15:41

Olej писал(а): Эту серию статей (продолжений) они публиковать закончили.

И начинают следующую.

- 18.07.2013:
Это относительно внутренних механизмов ядра (распределители памяти, параллельность и синхронизация и т.д.) + использование этих механизмов:
Инструменты программирования в ядре: Часть 63. Механизмы управления памятью
Инструменты программирования в ядре: Часть 64. Распределители памяти
Инструменты программирования в ядре: Часть 65. Работа с динамическими структурами памяти
Инструменты программирования в ядре: Часть 66. Служба времени: базовые понятия

- 19.07.2013:
Инструменты программирования в ядре: Часть 67. Служба времени: измерение интервалов
Инструменты программирования в ядре: Часть 68. Служба времени: абсолютное время и задержки выполнения

- 21.07.2013:
Инструменты программирования в ядре: Часть 69. Таймеры ядра
У developerWorks возникли технические накладки + они мне об этом не сообщили:
- они указали ссылку на 70-ю статью в тексте 69-й ...
- но 70-ю статью забыли выложить...
- а потом продолжили выкладывать следующие: 71, ?2, ...
- получился разрыв в связности

Этот дефект не устранён и на сегодня! :-o

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: проект книги: "Модули ядра Linux"

Непрочитанное сообщение Olej » 07 ноя 2013, 15:52

Olej писал(а):
Olej писал(а): - 18.07.2013:
Это относительно внутренних механизмов ядра (распределители памяти, параллельность и синхронизация и т.д.) + использование этих механизмов:
Инструменты программирования в ядре: Часть 63. Механизмы управления памятью
Инструменты программирования в ядре: Часть 64. Распределители памяти
Инструменты программирования в ядре: Часть 65. Работа с динамическими структурами памяти
Инструменты программирования в ядре: Часть 66. Служба времени: базовые понятия

- 19.07.2013:
Инструменты программирования в ядре: Часть 67. Служба времени: измерение интервалов
Инструменты программирования в ядре: Часть 68. Служба времени: абсолютное время и задержки выполнения

- 21.07.2013:
Инструменты программирования в ядре: Часть 69. Таймеры ядра
- а потом продолжили выкладывать следующие: 71, ?2, ...
- 13.08.2013:
Инструменты программирования в ядре: Часть 71. Параллелизм и синхронизация. Новый интерфейс потоков
Инструменты программирования в ядре: Часть 72. Параллелизм и синхронизация. Синхронизация в коде
Инструменты программирования в ядре: Часть 73. Параллелизм и синхронизация. Блокировки. Часть 1

- 14.08.2013:
Инструменты программирования в ядре: Часть 74. Параллелизм и синхронизация. Блокировки. Часть 2

- 29.10.2013:
Отладка и тестирование модулей ядра: Часть 75. Отладка в ядре. Общие положения
Отладка и тестирование модулей ядра: Часть 76. Отладка в ядре. Практические советы
Отладка и тестирование модулей ядра: Часть 77. Отладка в ядре. Сборка и установка ядра

Это действительно полное завершение серии публикаций на IBM developerWorks.


Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: проект книги: "Модули ядра Linux"

Непрочитанное сообщение Olej » 07 ноя 2013, 20:23

Olej писал(а):И это исправили:
Итого, эта, последняя, заключительная серия статей имеет вид:

Инструменты программирования в ядре: Часть 63. Механизмы управления памятью
Инструменты программирования в ядре: Часть 64. Распределители памяти
Инструменты программирования в ядре: Часть 65. Работа с динамическими структурами памяти
Инструменты программирования в ядре: Часть 66. Служба времени: базовые понятия
Инструменты программирования в ядре: Часть 67. Служба времени: измерение интервалов
Инструменты программирования в ядре: Часть 68. Служба времени: абсолютное время и задержки выполнения
Инструменты программирования в ядре: Часть 69. Таймеры ядра
Инструменты программирования в ядре: Часть 70. Параллелизм и синхронизация. Потоки ядра
Инструменты программирования в ядре: Часть 71. Параллелизм и синхронизация. Новый интерфейс потоков
Инструменты программирования в ядре: Часть 72. Параллелизм и синхронизация. Синхронизация в коде
Инструменты программирования в ядре: Часть 73. Параллелизм и синхронизация. Блокировки. Часть 1
Инструменты программирования в ядре: Часть 74. Параллелизм и синхронизация. Блокировки. Часть 2

Отладка и тестирование модулей ядра: Часть 75. Отладка в ядре. Общие положения
Отладка и тестирование модулей ядра: Часть 76. Отладка в ядре. Практические советы
Отладка и тестирование модулей ядра: Часть 77. Отладка в ядре. Сборка и установка ядра

rishatgaliulin

Re: проект книги: "Модули ядра Linux"

Непрочитанное сообщение rishatgaliulin » 16 июн 2014, 09:10

Ошибка в описании функций
long copy_from_user( void *to, const void __user * from, unsigned long n );
long copy_to_user( void __user *to, const void *from, unsigned long n );

Каждый из этих вызовов возвращает реально скопированное число байт или код ошибки операции (отрицательное значение).
На самом деле возвращают количество байтов, которые они не смогли скопировать в случае ошибки.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: проект книги: "Модули ядра Linux"

Непрочитанное сообщение Olej » 16 июн 2014, 22:31

rishatgaliulin писал(а):Ошибка в описании функций
long copy_from_user( void *to, const void __user * from, unsigned long n );
long copy_to_user( void __user *to, const void *from, unsigned long n );

Каждый из этих вызовов возвращает реально скопированное число байт или код ошибки операции (отрицательное значение).
На самом деле возвращают количество байтов, которые они не смогли скопировать в случае ошибки.
Хороший вопрос! ;-)

То как выглядит это в тексте зависит от редакции текста (когда написано), и в последней редакции 217 (10 июня 2014) это написано так:
Каждый вызовов этой группы API возвращает нулевое значение в качестве признака успешной операции, либо исходно переданное значение параметра n (положительное целое), как признак недоступности области для копирования.
Про то, что "возвращают количество байтов, которые они не смогли скопировать в случае ошибки"(с) - это написано в знаменитой книжке LDD3, и оттуда пересказывается с места на место...
Откуда они это взяли, я не знаю ... наверное в более ранних версиях ядра так и было.
Но смотрим код реализации :

- верс. 3.15:

Код: Выделить всё

255 static inline long copy_from_user(void *to,
256                 const void __user * from, unsigned long n)
257 {
258         might_fault();
259         if (access_ok(VERIFY_READ, from, n))
260                 return __copy_from_user(to, from, n);
261         else
262                 return n;
263 }
264 
265 static inline long copy_to_user(void __user *to,
266                 const void *from, unsigned long n)
267 {
268         might_fault();
269         if (access_ok(VERIFY_WRITE, to, n))
270                 return __copy_to_user(to, from, n);
271         else
272                 return n;
273 }
__copy_from_user() & __copy_to_user() (с подчёркиванием) - тупо возвращают всегда константно 0 (стр.109).

Здесь возвращается всегда возвращает: или 0 или n ... и ничего более.
И всё так же во всех версиях от 2.6.35 до 3.15 (по той же ссылке).

Ответить

Вернуться в «Публикации, книги и обсуждения»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей