Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ЭнциклопСдия Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ядра LinuxΒ»

Автор ΠžΡ€ΠΈ ΠŸΠΎΠΌΠ΅Ρ€Π°Π½Ρ†

Ori Pomerantz

ЭнциклопСдия Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ядра Linux

ИмСна всСх ΠΈΠ·Π΄Π΅Π»ΠΈΠΉ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ здСсь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ†Π΅Π»Π΅ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π’ΠΎΡ€Π³ΠΎΠ²Ρ‹Π΅ ΠΌΠ°Ρ€ΠΊΠΈ изготовитСля ΠΈ/ΠΈΠ»ΠΈ зарСгистрированныС ΠΌΠ°Ρ€ΠΊΠΈ изготовитСля ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΈΡ… Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°ΠΌ. Π― Π½Π΅ дСлаю Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ трСбования монопольного использования ΠΈΠ»ΠΈ ΠΎΠ±Ρ‰Π΅ΠΉ ассоциации с издСлиями, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ ΠΈ компаниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΈΠΌΠΈ. 

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π˜Ρ‚Π°ΠΊ, Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ для ядра. Π’Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ C, Π²Ρ‹ написали ряд Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, выполяСмых ΠΊΠ°ΠΊ процСссы, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Ρ‚ΡƒΠ΄Π°, Π³Π΄Π΅ происходит Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ дСйствиС, Ρ‚ΡƒΠ΄Π°, Π³Π΄Π΅ ΠΎΠ΄ΠΈΠ½ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π΅Ρ€Π΅Ρ‚ΡŒ Π²Π°ΡˆΡƒ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму ΠΈΠ»ΠΈ привСсти ΠΊ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅.

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠ»ΡƒΠ±. Π― ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ ΠΈΠΌΠ΅Π» Ρ‚Π°ΠΊΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ стСр ΠΌΠ½Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΠΎΠ΄ DOS, ΠΈ я Π½Π΅ Π²ΠΈΠΆΡƒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Linux Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ бСзопасной.

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: я написал это ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎΠ΄ вСрсиями 2.0.35 ΠΈ 2.2.3 ядра, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π° Pentium. Π“Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ это Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… CPU ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… вСрсиях ядра, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ вСрсий 2.0.x ΠΈΠ»ΠΈ 2.2.x, Π½ΠΎ я Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΎΠ±Π΅Ρ‰Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ. Одна ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ситуация: Π³Π»Π°Π²Π° 11, которая Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ Π½Π΅ x86.

ΠšΡ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ это

Π­Ρ‚ΠΎΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ядра. Π₯отя я Π±ΡƒΠ΄Ρƒ ΠΊΠ°ΡΠ°Ρ‚ΡŒΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… мСстах Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π² ядрС, это Π½Π΅ моя Ρ†Π΅Π»ΡŒ. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ достаточно ΠΌΠ½ΠΎΠ³ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… источников, Π°Π²Ρ‚ΠΎΡ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π»ΡƒΡ‡ΡˆΡƒΡŽ Ρ‡Π΅ΠΌ Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я ΠΌΠΎΠ³ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

Π­Ρ‚ΠΎΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ для людСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π½Π°ΡŽΡ‚ ΠΊΠ°ΠΊ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ядра, Π½ΠΎ Π΅Ρ‰Π΅ Π½Π΅ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ ΠΊ вСрсии 2.2. Если Π’Ρ‹ Ρ‚Π°ΠΊΠΎΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, я ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ, Π’Π°ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ A, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ всС различия, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ я столкнулся ΠΏΡ€ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ². Бписок Π½Π΅ всСсторонний, Π½ΠΎ я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ базисных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй ΠΈ Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ достаточно для Π½Π°Ρ‡Π°Π»Π°.

