LINUX.ORG.RU

Введение в написание модулей ядра Linux.


0

0

Опубликован перевод статьи с сайта linuxdevcenter.com, посвященной написанию модулей ядра Linux.

В статье рассматривается три различных подхода к написанию модулей и даются некоторые ссылки для более подробного изучения вопроса.

>>> Перевод


нужно будет как-нить сесть, не полениться, и собрать таки воедино коллекцию ссылок на сто и одну статью на эту тему с полностью идентичным содержанием.. :)

// wbr

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

Помнится еще в свое время книга Ори Померанца была хорошим пособием для начинающего ядерщика...

anonymous
()

Прикольно, пошел читать.

k0l0b0k ★★
()

о. круто! пойду и перепишу драйвер для осциллографа (выдает через ком-порт график загрузки цп) из демона в ядро. ))))))

AiFiLTr0 ★★★★★
()

Что-то как-то совсем кратенькое введение. ИМХО начинать надо было с принципов работы файлов в /dev и /proc и уж потом как с ними работать. А также вообще очертить возможный функционал модулей.

Но всё равно переводчику респект.

DOKA
()

мда... человеку, который собрался писать модуль ядра в статье напоминают что ему понадобится компилятор...

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

>>из демона в ядро

Не надо!! Забыл дядю Танненбаума?

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

> напоминают что ему понадобится компилятор...

Ну а мало ли, вдруг бы понадобилось JVM или CLR -)) Здесь же четко сразу дают понять, что никаких вам safe-средств не предусмотрено, кернел-паник и в африке паник, си это вам не до-диез и тд =))

anonymous
()

Это для не осиливших не только Linux Device Drivers, но и даже lkmpg? Смешно, честное слово. Почти вся документация идет на английском. Ну, пожалуй, только Лав на русский переведен. Хорошо же мегаразработчик назрабатывает.

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

>Потому что я, слава Небесной Дискете, не имею к нему никакого отношения.

Почему так пренебрежительно ? Хорошее дело делают, в любом случае достойно похвалы.

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

> Почему так пренебрежительно ? Хорошее дело делают, в любом случае достойно похвалы.

Нет никакого пренебрежения, ровно как и времени делать переводы для linuxkernel.ru. Любое дело хорошо, если оно в радость.

n0xi0uzz
() автор топика
Ответ на: комментарий от lumag

> Это для не осиливших не только Linux Device Drivers, но и даже lkmpg? Смешно, честное слово.

Это введение для тех, кто хочет узнать общие сведения о создании модулей ядра.

n0xi0uzz
() автор топика
Ответ на: комментарий от deadman

> мда... человеку, который собрался писать модуль ядра в статье напоминают что ему понадобится компилятор...

Зря удивляешься. КОгда студенты пишут свой первый ядерный модуль, они говорят "все понимаю, только что это за файл такой - Makefile?"

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

Конечно 3 подхода к созданию модулей - вывести hello world с помощью printk, в симбольное устройство и через файл в /proc - это жесть конечно.

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

>гм, на русском - это первая...

>generatorglukoff (*) (17.09.2007 22:49:17)

да ну?! А что же я тогда читал 5 лет назад? Ещё тогда был перевод трудов Ори Помиранца... а уж сколько было потом новых статей... на русском в том числе.

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

>> а почему не на http://linuxkernel.ru/ ?? Потому что я, слава Небесной Дискете, не имею к нему никакого отношения.

n0xi0uzz (*) (17.09.2007 23:25:37)

Да ты крутой перец, я посмотрю. Перевел статью по hello world, и теперь для тебя linuxkernel.ru отстой.

Конечно, твоя статья намного сильней, чем, которая вышла сегдоня по сетевой подсистеме на linuxkernel.ru. Да и пользу твоя статья несет такую, что просто ахнуть можно. Плюс ко всему этому твоя статья единственная по программированию hello world :-) т.е. уникальная и в ней все разжовано. Жму твою руку, Черкасов Виктор. Крут, парень, безусловно ты гуру.

P.S. А сейчас мода такая - писать два миллиона статей ни о чем, передирая друг у друга как написать hello world модуль для ядра???

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

>Нет никакого пренебрежения, ровно как и времени делать переводы для linuxkernel.ru. Любое дело хорошо, если оно в радость.

Мне кажется, что с такой статьей, они тебя на пушечный выстрел к linuxkernel.ru не подпустят.

Это все равно, что студенту первого курса стоять перед офисом IBM и орать, что "IBM отстой, я туда не пойду". Да кто возмет этого студента в IBM? Зато всем можно говорить, что мол крутой перец, в IBM не пойду даже, только на луну, или еще, что там выше.

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

Милейший анонимный фанат linuxkernel.ru, ей богу, вместо того
чтобы пытаться всем доказать как круты вы и linuxkernel.ru,
вы бы поискали способ увеличить то что эти комплексы вызывает.
Ну там интимные места или мозг.

