LINUX.ORG.RU

ликбез по kernel


0

0

Читаю O'Reilly Linux Device Drivers 3rd.Edition, возник вопрос.
Макросы вроде EXPORT_SYMBOL сделаны только для удобства?
Для чего нужны..
.init
.exit
И что это такое? В этой книжке не нашел на это ответа, может посоветуете еще что-нибуть почитать про ядро?

anonymous

> может посоветуете еще что-нибуть почитать про ядро?

… исходники?!

anonymous
()

> Макросы вроде EXPORT_SYMBOL сделаны только для удобства?

Для каких удобств? Заданное имя ложится в таблицу ksym и доступно для резолвинга всему остальному миру.

> Для чего нужны.. > .init > .exit

Конструктор, деструктор.

> может посоветуете еще что-нибуть почитать про ядро?

Understanding the Linux Kernel 3rd. edition(ISBN 0-596-00565-2)

Professional Linux Kernel Architecture (ISBN 0-470-34343-2)

mv ★★★★★
()
Ответ на: комментарий от mv

>Для каких удобств? Заданное имя ложится в таблицу ksym и доступно для >>резолвинга всему остальному миру.
Т.е. я могу вызывать функции переданные в такие макросы в любом месте ядра?
> Для чего нужны.. > .init > .exit

>>Конструктор, деструктор.

Хм, встречал только в С++.
Т.е. в них прсто передаются данные?
например...
static struct tcp_seq_afinfo tcp4_seq_afinfo = {
.name = "tcp",
.family = AF_INET,
.seq_fops = {
.owner = THIS_MODULE,
},
.seq_ops = {
.show = tcp4_seq_show,
},
}
тут это вроде как просто элемменты структуры, но без определения типов данных.

anonymous
()
Ответ на: комментарий от anonymous

> Т.е. я могу вызывать функции переданные в такие макросы в любом месте ядра?

Такие функции можно вызывать из модуля. Кернельный линкер при загрузке модуля может резолвить имена, если они есть в ksymtab.

> Хм, встречал только в С++.

Да, люди почему-то часто думают, что ООП - это C++. Или Java. Или C#.

> Т.е. в них прсто передаются данные?

В них выполняется вся работа по инициализации (.init) или по завершению (.exit). Например, поднимается и ложится таймер.

mv ★★★★★
()
Ответ на: комментарий от anonymous

>тут это вроде как просто элемменты структуры, но без определения типов данных.

читать про инициализацию структур в С

generatorglukoff ★★
()
Ответ на: комментарий от mv

Хм, похоже флаги реализованы одинаковыми константами? Почему в udp присудствуют TCP-шные константы?
udp.c
355: if (!harderr || sk->state != TCP_ESTABLISHED)
476: if (sk->state != TCP_ESTABLISHED)
749: sk->state = TCP_ESTABLISHED;
762: sk->state = TCP_CLOSE;

p.s. подскажите какие-нибуть не сложные реализации протоколов на уровне ядра, пока ковыряю udp, но столкнулся со странными константами, к тому же там еще bootp с ip уровнем в зависимости, в общем вроде как sctp(в виде LKM), только просто что-бы к примеру буфер в 1 байт послать.

anonymous
()
Ответ на: комментарий от anonymous

Можешь изучать net/ipv4/updlite.c. Открываешь RFC 3828, читаешь, смотрешь, как в ядре реализовано.

Если нужно с сетью ковыряться, то можешь почитать книжку: http://www.ozon.ru/context/detail/id/2441431/ Она, конечно, outdated давно (по 2.4 ядру), но базовые понятия даёт.

mv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.