ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux

Π”Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ устройств Π² Linux

Π§Π°ΡΡ‚ΡŒ 2: ПишСм Π² классС наш ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ для Linux

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»: «Device Drivers, Part 2: Writing Your First Linux Driver in the Classroom»
Автор: Anil Kumar Pugalia
Π”Π°Ρ‚Π° ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ: December 1, 2010
ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄: Н.Π ΠΎΠΌΠΎΠ΄Π°Π½ΠΎΠ²
Π”Π°Ρ‚Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°: июнь 2012 Π³.

Π‘Π²Π΅Ρ‚Π»Π°Π½Π° ΠΈ Пагс Π΄ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Π² свой класс с ΠΎΠΏΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΈΡ… профСссор ΡƒΠΆΠ΅ Π½Π°Ρ‡Π°Π» Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π»Π΅ΠΊΡ†ΠΈΡŽ. Π‘Π²Π΅Ρ‚Π»Π°Π½Π° Ρ€ΠΎΠ±ΠΊΠΎ попросила Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π²ΠΎΠΉΡ‚ΠΈ. Π Π°Π·Π΄Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΉ профСссор Π“ΠΎΠΏΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ»: «Π’Ρ…ΠΎΠ΄ΠΈΡ‚Π΅! Π’Ρ‹, Π΄Ρ€ΡƒΠ·ΡŒΡ, ΠΎΠΏΡΡ‚ΡŒ сСгодня ΠΎΠΏΠΎΠ·Π΄Π°Π»ΠΈ, ΠΈ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅»?

Пагс поспСшно ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ», Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ обсуТдали ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Ρƒ Ρ‚Π΅ΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ сСгодня ΠΈΠ·ΡƒΡ‡Π°ΡŽΡ‚ Π² классС β€” Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ устройств Π² Linux. Пагс Π±Ρ‹Π» Π±ΠΎΠ»Π΅Π΅, Ρ‡Π΅ΠΌ счастлив, ΠΊΠΎΠ³Π΄Π° профСссор сказал: «Π₯ΠΎΡ€ΠΎΡˆΠΎ! Π’ΠΎΠ³Π΄Π° Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ скаТитС ΠΎ динамичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π² Linux. Если Π²Ρ‹ ΡΠΏΡ€Π°Π²ΠΈΡ‚Π΅ΡΡŒ, Ρ‚ΠΎ я ΠΏΡ€ΠΎΡ‰Ρƒ вас ΠΎΠ±ΠΎΠΈΡ…!». Пагс Π·Π½Π°Π», Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ профСссора счастливым, это β€” ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Windows.

Он объяснил: «ΠšΠ°ΠΊ извСстно, ΠΏΡ€ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ установкС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² Π² Windows для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ систСму. А Ссли это, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ Π² случаС, Ссли это Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π° сСрвСрС? Π’ΠΎΡ‚ Π³Π΄Π΅ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Π²Π°Π΅Ρ‚ Linux. Π’ Linux ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ Π½Π° Π»Π΅Ρ‚Ρƒ, ΠΈ это Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сразу послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ систСмы. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ послС Π΅Π³ΠΎ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ. Π­Ρ‚ΠΎ называСтся динамичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² Π² Linux «.

Π­Ρ‚ΠΎ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»ΠΈΠ»ΠΎ профСссора. «Π₯ΠΎΡ€ΠΎΡˆΠΎ! Π˜Π΄ΠΈΡ‚Π΅ Π½Π° свои мСста, Π½ΠΎ большС Π½Π΅ ΠΎΠΏΠ°Π·Π΄Ρ‹Π²Π°ΠΉΡ‚Π΅». ΠŸΡ€ΠΎΡ„Π΅ΡΡΠΎΡ€ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ» Π»Π΅ΠΊΡ†ΠΈΡŽ: «Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСская Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², я, ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ написанию нашСго ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², ΠΏΠΎΠΊΠ°ΠΆΡƒ Π²Π°ΠΌ, ΠΊΠ°ΠΊ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°».

ДинамичСская Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ²

ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux

Рис.1: ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ собранныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Linux

Π§Ρ‚ΠΎΠ±Ρ‹ динамичСски Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ /sbin ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ с привилСгиями ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ root:

ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux

Рис.2: ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с модулями Linux

Наш ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ для Linux

Π‘Π±ΠΎΡ€ΠΊΠ° нашСго ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°

ПодвСдСм ΠΈΡ‚ΠΎΠ³

Команда lsmod Π΄ΠΎΠ»ΠΆΠ½Π° Π²Π°ΠΌ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ofd Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ПишСм свой Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ Linux

ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux

Π₯ΠΎΡ‡Ρƒ ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ΡŒΡΡ сразу, Ρ‡Ρ‚ΠΎ я вас отчасти ΠΎΠ±ΠΌΠ°Π½ΡƒΠ», ΠΈΠ±ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, Ссли Π²Π΅Ρ€ΠΈΡ‚ΡŒ Π²ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ β€” это ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ другая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ опСрационная систСма) ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ ΠΊ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΌΡƒ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡŽ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ устройства. А сСгодня ΠΌΡ‹ создадим Π½Π΅ΠΊΡƒΡŽ Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΡƒ для Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, Ρ‚.ΠΊ. Π½Π° самом Π΄Π΅Π»Π΅ Π½ΠΈ с ΠΊΠ°ΠΊΠΈΠΌ ΠΆΠ΅Π»Π΅Π·ΠΎΠΌ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ. Π­Ρ‚Ρƒ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ смоТСтС Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ сами, Ссли ΠΏΠΎΠΆΠ΅Π»Π°Π΅Ρ‚Π΅.

Π’ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ сСгодня создадим, ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π·Π²Π°Ρ‚ΡŒ LKM (Linux Kernel Module ΠΈΠ»ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ядра). Π‘Ρ‚ΠΎΠΈΡ‚ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ – это ΠΎΠ΄Π½Π° ΠΈΠ· разновидностСй LKM.

ΠŸΠΈΡΠ°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ΄ ядра Π»ΠΈΠ½Π΅ΠΉΠΊΠΈ 2.6. LKM для 2.6 отличаСтся ΠΎΡ‚ 2.4. Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π° различиях, ΠΈΠ±ΠΎ это Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ€Π°ΠΌΠΊΠΈ поста.

ΠœΡ‹ создадим символьноС устройство /dev/test, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ нашим ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ. Π₯ΠΎΡ‡Ρƒ сразу ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ символьноС устройство Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /dev, просто это являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Β«Π΄Ρ€Π΅Π²Π½Π΅Π³ΠΎ магичСского Ρ€ΠΈΡ‚ΡƒΠ°Π»Π°Β».

НСмного Ρ‚Π΅ΠΎΡ€ΠΈΠΈ

Если ΠΊΡ€Π°Ρ‚ΠΊΠΎ, Ρ‚ΠΎ LKM – это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΊΠΎΠ΄ для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ возмоТностСй ΡƒΠΆΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ ядра Linux. Π’.Π΅. Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ½ Π² пространствС ядра, Π° Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅ стоит ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ сСрвСрС. Π’ случаС ошибки, Π·Π°ΠΊΡ€Π°Π²ΡˆΠ΅ΠΉΡΡ Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ kernel panic. Π‘ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ я вас ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΠ».

ΠœΠΎΠ΄ΡƒΠ»ΡŒ ядра Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 2 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Ρ‹Ρ…ΠΎΠ΄Π°. ΠŸΠ΅Ρ€Π²Π°Ρ вызываСтся Π²ΠΎ врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ модуля Π² пространство ядра, Π° вторая, соотвСтствСнно, ΠΏΡ€ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π΅Π³ΠΎ. Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ°ΠΊΡ€ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ: module_init ΠΈ module_exit.

Π‘Ρ‚ΠΎΠΈΡ‚ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ нСсколько слов ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ printk(). ОсновноС Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” рСализация ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° рСгистрации событий ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ. Π˜Π½Ρ‹ΠΌΠΈ словами эта функция для записи Π² Π»ΠΎΠ³ ядра Π½Π΅ΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Π’.ΠΊ. Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² пространствС ядра, Ρ‚ΠΎ ΠΎΠ½ ΠΎΡ‚Π³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ ΠΎΡ‚ адрСсного пространства ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. А Π½Π°ΠΌ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½Π΅ΠΊΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция put_user(). Она ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ занимаСтся Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠΈΠ΄Ρ‹Π²Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· пространства ядра Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅.