А пока вы будете так себя вести, я буду голосовать за то,
чтобы признать linuxkernel.ru оффтопиком, как это не парадоксально.
Ибо количество информации на вышеуказанном ресурсе несопоставимо,
с количеством мусора который вы порождаете.

Svoloch ★★★
()

Я просто ржал, ну что за чушь:

================================================ Это функция инициализации модуля, которая выполняется при его первой загрузке. Ключевое слово __init указывает ядру, что этот код будет выполнен единожды, когда модуль загрузится. ================================================

Это каким №;%№:% нужно быть, чтобы такое написать.

Для, справки, вот, что сказано в ядре в include/linux/init.h:

/* These macros are used to mark some functions or * initialized data (doesn't apply to uninitialized data) * as `initialization' functions. The kernel can take this * as hint that the function is used only during the initialization * phase and free up used memory resources after * * Usage: * For functions: * * You should add __init immediately before the function name, like: * * static void __init initme(int x, int y) * { * extern int z; z = x * y; * } * * If the function has a prototype somewhere, you can also add * __init between closing brace of the prototype and semicolon: * * extern int initialize_foobar_device(int, int, int) __init; * * For initialized data: * You should insert __initdata between the variable name and equal * sign followed by value, e.g.: * * static int init_variable __initdata = 0; * static char linux_logo[] __initdata = { 0x32, 0x36, ... }; * * Don't forget to initialize data not at file scope, i.e. within a function, * as gcc otherwise puts the data into the bss section and not into the init * section. * * Also note, that this data cannot be "const". */

а вот ниже макрос: #define __init __attribute__ ((__section__ (".init.text")))

Таким образом, макрос __init говорит КОМПИЛЯТОРУ, а НЕ ЯДРУ чтобы, фукнция, помеченная данным макросом была создана в секции .init.text и при загрузке модуля в ядро, память выделенная под эту сукцию - ОСВОБОЖДАЕТСЯ!

----------------------------------- СТАТЬЯ - СЛАБАЯ!!! ПЕРЕВОД ТОЖЕ!!! -----------------------------------

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

>Милейший анонимный фанат linuxkernel.ru, ей богу, вместо того
>чтобы пытаться всем доказать как круты вы и linuxkernel.ru, 

ткните пальцем, где хоть слово про КРУТОСТЬ, я подчеркиваю про крутость

>А пока вы будете так себя вести, я буду голосовать за то,
>чтобы признать linuxkernel.ru оффтопиком, как это не парадоксально.

опа :)) вот это точно говорит о Ваших внутренних комплексах. Принебрежение к субъекту не основанное ни на чем.

И еще, причем тут я и они?

>Ибо количество информации на вышеуказанном ресурсе несопоставимо,
>с количеством мусора который вы порождаете.

аргументы и факты в студию!

anonymous
()

Ну сколько можно говорить разными словами об одном и томже.

Mikler
()

Прочитал перевод... Ну что вам сказать господа :-) Читайте в оригинале.

n0xi0uzz, это вы сами переводили или вам помогал кто? А к чему вообще еще одна статья про "Hello wirld"? ИМХО ее уже несколько раз до Вас переводили :-)

Резюме: статья бесполезная, перевод слабый.

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

2anonymous (*) (18.09.2007 9:25:59)

ну вот, сейчас начнут орать, что это один анонимоус комменты пишет.

Вот о чем подумал - мысли, то у людей совпадают, значит и вправду так и есть??!!

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

2Вроде ни чего. Ктобы написал про /sysfs ?

Как пишут статьи сейчас. Берут книжку или чужую статью, и то, что написано в ней, переделывают и пишут новую. Причем, что пишут, что переводят, никто не понимает глубоко, только либо поверхностно, либо вообще не понимают. Потом появляются статьи, наподобии этой.

sysfs постоянно меняется и пока, кто-то грамотный нормально не опишет sysfs, его не станут копировать. Поэтому еще долго ждать.

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

Попытка спровоцировать меня на флуд была неудачной.
Вы прекрасно знаете что я имею ввиду. Если же нет,
то я не тот кто будет пытаться вам что-то показать
или обьяснить. Это не плохо могут сделать модераторы,
когда ваше жалкое тявканье утомит всех.

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

2Svoloch ** (*) (18.09.2007 9:47:30)

вы пукнули в лужу и даже не можете фактами подтвержить свои слова.

смешно.

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

>когда ваше жалкое тявканье утомит всех.

гав-гав-гав :))))

Видите, у меня веселое тявканье :)

anonymous
()

В статье сказано:

Исходные коды ядра обычно находятся в директории /usr/src/linux, права доступа к которой имеет только root.

Это совершенно не верно!!!

1) Обычно исходники (даже по умолчанию в дистрибутивах) лежат в /usr/src/linux-что_там_они_напишут

2) Только root имеет права ДОСТУПА к это директории??? Я ржал. ДУСТУП имеют все. И это было всегда. А вот права на запись, обычно, только у рута. И то, поменять можно.

Статья дает ЛОЖНЫЕ СВЕДЕНИЯ!!!

anonymous
()

