нужно будет как-нить сесть, не полениться, и собрать таки воедино коллекцию ссылок на сто и одну статью на эту тему с полностью идентичным содержанием.. :)
Что-то как-то совсем кратенькое введение. ИМХО начинать надо было с принципов работы файлов в /dev и /proc и уж потом как с ними работать. А также вообще очертить возможный функционал модулей.
Ну а мало ли, вдруг бы понадобилось JVM или CLR -))
Здесь же четко сразу дают понять, что никаких вам safe-средств не предусмотрено, кернел-паник и в африке паник, си это вам не до-диез и тд =))
Это для не осиливших не только Linux Device Drivers, но и даже lkmpg?
Смешно, честное слово. Почти вся документация идет на английском. Ну, пожалуй, только Лав на русский переведен. Хорошо же мегаразработчик назрабатывает.
да ну?! А что же я тогда читал 5 лет назад? Ещё тогда был перевод трудов Ори Помиранца... а уж сколько было потом новых статей... на русском в том числе.
>> а почему не на http://linuxkernel.ru/ ??
Потому что я, слава Небесной Дискете, не имею к нему никакого отношения.
n0xi0uzz (*) (17.09.2007 23:25:37)
Да ты крутой перец, я посмотрю. Перевел статью по hello world, и теперь для тебя linuxkernel.ru отстой.
Конечно, твоя статья намного сильней, чем, которая вышла сегдоня по сетевой подсистеме на linuxkernel.ru. Да и пользу твоя статья несет такую, что просто ахнуть можно. Плюс ко всему этому твоя статья единственная по программированию hello world :-) т.е. уникальная и в ней все разжовано. Жму твою руку, Черкасов Виктор. Крут, парень, безусловно ты гуру.
P.S. А сейчас мода такая - писать два миллиона статей ни о чем, передирая друг у друга как написать hello world модуль для ядра???
>Нет никакого пренебрежения, ровно как и времени делать переводы для linuxkernel.ru. Любое дело хорошо, если оно в радость.
Мне кажется, что с такой статьей, они тебя на пушечный выстрел к linuxkernel.ru не подпустят.
Это все равно, что студенту первого курса стоять перед офисом IBM и орать, что "IBM отстой, я туда не пойду". Да кто возмет этого студента в IBM? Зато всем можно говорить, что мол крутой перец, в IBM не пойду даже, только на луну, или еще, что там выше.
Милейший анонимный фанат linuxkernel.ru, ей богу, вместо того
чтобы пытаться всем доказать как круты вы и linuxkernel.ru,
вы бы поискали способ увеличить то что эти комплексы вызывает.
Ну там интимные места или мозг.
А пока вы будете так себя вести, я буду голосовать за то,
чтобы признать linuxkernel.ru оффтопиком, как это не парадоксально.
Ибо количество информации на вышеуказанном ресурсе несопоставимо,
с количеством мусора который вы порождаете.
================================================
Это функция инициализации модуля, которая выполняется при его первой загрузке. Ключевое слово __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 и при загрузке модуля в ядро, память выделенная под эту сукцию - ОСВОБОЖДАЕТСЯ!
-----------------------------------
СТАТЬЯ - СЛАБАЯ!!! ПЕРЕВОД ТОЖЕ!!!
-----------------------------------
>Милейший анонимный фанат linuxkernel.ru, ей богу, вместо того
>чтобы пытаться всем доказать как круты вы и linuxkernel.ru,
ткните пальцем, где хоть слово про КРУТОСТЬ, я подчеркиваю про крутость
>А пока вы будете так себя вести, я буду голосовать за то,
>чтобы признать linuxkernel.ru оффтопиком, как это не парадоксально.
опа :)) вот это точно говорит о Ваших внутренних комплексах. Принебрежение к субъекту не основанное ни на чем.
И еще, причем тут я и они?
>Ибо количество информации на вышеуказанном ресурсе несопоставимо,
>с количеством мусора который вы порождаете.
аргументы и факты в студию!
Прочитал перевод...
Ну что вам сказать господа :-)
Читайте в оригинале.
n0xi0uzz, это вы сами переводили или вам помогал кто?
А к чему вообще еще одна статья про "Hello wirld"?
ИМХО ее уже несколько раз до Вас переводили :-)
Как пишут статьи сейчас. Берут книжку или чужую статью, и то, что написано в ней, переделывают и пишут новую. Причем, что пишут, что переводят, никто не понимает глубоко, только либо поверхностно, либо вообще не понимают. Потом появляются статьи, наподобии этой.
sysfs постоянно меняется и пока, кто-то грамотный нормально не опишет sysfs, его не станут копировать. Поэтому еще долго ждать.
Попытка спровоцировать меня на флуд была неудачной.
Вы прекрасно знаете что я имею ввиду. Если же нет,
то я не тот кто будет пытаться вам что-то показать
или обьяснить. Это не плохо могут сделать модераторы,
когда ваше жалкое тявканье утомит всех.
Исходные коды ядра обычно находятся в директории /usr/src/linux, права доступа к которой имеет только root.
Это совершенно не верно!!!
1) Обычно исходники (даже по умолчанию в дистрибутивах) лежат в /usr/src/linux-что_там_они_напишут
2) Только root имеет права ДОСТУПА к это директории??? Я ржал. ДУСТУП имеют все. И это было всегда. А вот права на запись, обычно, только у рута. И то, поменять можно.
В статье куча несоотвествий, например, в начале написано, что "Исходные коды ядра обычно находятся в директории /usr/src/linux", а затем сказано что зайдите "cd linux-<version>".
Т.е. сначала автор утверждает, что исходные коды расположены в директории linux, затем он утверждает, что в linux-<version>.
Может прежде чем _сырую_ статью выкладывать в общий доступ, стоит ее довести до ума и не дизинформировать читателей?!
В начале статьи автор утверждает, что "права доступа к которой имеет только root" (речь идет про диретокрию с исходниками), затем пишет, что нужно скачать ванильное ядро, распаковать, затем зайти в директорию, запустить make menuconfig.
Нигде нет речи о том, что нужно стать рутом.
Да???? Вы с обычными правами, которые установлены в ВАНИЛЬНОМ ядре сможете запустить menuconfig??? По умолчанию есть права на запись в ВАНИЛЬНОМ ядре для обычного пользователя? И, что, даже потом будет создан файл .config?
Чушь!
Ну зачем пропускать такие статьи, где куча ошибок и несоответствий?
Сразу видно - АВТОР НЕ СООБРАЖАЕТ О ТОМ, ЧТО ПЕРЕВОДИТ!!!
Вот строчка из статьи: "Как обычно, мы регистрируем устройство в функции инициализации модуля:"
Бред оф сивый кэйбл.
Ну что зачушь, мы никак не может регистрировать устройство В ФУНКЦИИ инициализации модуля. Регистрация устройства происходит при вызове фукнции регистрации ИЗ ФУКНЦИИ инициализации модуля. И регистрация, таким образом, происходит В СТРУКТУРАХ ЯДРА, но никак не В ФУНКЦИИ.
сразу видно, что переводчик статьи, как он сам пишет, С УМА СХОДИТ ПО НАКОЛКАМ. Уколося что ли?
>Ну что зачушь, мы никак не может регистрировать устройство В ФУНКЦИИ инициализации модуля. Регистрация устройства происходит при вызове фукнции регистрации ИЗ ФУКНЦИИ инициализации модуля. И регистрация, таким образом, происходит В СТРУКТУРАХ ЯДРА, но никак не В ФУНКЦИИ.
А это что за бред во сне: "Теперь создадим структуру" miscdevice.
Структура ни как не создается!!!! Структура либо объявляется (декларируется) либо происходит ее определение, когда создается переменная и выделяется физически память.
В данном случае происходит определение hello_dev и инциализация полей данной структуры.
Такого понятия как "создать структуру" в стандарте языка программиррования СИ нет. Уверен, переводчик про это и понятия не имел!
Бубликация таких переводов стаей сродни ВРЕДИТЕЛЬСТВУ, так как наполнена дезинформацией и путаницей. В результате чего начинающие программисты получают не верные сведения, считая, что источник авторитетен.
Я не кернелхакер, а всего лишь профессиональный переводчик, так что охотно соглашусь со второй фразой. Святая правда. Насчет первой половины тоже есть подозрения, но примитивизм не всегда есть слабость: ведь есть НАЧИНАЮЩИЕ разработчики. Ошибки - это гораздо хуже :(((
При переводе, Вы как минимум, должны понимать о чем речь. И даже если автор в самой статье допустил ляп, Вы должны перевести и тут же поправить автора и сказать как правильно нужно. Но так как Вы и этого не сделали, то ситуация со статьей аховая!