Π₯ΠΎΡ‡Ρƒ Π΅Ρ‰Ρ‘ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ слов ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… устройствах.

ΠœΠ΅ΠΆΠ΄Ρƒ словом Β«diskΒ» ΠΈ Π΄Π°Ρ‚ΠΎΠΉ Π΅ΡΡ‚ΡŒ Π΄Π²Π° числа Ρ€Π°Π·Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… запятой. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ число Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΡΡ‚Π°Ρ€ΡˆΠΈΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ устройства. Π‘Ρ‚Π°Ρ€ΡˆΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для обслуТивания Π΄Π°Π½Π½ΠΎΠ³ΠΎ устройства. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ свой ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€.

Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ сильно ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² Ρ‚Π΅ΠΎΡ€ΠΈΡŽ, Ρ‚.ΠΊ. ΠΊΠΎΠΌΡƒ интСрСсно – Ρ‚ΠΎΡ‚ смоТСт сам ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ это ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅. Π― Π΄Π°ΠΌ ссылку Π² ΠΊΠΎΠ½Ρ†Π΅.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ

Для компиляции модуля Π½Π°ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ядра.

Π’ debian/ubutnu ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ (ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ для 2.6.26-2-686):
apt-get install linux-headers-2.6.26-2-686
Π›ΠΈΠ±ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ для вашСго Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ядра самим: fakeroot make-kpkg kernel_headers

Π˜ΡΡ…ΠΎΠ΄Π½ΠΈΠΊ

// НиТС ΠΌΡ‹ Π·Π°Π΄Π°Ρ‘ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΌΠΎΠ΄ΡƒΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Modinfo
MODULE_LICENSE( «GPL» );
MODULE_AUTHOR( «Alex Petrov

» );
MODULE_DESCRIPTION( «My nice module» );
MODULE_SUPPORTED_DEVICE( «test» ); /* /dev/testdevice */

#define SUCCESS 0
#define DEVICE_NAME «test» /* Имя нашСго устройства */

// ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ нашим устройством ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
static int device_open( struct inode *, struct file * );
static int device_release( struct inode *, struct file * );
static ssize_t device_read( struct file *, char *, size_t, loff_t * );
static ssize_t device_write( struct file *, const char *, size_t, loff_t * );

// ΠŸΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π° устройством
static struct file_operations fops =
<
.read = device_read,
.write = device_write,
.open = device_open,
.release = device_release
>;

// Ѐункция Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ модуля. Входная Ρ‚ΠΎΡ‡ΠΊΠ°. МоТСм ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ это наш main()
static int __init test_init( void )
<
printk( KERN_ALERT «TEST driver loaded!\n» );

// РСгистрируСм устройсво ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€ устройства
major_number = register_chrdev( 0, DEVICE_NAME, &fops );

// Π‘ΠΎΠΎΠ±Ρ‰Π°Π΅ΠΌ присвоСнный Π½Π°ΠΌ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€ устройства
printk( «Test module is loaded!\n» );

// Ѐункция Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ модуля
static void __exit test_exit( void )
<
// ОсвобоТдаСм устройство
unregister_chrdev( major_number, DEVICE_NAME );

printk( KERN_ALERT «Test module is unloaded!\n» );
>

// Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ наши Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ
module_init( test_init );
module_exit( test_exit );

static int device_open( struct inode *inode, struct file *file )
<
text_ptr = text;

static int device_release( struct inode *inode, struct file *file )
<
is_device_open—;
return SUCCESS;
>

static ssize_t device_read( struct file *filp, /* include/linux/fs.h */
char *buffer, /* buffer */
size_t length, /* buffer length */
loff_t * offset )
<
int byte_read = 0;

if ( *text_ptr == 0 )
return 0;

Π‘Π±ΠΎΡ€ΠΊΠ° модуля

Ну Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ нСбольшой Makefile:

И ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ:

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Ρ‡Ρ‚ΠΎ Ρƒ нас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ скомпилированном ΠΌΠΎΠ΄ΡƒΠ»Π΅:

root@joker:/tmp/test# modinfo test.ko
filename: test.ko
description: My nice module
author: Alex Petrov
license: GPL
depends:
vermagic: 2.6.26-2-openvz-amd64 SMP mod_unload modversions

