модули ядра (римэйк)

Вопросы программного кода и архитектуры Linux

Модератор: Olej

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

модули ядра (римэйк)

Непрочитанное сообщение Olej » 31 май 2022, 10:43

Пересматриваю тексты, а, самое главное, коды примеров к текстам - Драйверы и модули ядра Linux:

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

olej@R420:~/2022/own.BOOKs/Kernel$ ls -l
итого 4320
-rw-rw-r-- 1 olej olej 1478880 апр  5  2021 BOOK_KERN_223.odt
-rw-rw-r-- 1 olej olej 1039294 апр  5  2021 BOOK_PRACTIS_245.odt
-rw-rw-r-- 1 olej olej  893557 апр  5  2021 Kexamples-223.tgz
-rw-rw-r-- 1 olej olej 1001433 апр  5  2021 PRACTIS.Tasks.245.tgz

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

Re: модули ядра (римэйк)

Непрочитанное сообщение Olej » 31 май 2022, 11:07

Olej писал(а):
31 май 2022, 10:43
Пересматриваю тексты, а, самое главное, коды примеров
Причин на то множество...
1. Последнему серьёзному редактирования эти материалы подвергались в 2014-2015г.г. (а основной базовый объём был сделан 2012г.)
2. Ко мне за это время много обращались по почте с вопросами и уточнениями ... насколько мог я разбирался и помогал...
3. С того времени очень много изменилось в API ядра - команда ядра Linux не утруждают себя совместимостью снизу-вверх от слова "нисколько", и даже с гордостью декларируют этот свой принцип...
4. На то время были рассмотрены только архитектуры X86 и ничего не было рассмотрено относительно микроархитектур ARM (типа Raspberry Pi или китайского Orange Pi), в то время (2012-2014) таких в доступе не было.
5. К этому материалу проявило интерес крупнейшее компьютерное издательство BHV, возможно речь может идти об издании этого книгой...
6. Интерес к этому предмету высокий, а информации, публикаций - мало.
7. На то время значительная часть моего интереса (50% / 50%) была направлена на RPM дистрибутивы (Fedora, CenrOS...); на сегодня меня интересовали бы только DEB дистрибутивы (Debian, Ubuntu. Mint...).
8. В предыдущем тексте (примерах) большинство отрабатывалось в 32-битной архитектуре i686, которая на сегодня практически повсеместно сменилась на 64-битную AMD x86_64 ... хотя в ARM ещё частенько используется 32-бит.
9. Да и вообще: программирование модулей ядра Linux - это высший пилотаж (и в смысле квалификации и в смысле оплаты работы программиста). :lol: Это хороший кусок масла на ваш кусок хлеба! :lol:

Вот сколько резонов переделать заново то что было сделано! :-D

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

Re: модули ядра (римэйк)

Непрочитанное сообщение Olej » 31 май 2022, 11:10

Olej писал(а):
31 май 2022, 11:07
6. Интерес к этому предмету высокий, а информации, публикаций - мало.
Вот посмотрел статистику просмотров своего блога, где публиковались эти материалы главным образом - блог "Linux для программиста"
Изображение
Здесь 2 пика, начала 2013 и середины 2017 года как раз и совпадают с размещением первоначальной редакции "Модули ядра ..." и "Практикум ...".

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

Re: модули ядра (римэйк)

Непрочитанное сообщение Olej » 31 май 2022, 11:18

Olej писал(а):
31 май 2022, 11:07
3. С того времени очень много изменилось в API ядра - команда ядра Linux не утруждают себя совместимостью снизу-вверх от слова "нисколько", и даже с гордостью декларируют этот свой принцип...
Разархивированный Kexamples-223 :

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

olej@R420:~/2022/own.BOOKs/BHV.kernel/Kexamples-223.ex$ make 2>&1 | tee make.k.log
...

olej@R420:~/2022/own.BOOKs/BHV.kernel/Kexamples-223.ex$ cat make.k.log | grep "error:" | wc -l
212