Π―Π΄Ρ€ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ большоС количСство программирования, ΠΈ я полагаю, Ρ‡Ρ‚ΠΎ программисты Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Π³ΠΎ исходныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈΡ…. Π‘ΠΊΠ°Π·Π°Π² это, я Ρ‚Π°ΠΊΠΆΠ΅ Π²Π΅Ρ€ΡŽ Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹ с систСмой сначала ΠΈ выяснСниСм вопросов ΠΏΠΎΠ·ΠΆΠ΅. Когда я ΡƒΠ·Π½Π°ΡŽ Π½ΠΎΠ²Ρ‹ΠΉ язык программирования, я Π½Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡΡŒ с чтСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π° ΠΏΠΈΡˆΡƒ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ `hello, world'. Π― Π½Π΅ Π²ΠΈΠΆΡƒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с ядром Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Π°Ρ‡Π΅.

ЗамСчания ΠΎ стилС

Π― Π½Π°Ρ…ΠΎΠΆΡƒ приятным ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΡˆΡƒΡ‚ΠΎΠΊ Π² мою Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ, насколько Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π― ΠΏΠΈΡˆΡƒ это, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ я наслаТдаюсь этим, ΠΈ я ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π’Ρ‹ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ это ΠΏΠΎ Ρ‚ΠΎΠΉ ΠΆΠ΅ самой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅. Если Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΡƒΡ‚ΡŒ, ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ вСсь Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ тСкст ΠΈ Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ исходники. Π― ΠΎΠ±Π΅Ρ‰Π°ΡŽ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ всС Π²Π°ΠΆΠ½Ρ‹Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ Π² замСчаниях.

ИзмСнСния

НовоС Π² вСрсии 1.0.1

1. Π Π°Π·Π΄Π΅Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, 0.3.

2. Как Π½Π°ΠΉΡ‚ΠΈ младший Π½ΠΎΠΌΠ΅Ρ€ устройства, 2.

3. Π’Π²Π΅Π΄Π΅Π½ΠΎ объяснСниС различия ΠΌΠ΅ΠΆΠ΄Ρƒ символом ΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ устройства, 2

4. Makefile'Ρ‹ для ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ядра, 1.1.

5. БиммСтричная ΠΌΠ½ΠΎΠ³ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΡΡ‚ΡŒ, 12.

6. Π“Π»Π°Π²Π° `ΠŸΠ»ΠΎΡ…ΠΈΠ΅ ΠΈΠ΄Π΅ΠΈ', 13.

НовоС Π² вСрсии 1.1.0

1. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° вСрсии 2.2 ядра Π²ΠΎ всСх Π³Π»Π°Π²Π°Ρ….

2. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² для Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий ядра, 2.1.

3. Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ вСрсиями 2.0 ΠΈ 2.2, A.

4. ΠœΠΎΠ΄ΡƒΠ»ΠΈ ядра Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΉΠ»Π°Ρ… исходников, 1.2.

5. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ бСспорядка с систСмными Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Π΄Π°Ρ‡Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ rmmod, 7.

Благодарности

Π― Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΡ‚ΡŒ Weiss Π·Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ ΠΈ обсуТдСния, Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π·Π° поиск ошибок Π²Π½ΡƒΡ‚Ρ€ΠΈ этого Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π»ΡŽΠ±Ρ‹Π΅ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ ошибки Ρ‚ΠΎΠ»ΡŒΠΊΠΎ моя Π²ΠΈΠ½Π°.