Ну ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ† установим ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π² ядро:

root@joker:/tmp/test# insmod test.ko

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π΅ΡΡ‚ΡŒ Π»ΠΈ наш ΠΌΠΎΠ΄ΡƒΠ»ΡŒ с спискС:

root@joker:/tmp/test# lsmod | grep test

И Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΏΠ°Π»ΠΎ Π² Π»ΠΎΠ³ΠΈ:

root@joker:/tmp/test# dmesg | tail

[829528.598922] Test module is loaded!
[829528.598926] Please, create a dev file with ‘mknod /dev/test c 249 0’.

Наш ΠΌΠΎΠ΄ΡƒΠ»ΡŒ подсказываСм Π½Π°ΠΌ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

ΠŸΠΎΡΠ»Π΅Π΄ΡƒΠ΅ΠΌ Π΅Π³ΠΎ совСту:

root@joker:/tmp/test# mknod /dev/test c 249 0

Ну ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ† ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈ наш ΠΌΠΎΠ΄ΡƒΠ»ΡŒ:

root@joker:/tmp/test# cat /dev/test

Наш ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΡ‘ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… со стороны ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ:

root@joker:/tmp/test# echo 1 > /dev/test

bash: echo: ошибка записи: НСдопустимый Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Ρ‡Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ скаТСт ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π° наши дСйствия:

root@joker:/tmp/test# dmesg | tail

[829528.598922] Test module is loaded!
[829528.598926] Please, create a dev file with ‘mknod /dev/test c 249 0’.
[829747.462715] Sorry, this operation isn’t supported.

root@joker:/tmp/test# rmmod test

И посмотрим Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π°ΠΌ скаТСт Π½Π° ΠΏΡ€ΠΎΡ‰Π°Π½ΠΈΠ΅:

root@joker:/tmp/test# dmesg | tail

[829528.598922] Test module is loaded!
[829528.598926] Please, create a dev file with ‘mknod /dev/test c 249 0’.
[829747.462715] Sorry, this operation isn’t supported.
[829893.681197] Test module is unloaded!

Π£Π΄Π°Π»ΠΈΠΌ Ρ„Π°ΠΉΠ» устройства, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΎΠ½ нас Π½Π΅ смущал:

root@joker:/tmp/test# rm /dev/test

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅Π΅ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ этой Β«Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈΒ» зависит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ вас. МоТно ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΅Ρ‘ Π² настоящий Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ интСрфСйс ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ дСвайсу, Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для дальнСйшСго изучСния ядра Linux.

Волько Ρ‡Ρ‚ΠΎ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ ΠΏΡ€ΠΈΡˆΠ»Π° ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ бСзумная идСя ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ sudo Ρ‡Π΅Ρ€Π΅Π· Ρ„Π°ΠΉΠ» устройства. Π’.Π΅. посылаСм Π² /dev/test ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈ ΠΎΠ½Π° выполняСтся ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ root.

Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

И ΠΏΠΎΠ΄ ΠΊΠΎΠ½Π΅Ρ† Π΄Π°ΠΌ ссылку Π½Π° ΠΊΠ½ΠΈΠ³Ρƒ Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠΉ LKMPG (Linux Kernel Module Programming Guide)

UPD2:
ΠŸΠΎΠΏΡ€Π°Π²ΠΈΠ» ошибки Π² исходникС.
ΠŸΠ°Ρ€ΡΠ΅Ρ€ Π³Π»ΡŽΡ‡ΠΈΡ‚ ΠΈ сохраняСт ‘MODULE_DEscriptION( Β«My nice moduleΒ» );’. ЕстСствСнно Π² module_description всС Π±ΡƒΠΊΠ²Ρ‹ Π·Π°Π³Π»Π°Π²Π½Ρ‹Π΅.

UPD3:
segoon прислал нСсколько ΠΏΠΎΠΏΡ€Π°Π²ΠΎΠΊ ΠΊ посту:

1) Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ device_open() находится race condition:

static int device_open( struct inode *inode, struct file *file )
<
text_ptr = text;

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

РусскиС Π‘Π»ΠΎΠ³ΠΈ

ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ простой Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ Linux

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

1. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°

Π€Π°ΠΉΠ» Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° hello.c

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ с использованиСм printk Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Β«KERN_EMERGΒ» ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ Π½Π° консоль. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ printk print Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ Π½Π° 8 ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ, Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ выводится Π½Π° консоль, Π° Π½ΠΈΠΆΠ½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ выводится Π² Ρ„Π°ΠΉΠ» ΠΆΡƒΡ€Π½Π°Π»Π°.

Makefile трСбуСтся для компиляции Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°

Для компиляции Ρ„Π°ΠΉΠ»Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ подходящий make-Ρ„Π°ΠΉΠ», ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ компиляции Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ядра, ΠΏΡ€Π°Π²ΠΈΠ»Π° компиляции ΠΈ Ρ‚. Π”.

ВСстовый Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΊΠΎΠ΄ прилоТСния hellotest.c

Π’ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ тСстовом случаС сначала ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» устройства, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° устройство. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π·Π²Π°Π½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ xxx_open ΠΈ xxx_write Π² Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π΅, ΠΈ информация ΠΎ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована для опрСдСлСния, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ функция выполняСтся Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ тСста диска

ΠžΠ±Ρ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ тСстирования состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΈ тСстовоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€.

1. Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Makefile для компиляции hello.c ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, сгСнСрируйтС Β«hellomodule.koΒ».

2. Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ hellotest Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня.

3. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€

Когда insmod Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, вызываСтся функция hello_init (), ΠΈ распСчатанная отладочная информация выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² «/ proc / devices».

ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux

4. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΡƒΠ·Π΅Π»

Π₯отя Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ hellomodule.ko Π±Ρ‹Π» Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½, ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ HelloModule Ρ‚Π°ΠΊΠΆΠ΅ отобраТаСтся Π² Ρ„Π°ΠΉΠ»Π΅ / proc / devices, этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ устройств / dev Π½Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π° устройства. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡƒΠ·Π΅Π» устройства.

НомСр основного устройства модуля HelloModule Π² / proc / devices Ρ€Π°Π²Π΅Π½ 231. Когда ΡƒΠ·Π΅Π» создаСтся, Ρ„Π°ΠΉΠ» устройства / dev / hellodev ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ Π½ΠΎΠΌΠ΅Ρ€Ρƒ основного устройства. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠΌ / dev / hellodev, ΠΎΠ½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ HelloModule.

ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ / proc / devices ΠΈ / dev

5. Π’Ρ‹Π·ΠΎΠ² Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° прилоТСния Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ hellotest сначала ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» «/ dev / hellodev», Π° Π·Π°Ρ‚Π΅ΠΌ записываСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ val Π² этот Ρ„Π°ΠΉΠ». Π’ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ этого ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π·Π²Π°Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ hello_open ΠΈ hello_write Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π΅. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ hellotest.

ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux

6. Π£Π΄Π°Π»ΠΈΡ‚Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€

Когда insmod удаляСт Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, ΠΎΠ½ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ hello_exit (), ΠΈ пСчатная информация ΠΎΠ± ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux

Π‘ΡƒΠΌΠΌΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ модуля:

(1) ЗарСгистрируйтС ΠΌΠΎΠ΄ΡƒΠ»ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ insmod

(2) Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» устройства Β«xxxΒ» Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ / dev с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ mknod ΠΈ установитС соСдинСниС с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ Ρ‡Π΅Ρ€Π΅Π· основной Π½ΠΎΠΌΠ΅Ρ€ устройства.

(3) ΠŸΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ управляСт Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ Ρ‡Π΅Ρ€Π΅Π· Ρ„Π°ΠΉΠ» устройства / dev / xxx

Π’Ρ€ΠΈ, диск шаблон

1. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹

init.h опрСдСляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, связанныС с ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°
kernel.h опрСдСляСт часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ опрСдСлСния макросов
module.h опрСдСляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ макросы, связанныС с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ ядра

2. Ѐункция ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

Когда Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ загруТаСтся Π² ядро, эта функция ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ автоматичСски.