В статье куча несоотвествий, например, в начале написано, что "Исходные коды ядра обычно находятся в директории /usr/src/linux", а затем сказано что зайдите "cd linux-<version>".

Т.е. сначала автор утверждает, что исходные коды расположены в директории linux, затем он утверждает, что в linux-<version>.

Может прежде чем _сырую_ статью выкладывать в общий доступ, стоит ее довести до ума и не дизинформировать читателей?!

anonymous
()

В начале статьи автор утверждает, что "права доступа к которой имеет только root" (речь идет про диретокрию с исходниками), затем пишет, что нужно скачать ванильное ядро, распаковать, затем зайти в директорию, запустить make menuconfig.

Нигде нет речи о том, что нужно стать рутом.

Да???? Вы с обычными правами, которые установлены в ВАНИЛЬНОМ ядре сможете запустить menuconfig??? По умолчанию есть права на запись в ВАНИЛЬНОМ ядре для обычного пользователя? И, что, даже потом будет создан файл .config?

Чушь!

Ну зачем пропускать такие статьи, где куча ошибок и несоответствий? Сразу видно - АВТОР НЕ СООБРАЖАЕТ О ТОМ, ЧТО ПЕРЕВОДИТ!!!

anonymous
()

Вот строчка из статьи: "Как обычно, мы регистрируем устройство в функции инициализации модуля:"

Бред оф сивый кэйбл.

Ну что зачушь, мы никак не может регистрировать устройство В ФУНКЦИИ инициализации модуля. Регистрация устройства происходит при вызове фукнции регистрации ИЗ ФУКНЦИИ инициализации модуля. И регистрация, таким образом, происходит В СТРУКТУРАХ ЯДРА, но никак не В ФУНКЦИИ.

сразу видно, что переводчик статьи, как он сам пишет, С УМА СХОДИТ ПО НАКОЛКАМ. Уколося что ли?

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

> P.S. А сейчас мода такая - писать два миллиона статей ни о чем, передирая друг у друга как написать hello world модуль для ядра???

Да ты не нервничай так, расслабься.

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

>Ну что зачушь, мы никак не может регистрировать устройство В ФУНКЦИИ инициализации модуля. Регистрация устройства происходит при вызове фукнции регистрации ИЗ ФУКНЦИИ инициализации модуля. И регистрация, таким образом, происходит В СТРУКТУРАХ ЯДРА, но никак не В ФУНКЦИИ.

прекращай истерику

geek ★★★
()

А это что за бред во сне: "Теперь создадим структуру" miscdevice.

Структура ни как не создается!!!! Структура либо объявляется (декларируется) либо происходит ее определение, когда создается переменная и выделяется физически память.

В данном случае происходит определение hello_dev и инциализация полей данной структуры.

Такого понятия как "создать структуру" в стандарте языка программиррования СИ нет. Уверен, переводчик про это и понятия не имел!

Бубликация таких переводов стаей сродни ВРЕДИТЕЛЬСТВУ, так как наполнена дезинформацией и путаницей. В результате чего начинающие программисты получают не верные сведения, считая, что источник авторитетен.

Модераторы, УДАЛИТЕ НОВОСТЬ!

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

> Да ты не нервничай так, расслабься.

да ты что, гавно продвигают в массы, а мне молчать.

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

> СТАТЬЯ - СЛАБАЯ!!! ПЕРЕВОД ТОЖЕ!!!

Я не кернелхакер, а всего лишь профессиональный переводчик, так что охотно соглашусь со второй фразой. Святая правда. Насчет первой половины тоже есть подозрения, но примитивизм не всегда есть слабость: ведь есть НАЧИНАЮЩИЕ разработчики. Ошибки - это гораздо хуже :(((

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

>Структура ни как не создается!!!! Структура либо объявляется (декларируется)

больной, вы пропустили очередную иньекцию галоперидола внутрижопно

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

>Не трать сил видишь проблемы у мальчика... Переходый возраст пройдет и поумнеет... Надеюсь... >Svoloch ** (*) (18.09.2007 11:25:15)

Хорошо, не буду, пусть мальчик учится переводить :)

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

2geek ** (*) (18.09.2007 11:26:48)

почитатйте стандарт. Термина "создается" никак нет.

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

Был бы признателен, если бы вы указали если не все, то хотя бы самые яркие ошибки перевода, -- немедленно исправлю.

n0xi0uzz
() автор топика
Ответ на: комментарий от orlusha

2orlusha (*) (18.09.2007 11:26:32)

Согласен, статья для начинающих и поэтому начинающим подавать ошибки это преступление!

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

2n0xi0uzz (*) (18.09.2007 11:31:37)

При переводе, Вы как минимум, должны понимать о чем речь. И даже если автор в самой статье допустил ляп, Вы должны перевести и тут же поправить автора и сказать как правильно нужно. Но так как Вы и этого не сделали, то ситуация со статьей аховая!

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

Вашя Я настолько затмевает вам разум, что вы не прислушиваетесь к правде и дельным советам.

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