olej@R420:~/2022/own.BOOKs/BHV.kernel/Kexamples-223.ex$ cat make.k.log | grep "warning:" | wc -l
53
212 модулей-примеров не собираются, из числа тех, которые собирались все на 100% !

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

olej@R420:~/2022/own.BOOKs/BHV.kernel/Kexamples-223.ex$ tree | grep ".ko"
│   ├── lab1_dma.ko
│   ├── lab1_dma_PCI_API.ko
│   ├── hello_printk.ko
│   ├── lab1_interrupt.ko
│   ├── mod_ser.ko
│   ├── mod_tasklet.ko
│   ├── mod_workqueue.ko
│       ├── slave.ko
│   │   ├── mod_list.ko
│       ├── pool.ko
│       ├── slab.ko
│   │   ├── virt1.ko
│   │   ├── virt2.ko
│   │   ├── virt.ko
│   │   ├── virt.ko
│   ├── lab2_pci.ko
│   │   ├── mod_koes.c
│   │   ├── mod_koes.mod
│   │   ├── mod_koes.mod.c
│   │   ├── mod_koes.o
│   │   ├── mod_for.ko
│   ├── htick.ko
│   ├── interv.ko
│   ├── tick.ko
│   │   ├── config.ko
│   │   ├── md1.ko
│   │   ├── md2.ko
│   │   ├── md3.ko
│   │   ├── log_level.ko
│   │   ├── mcall.ko
│   │   ├── mobj.ko
│   │   ├── mod_params.ko
│   ├── lab1_usb.ko

olej@R420:~/2022/own.BOOKs/BHV.kernel/Kexamples-223.ex$ tree | grep ".ko" | wc -l
33

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

Re: модули ядра (римэйк)

Непрочитанное сообщение Olej » 31 май 2022, 11:30

Olej писал(а):
31 май 2022, 11:18
Разархивированный Kexamples-223 :
И более поздняя (исправленная) редакция PRACTIS.Tasks.245:

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

olej@R420:~/2022/own.BOOKs/BHV.kernel/PRACTIS.Tasks.245.ex$ make 2>&1 | tee make.p.log
...

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

olej@R420:~/2022/own.BOOKs/BHV.kernel/PRACTIS.Tasks.245.ex$ ls -l make.p.log
-rw-rw-r-- 1 olej olej 496905 мая 31 10:35 make.p.log

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

olej@R420:~/2022/own.BOOKs/BHV.kernel/PRACTIS.Tasks.245.ex$ cat make.p.log | grep "error:" | wc -l
238

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

olej@R420:~/2022/own.BOOKs/BHV.kernel/PRACTIS.Tasks.245.ex$ cat make.p.log | grep "warning:" | wc -l
81

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

olej@R420:~/2022/own.BOOKs/BHV.kernel/PRACTIS.Tasks.245.ex$ tree | grep ".ko" | wc -l
35
Подавляющее большинство модулей ядра, 100% собиравшиеся на уровне ядра 3.0, сейчас не собираются. Большая часть таких ошибок исправляется легко, это мелкие несоответствия. Но есть и радикально серьёзные изменения.

И для приведения в соответствие требуется радикальная ревизия: какие-то вещи нужно проверить и переделать, какие-то выбросить как не актуальные, что-то появилось нового и его нужно проверить и отобразить...

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

Re: модули ядра (римэйк)

Непрочитанное сообщение Olej » 31 май 2022, 11:33

Olej писал(а):
31 май 2022, 11:30
И для приведения в соответствие требуется радикальная ревизия: какие-то вещи нужно проверить и переделать, какие-то выбросить как не актуальные, что-то появилось нового и его нужно проверить и отобразить...
Olej писал(а):
31 май 2022, 11:07
5. К этому материалу проявило интерес крупнейшее компьютерное издательство BHV, возможно речь может идти об издании этого книгой...
Для того, чтобы просто привести в соответствие тексты (более 400 стр. A4) с примерами - того что уже есть - я оцениваю трудоёмкость (грубо) как 3-4 месяца ежедневной работы ... если без выходных. :lol: :twisted:

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

Re: модули ядра (римэйк)