Ѐункция ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ модуля, ΠΊΠ°ΠΊ слСдуСт ΠΈΠ· названия. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ функция Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² рСгистрации Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· register_chrdev. Π―Π΄Ρ€ΠΎ выдСляСт Ρ‡Π°ΡΡ‚ΡŒ памяти (массив) для хранСния Π½Π°Π±ΠΎΡ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ символьного устройства.Ѐункция register_chrdev Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ содСрТимоС hello_flops Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ HELLO_MAJOR этого массива, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ адрСс Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ HelloModule для Π½Π°Π±ΠΎΡ€Π° памяти управлСния устройством.

ΠœΠ΅Ρ‚Π°Ρ„ΠΎΡ€Π° изобраТСния, ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ опСрационная систСма прСдоставляСт мноТСство вСшалок для ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹, Π° зарСгистрированноС устройство ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° повСшСниС ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ вСшалкС для ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹. На ΠΎΠ΄Π΅ΠΆΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠ°Ρ€ΠΌΠ°Π½ΠΎΠ², ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ мноТСство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… интСрфСйсов. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ устройства, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сначала Π½Π°ΠΉΡ‚ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π²Π΅ΡˆΠ°Π»ΠΊΡƒ для ΠΎΠ΄Π΅ΠΆΠ΄Ρ‹, Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΉΡ‚ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠ°Ρ€ΠΌΠ°Π½, Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ дСйствиС.

ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux

3. Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Когда Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΡƒΠ΄Π°Π»Π΅Π½, функция Π²Ρ‹Ρ…ΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° автоматичСски, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ понятныС Π·Π°Π΄Π°Ρ‡ΠΈ.

ΠŸΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΌΡ‹ рСгистрировали ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ модуля Π² памяти устройства управлСния. ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ пространство памяти, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ΅ этим ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ рСгистрации Π΄Ρ€ΡƒΠ³ΠΈΡ… устройств остаСтся большС мСста для Π²Ρ‹Π±ΠΎΡ€Π°.

ΠœΠ΅Ρ‚Π°Ρ„ΠΎΡ€Π° изобраТСния Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ΅ диска ΠΎΠ΄Π΅ΠΆΠ΄Π° снимаСтся с вСшалки, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ вСшалка становится пустой.

4. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎΠ± авторских ΠΏΡ€Π°Π²Π°Ρ…

Π―Π΄Ρ€ΠΎ Linux Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½ΠΎ Π² соотвСтствии с GPL, ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Linux Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± авторских ΠΏΡ€Π°Π²Π°Ρ…, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС систСма выдаст ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π² ядро.

5. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ функция

ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linuxView Code

Π’-Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹Ρ…, процСсс выполнСния ΠΎΡ‚ прилоТСния Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня Π΄ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π½ΠΈΠΆΠ½Π΅Π³ΠΎ уровня

1. Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΠ°Ρ структура систСмы Linux

ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux

2. ΠŸΡ€ΠΎΡ†Π΅ΡΡ выполнСния ΠΎΡ‚ прилоТСния Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня Π΄ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π½ΠΈΠΆΠ½Π΅Π³ΠΎ уровня

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ «open (» / dev / hellodev «, O_RDWR)» Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ.

(1) ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ открытия, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅ΠΌΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» устройства, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ hellodev.

(2) Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° выполняСт swi-ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π² соотвСтствии с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ open, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ сбоям Π² Ρ€Π°Π±ΠΎΡ‚Π΅ процСссора ΠΈ попаданию Π² ядро.

(3) Ѐункция ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ядра Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π² соотвСтствии с этими ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ.

(4) Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€.

(5) Π’Π΅Ρ€Π½ΠΈΡ‚Π΅ дСскриптор Ρ„Π°ΠΉΠ»Π° Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π° Π·Π°Ρ‚Π΅ΠΌ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

3. Π₯арактСристики исполнСния водитСля

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ запускаСтся Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ, ΠΎΠ½ пассивСн: ΠΎΠ½ инициализируСтся Π² соотвСтствии с трСбованиями ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись выполняСтся Π² соотвСтствии с трСбованиями ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ загруТаСтся Π² ядро, просто говоря ядру: Β«Π― здСсь, я ΠΌΠΎΠ³Ρƒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ эти задания», ΠΈ ΠΊΠΎΠ³Π΄Π° эти задания Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ, это зависит ΠΎΡ‚ прилоТСния.

Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² «пространствС ядра», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ «довСрия» систСмы. Ошибки Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ сбою всСй систСмы.