TEX скСлСт для этой ΠΊΠ½ΠΈΠ³ΠΈ Π±Ρ‹Π» бСсстыдно Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½ ΠΈΠ· руководства `Linux Installation and Getting Started', Π³Π΄Π΅ Ρ€Π°Π±ΠΎΡ‚Π° Π² TEX Π±Ρ‹Π»Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Matt Welsh.

Моя Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΎΡΡ‚ΡŒ Linus Torvalds, Richard Stallman ΠΈ всСм Π΄Ρ€ΡƒΠ³ΠΈΠΌ людям, ΠΊΡ‚ΠΎ сдСлали Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ для мСня Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму высокого качСства Π½Π° ΠΌΠΎΠ΅ΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π΅ исходный тСкст, ΠΊΠ°ΠΊ Π½Π΅Ρ‡Ρ‚ΠΎ само собой Ρ€Π°Π·ΡƒΠΌΠ΅ΡŽΡ‰Π΅Π΅ΡΡ (Π΄Π°, ΠΏΡ€Π°Π²ΠΎ, Π·Π°Ρ‡Π΅ΠΌ я Π³ΠΎΠ²ΠΎΡ€ΡŽ это?).

Благодарности ΠΊ вСрсии 1.0.1

Π― Π½Π΅ ΠΌΠΎΠ³Ρƒ внСсти Π² список ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ, ΠΊΡ‚ΠΎ послал ΠΏΠΎ e-mail ΠΌΠ½Π΅ сообщСниС, ΠΈ Ссли я Π½Π΅ вписал ΠΈΠΌΠ΅Π½Π½ΠΎ Вас, я ΠΏΡ€ΠΈΠ½ΠΎΡˆΡƒ извинСния Π·Π°Ρ€Π°Π½Π΅Π΅. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ люди Π±Ρ‹Π»ΠΈ особСнно ΠΏΠΎΠ»Π΅Π·Π½Ρ‹:

β€’ Frodo Looijaard ΠΈΠ· НидСрландов Π—Π° сСрвСр с ΠΊΡƒΡ‡Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… совСтов ΠΏΠΎ ядрам вСрсий 2.1.x.

β€’ Stephen Judd ΠΈΠ· Новой Π—Π΅Π»Π°Π½Π΄ΠΈΠΈ Π—Π° ΠΏΡ€Π°Π²ΠΊΡƒ ΠΎΡ€Ρ„ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ.

β€’ Magnus Ahltorp ΠΈΠ· Π¨Π²Π΅Ρ†ΠΈΠΈ Π—Π° исправлСния, ΠΊΠ°ΡΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ Π±Π»ΠΎΡ‡Π½Ρ‹ΠΌΠΈ устройствами.

Благодарности ΠΊ вСрсии 1.1.0

β€’ Emmanuel Papirakis ΠΈΠ· КвСбСка, Канада Π·Π° пСрСнос всСх ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π² Π²Π΅Ρ€ΡΠΈΡŽ 2.2 ядра.

β€’ Frodo Looijaard ΠΈΠ· НидСрландов Π·Π° сообщСниС ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ядра (1.2).

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π»ΡŽΠ±Ρ‹Π΅ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ ошибки ΠΌΠΎΠΈ собствСнныС, ΠΈ Ссли Π’Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΊΠ½ΠΈΠ³Ρƒ Π½Π΅ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΠΉ, Ρ‚Ρ€Π΅Π±ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π΄Π΅Π½Π΅Π³, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π’Ρ‹ Π·Π°ΠΏΠ»Π°Ρ‚ΠΈΠ»ΠΈ Π·Π° ΠΊΠ½ΠΈΠ³Ρƒ.

Hello, world

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ всС ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠΈ программирования Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ "Hello, world!". Π― Π½Π΅ знаю, Ρ‡Ρ‚ΠΎ случаСтся с людьми, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ€Ρ‹Π²Π°ΡŽΡ‚ с этой Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠ΅ΠΉ, ΠΈ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ бСзопаснСС Π½Π΅ Π²Ρ‹ΡΡΠ½ΡΡ‚ΡŒ. 

ΠœΠΎΠ΄ΡƒΠ»ΡŒ ядра (Π² дальнСйшСм просто ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для краткости) Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: init_module, которая вызываСтся, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ вставляСтся Π² ядро ΠΈ cleanup_module, которая вызываСтся, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ удаляСтся. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ init_module рСгистрируСт Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ для ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ дСйствий с ядром ΠΈΠ»ΠΈ замСняСт ΠΎΠ΄Π½Ρƒ ΠΈΠ· ядСрных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ собствСнным ΠΊΠΎΠ΄ΠΎΠΌ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠΎΠ΄ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ). Ѐункция cleanup_module, ΠΊΠ°ΠΊ прСдполагаСтся, отмСняСт всС, Ρ‡Ρ‚ΠΎ сдСлано init_module, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ΅Π½ бСзопасно.

hello.c

/* hello.c

* Copyright (C) 1998 by Ori Pomerantz

*

* "Hello, world" - вСрсия для модуля ядра.

*/


/* The necessary header files */

/* Standard in kernel modules */

#include <linux/kernel.h> /* We're doing kernel work */

#include <linux/module.h> /* Specifically, a module */


/* Deal with CONFIG_MODVERSIONS */

#if CONFIG_MODVERSIONS==1

#define MODVERSIONS

#include <linux/modversions.h>

#endif


/* Initialize the module */

int init_module() {

 printk("Hello, world - this is the kernel speaking\n");

 /* If we return a non zero value, it means that

 * init_module failed and the kernel module

 * can't be loaded */

 return 0;

}


/* Cleanup - undid whatever init_module did */

void cleanup_module() {

 printk("Short is the life of a kernel module\n");

}

Makefile'Ρ‹ для ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ядра

ΠœΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ яявляСтся нСзависимой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, Π° прСдставляСт собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΈΠ½ΠΊΠΎΠ²Π°Π½ ΠΊ ядру Π²ΠΎ врСмя выполнСния. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ -c. ВсС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ символами. 

β€’ __KERNEL__ β€” Π­Ρ‚ΠΎΡ‚ символ сообщаСт Ρ„Π°ΠΉΠ»Π°ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, Ρ‡Ρ‚ΠΎ этот ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π² ядСрном Ρ€Π΅ΠΆΠΈΠΌΠ΅ (нравится ΠΌΠ½Π΅ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅), Π° Π½Π΅ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ процСсса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

β€’ MODULE β€” Π­Ρ‚ΠΎΡ‚ символ сообщаСт Ρ„Π°ΠΉΠ»Π°ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, Ρ‡Ρ‚ΠΎ Π½Π°Π΄ΠΎ Π΄Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ опрСдСлСния для модуля.

β€’ LINUX β€” ВСхничСски это Π½Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Однако, Ссли Π’Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ компилируСтся Π½Π° большС Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ счастливы, Ρ‡Ρ‚ΠΎ Π’Ρ‹ сдСлали Π΄Π°Π½Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π’Π°ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ частСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ OS-зависимыми. 

Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ символы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² зависимости ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ ядро. Если Π²Ρ‹ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, ΠΊΠ°ΠΊ ядро ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ, посмотритС Π² /usr/include/linux/config.h

β€’ __SMP__ β€” БиммСтричная многопроцСссорная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°. Π­Ρ‚ΠΎΡ‚ символ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, Ссли Π’Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для ядра, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ скомпилировано с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ Β«ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° SMPΒ» (Π΄Π°ΠΆΠ΅ Ссли Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π° однопроцСссорной машинС). Если Π’Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΡΠΈΠΌΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π½ΡƒΡŽ ΠΌΠ½ΠΎΠ³ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ хитрости, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ (см. Π³Π»Π°Π²Ρƒ 12).

β€’ CONFIG_MODVERSIONS β€” Если CONFIG_MODVERSIONS Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½, Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€ΠΈ компиляции модуля ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ /usr/include/linux/modversions.h. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΊΠΎΠ΄ΠΎΠΌ нСпосрСдствСнно. 

Makefile 

# Makefile для базисного ядСрного модуля

CC=gcc

MODCFLAGS := -Wall -DMODULE -D__KERNEL__ -DLINUX


hello.o:        hello.c /usr/include/linux/version.h

                $(CC) $(MODCFLAGS) -c hello.c

                echo insmod hello.o to turn it on

                echo rmmod hello to turn if off