Непрочитанное сообщение Olej » 31 май 2022, 14:02

Olej писал(а):
31 май 2022, 11:07
4. На то время были рассмотрены только архитектуры X86 и ничего не было рассмотрено относительно микроархитектур ARM (типа Raspberry Pi или китайского Orange Pi), в то время (2012-2014) таких в доступе не было.
Специфика ARM (для микрокомпьютеров) рассматривается здесь:
Raspbian модули ядра
Armbian модули ядра
Это относительно каких-то отличительных особенностей... а общие стороны будут и здесь тоже.

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

Re: модули ядра (римэйк)

Непрочитанное сообщение Olej » 15 июн 2022, 13:46

Olej писал(а):
31 май 2022, 11:07
Причин на то множество...
Olej писал(а):
31 май 2022, 11:18
Разархивированный Kexamples-223 :
Olej писал(а):
31 май 2022, 11:30
И более поздняя (исправленная) редакция PRACTIS.Tasks.245:
Сборка там везде, к счастью, ещё тогда, в 2012-2014 организована так, что дерево собирается рекурсивно 1-й командой make.
Olej писал(а):
31 май 2022, 11:30
Подавляющее большинство модулей ядра, 100% собиравшиеся на уровне ядра 3.0, сейчас не собираются. Большая часть таких ошибок исправляется легко, это мелкие несоответствия. Но есть и радикально серьёзные изменения.
Буду сюда выписывать наиболее общие изменения и исправления...
Заменяем везде (поиском):

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

#include <asm/uaccess.h>
На:

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

#include <linux/uaccess.h>
А это весь обмен с ядром!
И 50% ошибок исчезает.
Где-то утверждалось, что это изменение сложилось с версии 4.19, кажется...

P.S. Это связано с переносом определений основополагающих функций copy_to_user() и copy_from_user() ... И произошло это при переходе от версии ядра 4.12 к 4.13.

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

Re: модули ядра (римэйк)

Непрочитанное сообщение Olej » 17 июн 2022, 07:14

Olej писал(а):
31 май 2022, 11:07
1. Последнему серьёзному редактирования эти материалы подвергались в 2014-2015г.г. (а основной базовый объём был сделан 2012г.)
2. Ко мне за это время много обращались по почте с вопросами и уточнениями ... насколько мог я разбирался и помогал...
3. С того времени очень много изменилось в API ядра - команда ядра Linux не утруждают себя совместимостью снизу-вверх от слова "нисколько", и даже с гордостью декларируют этот свой принцип...
4. На то время были рассмотрены только архитектуры X86 и ничего не было рассмотрено относительно микроархитектур ARM (типа Raspberry Pi или китайского Orange Pi), в то время (2012-2014) таких в доступе не было.
5. К этому материалу проявило интерес крупнейшее компьютерное издательство BHV, возможно речь может идти об издании этого книгой...
6. Интерес к этому предмету высокий, а информации, публикаций - мало.
7. На то время значительная часть моего интереса (50% / 50%) была направлена на RPM дистрибутивы (Fedora, CenrOS...); на сегодня меня интересовали бы только DEB дистрибутивы (Debian, Ubuntu. Mint...).
8. В предыдущем тексте (примерах) большинство отрабатывалось в 32-битной архитектуре i686, которая на сегодня практически повсеместно сменилась на 64-битную AMD x86_64 ... хотя в ARM ещё частенько используется 32-бит.
9. Да и вообще: программирование модулей ядра Linux - это высший пилотаж (и в смысле квалификации и в смысле оплаты работы программиста). Это хороший кусок масла на ваш кусок хлеба!
Переделка настолько требует всё перелопачивать, что под каждый раздел прежней книги, по его изменению - делаю отдельную свежую тему.
Вот 1-я такая: драйвера символьного устройства

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

Re: модули ядра (римэйк)

Непрочитанное сообщение Olej » 18 июн 2022, 20:48

Olej писал(а):
17 июн 2022, 07:14
Вот 1-я такая:
А вот и 2-я: драйвера сетевых устройств.

Ответить

Вернуться в «Linux изнутри»

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

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