«ПолноС руководство ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для встроСнного LinuxΒ»

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

РусскиС Π‘Π»ΠΎΠ³ΠΈ

Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π² ядро ​​ядра (linux)

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ, основной способ компиляции Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π² ядро

Π•ΡΡ‚ΡŒ Π΄Π²Π° способа ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π² ядро ​​под linux:
1) БтатичСская компиляция
2) ДинамичСская компиляция

БтатичСская компиляция Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ исходного ΠΊΠΎΠ΄Π° Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π² исходный ΠΊΠΎΠ΄ ядра ядра, Π° Π·Π°Ρ‚Π΅ΠΌ Π² настройкС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· графичСский интСрфСйс.ПослС настройки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² сохранитС ΠΈ Π²Ρ‹ΠΉΠ΄ΠΈΡ‚Π΅, Π·Π°Ρ‚Π΅ΠΌ скомпилируйтС ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, скомпилированный, ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для записи Записанный Ρ„Π°ΠΉΠ» здСсь Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ uImage.

Π’Ρ‹Π±Π΅Ρ€Π΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΈΠ»ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ, зависит ΠΎΡ‚ Π²Π°ΡˆΠΈΡ… потрСбностСй.

Один, статичСская компиляция

Π― Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ объясняю, ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ модуля Π² графичСский интСрфСйс. Π¨Π°Π³ΠΈ, ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ графичСскому интСрфСйсу (make menuconfig), Π±Ρ‹Π»ΠΈ ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹. ΠŸΠ΅Ρ€Π΅Π΄ этим я просмотрСл мноТСство руководств, поэтому я Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ ΠΈΡ… здСсь.

1. О скачанных Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°Ρ…

2) ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ связанных Ρ„Π°ΠΉΠ»ΠΎΠ² исходного ΠΊΠΎΠ΄Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°

Π’ исходном ΠΊΠΎΠ΄Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 2 Ρ„Π°ΠΉΠ»Π°:

Kconfig
Π€Π°ΠΉΠ» Kconfig ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для описания ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ связанных ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… графичСского интСрфСйса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Π²Ρ‹Π±ΠΎΡ€Π° соотвСтствуСт этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ (<> (Π” / Н / М), [] [Π” / Н ]…), НапримСр, описаниС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, относящСйся ΠΊ этой ΠΎΠΏΡ†ΠΈΠΈ ΠΈ Ρ‚. Π”., Если Kconfig отсутствуСт, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. Π’ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Wi-Fi Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. ПослС создания Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (Ссли Kconfig ΡƒΠΆΠ΅ сущСствуСт, Π½Π΅ измСняйтС Π΅Π³ΠΎ):

Kconfig
Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π² послСднюю строку Kconfig:

Makefile измСняСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ПослС измСнСния Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²Π²Π΅Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ make menuconfig Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ telminal ΠΈ снова Π²ΠΎΠΉΠ΄Π΅Ρ‚Π΅ Π² графичСский интСрфСйс, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ появились ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ (ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅). РасполоТСниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° связано с ΠΏΡƒΡ‚Π΅ΠΌ ΠΊ исходному ΠΊΠΎΠ΄Ρƒ вашСго Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°.Π§Π΅ΠΌ Π³Π»ΡƒΠ±ΠΆΠ΅ ΠΏΡƒΡ‚ΡŒ ΠΊ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ Π² исходном ΠΊΠΎΠ΄Π΅ ядра, Ρ‚Π΅ΠΌ Π³Π»ΡƒΠ±ΠΆΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ Π² графичСском интСрфСйсС.
ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ справки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ описания:ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux. Π€ΠΎΡ‚ΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄ linux

Π”Π²Π°, динамичСская компиляция

Π’ΠΎΡ‚ всС ΠΆΠ΅ Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° возьмСм ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Wi-Fi. ПослС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ исходного ΠΊΠΎΠ΄Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Makefile. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ измСнСния Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€?

здравствуйтС! Π΅ΡΡ‚ΡŒ ΠΏΠ»Π°Ρ‚ΠΊΠ° с at91rm9200, Π½Π° Π½Π΅ΠΉ крутится линукс, ΠΏΠΎ i2c ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ l3g4200 ΠΈ Π½Π°Π΄ΠΎ Ρ‡Ρ‚ΠΎΠ± Π² ядрС Π±Ρ‹Π» Π΅Π³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€. сам Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ написан, ссылка Π²ΠΎΡ‚ http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/SW_DRIVER/l3g4. Π° ΠΊΠ°ΠΊ Π΅Π³ΠΎ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ Π² ядро? Π²Π΅Ρ€Π½Π΅ΠΉ Π΅Π³ΠΎ Π½Π°Π΄ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π° ΠΏΠΎΡ‚ΠΎΠΌ Ρ‡Π΅Ρ€Π΅Π· menuconfig ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΠΎ ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ядро(это я научился).

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΎ JB ΠΈΠ· Development

стоп. Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ какая Ρ‚ΠΎ ΠΏΠ°ΠΏΠΊΠ° Π² исходниках ядра, Π³Π΄Π΅ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ΡΡ всС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. Ρ‚Π°ΠΊ? Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΌΠ½Π΅ Π²Π·ΡΡ‚ΡŒ ΠΌΠ΅ΠΉΠΊΡ„Π°ΠΉΠ» для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходник?

Π­Ρ‚ΠΎ ΠΎΠ±Ρ€Π΅Π·ΠΎΠΊ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ, Π° Π½Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°.

ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ /usr/src/kernels/linux-3.0/drivers/sfi

ΠΈΠ»ΠΈ я ΠΎΠΏΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ Π½Π΅ понял?

http://pastebin.com/EdyeucmR
Π²ΠΎΡ‚ это сохрани ΠΊΠ°ΠΊ Makefile ΠΈ напиши Π² консоли make Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², всё

Π²ΠΎΠΎΠ±Ρ‰Π΅ я Π½Π΅ понял. ядро Ρƒ мСня 2.6.30 стоит Π½Π° ΠΏΡ€ΠΎΡ†Π΅, это Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ стоит 3.0.0-12. ΠΌΠΎΠΆΠ΅Ρ‚ это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚, ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎ?

ΠΊΡ€ΠΎΠΌΠ΅ linux device drivers Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠΈΠ»ΠΈ Π΅Ρ‰Π΅ Π½Π°Π΄ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Π½Π° ядро?

всС Ρ€Π°Π²Π½ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π²ΠΎΠΎΠ±Ρ‰Π΅ΠΌ Π² Ρ‚ΠΎΠΏΠΊΡƒ, Π±ΡƒΠ΄Ρƒ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ linux device drivers ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ с нуля

Π’ΠΎΠΆΠ΅ машинка Π½Π° этом ΠΏΡ€ΠΎΡ†Π΅ ΠΈ Ρ‚Π° ΠΆΠ΅ ИБ гироскопа. Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΡƒΠ΄Π°Π»ΠΎΡΡŒ, дСлалось ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ Makefile’ΠΎΠΌ, Π½ΠΎ с make ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈΡΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ARCH=arm CROSS_COMPILE=arm-unknown-linux-uclibcgnueabi- (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ кросс-компиляция).
Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π» Π½Π° Ρ†Π΅Π»Π΅Π²ΡƒΡŽ систСму, Π² домашнюю ΠΏΠ°ΠΏΠΊΡƒ, дСлаю:
%insmod l3g4200d.ko
%lsmod
Module Size Used by
l3g4200d 6456 0
%ls /sys/bus/i2c/drivers
ev_driver dummy l3g4200d rtc-ds1672
%ls /sys/bus/i2c/devices/
0-0068

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΡΡ Π² ядро, появился Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /sys/bus/i2c/drivers, Π½ΠΎ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /sys/bus/i2c/devices/, Π³Π΄Π΅ ΠΎΠ½ Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎ Π»ΠΎΠ³ΠΈΠΊΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» Π±Ρ‹Ρ‚ΡŒ, Π΅Π³ΠΎ Π½Π΅Ρ‚Ρƒ (0-0068 это часы Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ rtc-ds1672, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π±Ρ‹Π» встроСн Π² ядро).

Π§Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ вся эта ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°? ИБ Π»ΠΈΠ±ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ? Или я Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ нСдонастраивал ΠΈ эту ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ? Бпасибо.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *