1581, 19/80 ȸ¿ø°¡ÀÔ  ·Î±×ÀΠ 
   wolverine
   [ÀÚÀÛ] C °­ÁÂ [7] - PointerÀÇ È°¿ë (Device Driver)

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=2040 [º¹»ç]



À̹ø ÀåÀº pointerÀÇ ¶Ç ´Ù¸¥ È°¿ë¿¡ ´ëÇؼ­ ¾Ë¾Æº¸°Ú½À´Ï´Ù.

¸ðµç Processor´Â Áö¿øÇÏ´Â ÃÖ´ë ¸Þ¸ð¸® ¿µ¿ªÀÌ ÀÖÀ¸¸ç,
ÀÌ´Â ProcessorÀÇ address bus width¿¡ ÀÇÇؼ­ °áÁ¤ÀÌ µË´Ï´Ù.
¸¸¾à 32-bitÀ̸é 2^32, Áï 4G Byte ±îÁö addressing(¹øÁö ÁöÁ¤)ÀÌ °¡´ÉÇÕ´Ï´Ù.

»ç½Ç ÀÌ·¯ÇÑ addressing(¹øÁö ÁöÁ¤) °¡´ÉÇÑ Àüü address ¿µ¿ª Àüü¿¡
¸ðµÎ memory°¡ ´Þ·Á ÀÖ´Â °ÍÀº ¾Æ´Õ´Ï´Ù.
¶§·Î´Â ¾Æ¹« °Íµµ ¾È ´Þ·Á¼­ ºñ¾î(empty or reserved) ÀÖ´Â °æ¿ìµµ ÀÖ°í,
¶§·Î´Â ¸Þ¸ð¸®¿Í µ¿ÀÏÇÑ interface¸¦ °¡Áö´Â Hardware Device(ÀåÄ¡)µéÀÌ °æ¿ìµµ ÀÖ½À´Ï´Ù.
ÀÌ·¯ÇÑ HW Device¸¦ memory-mapped device¶ó°í ÇÕ´Ï´Ù.

HW device´Â ¸Þ¸ð¸® ó·³ interface¸¦ ¸¸µé¾î¼­ processor°¡ ÀÐ°í ¾²±â¸¦ ÇÒ ¼ö ÀÖ°Ô Áö¿øÀ» ÇÏ°í,
processor°¡ HW device ÀÚ½ÅÀÇ Æ¯Á¤ ¹øÁö¿¡ ¾î¶² °ªÀ» ¾²¸é ƯÁ¤ µ¿ÀÛÀ» ¼öÇàÇÏ°Ô µË´Ï´Ù.
¶ÇÇÑ, µ¿ÀÛÀÇ °á°ú°ªÀ» HW device ÀÚ½ÅÀÇ Æ¯Á¤ ¹øÁö¿¡ ÀúÀå½ÃÅ°¸é,
processor´Â ±× °ªÀ» ÀϾ ÇöÀç deviceÀÇ µ¿ÀÛ °á°ú³ª »óŸ¦ ¾Ë ¼ö ÀÖ°Ô µË´Ï´Ù.

¿¹¸¦ µé¾î¼­,

0x00000000 ~ 0x000FFFFF (Memory)
0x00100000 ~ 0x001FFFFF (Empry/Reserved)
0x00200000 ~ 0x00200FFF (Device 1)
0x00201000 ~ 0x00201FFF (Device 2)
0x00202000 ~ 0x00202FFF (Device 3)

°ú °°ÀÌ memory¿Í memory-mapped deviceµéÀÌ ÇÔ²² ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù.

[Note]
ÀÌÀü °­ÀÇ¿¡ ¾ð±ÞÇß´ø linker command file¿¡¼­´Â
ÇöÀç systemÀÌ °¡Áö°í ÀÖ´Â memory ¹øÁö¸¦ ¹Ýµå½Ã linker¿¡°Ô ¾Ë·ÁÁÖ¾î¾ß ÇÕ´Ï´Ù.
¸¸¾à, linker command file¿¡¼­ ¾Ë·ÁÁÖ´Â ½ÇÁ¦ ¸Þ¸ð¸® ¹øÁö(Physical Memory Map)¿Í
½ÇÁ¦ system ±¸¼ºÀÌ ´Ù¸£°Ô µÇ¸é,
½ÇÁ¦ ¸Þ¸ð¸®°¡ ¾ø´Â °÷¿¡ code¸¦ ¿Ã¸®°í º¯¼ö¸¦ ÇÒ´ç(allocation) ÇϰԵǾî
ÇÁ·Î±×·¥ÀÌ Á¤»óÀûÀ¸·Î µ¹¾Æ°¡Áö ¾Ê½À´Ï´Ù.

¾Æ¹«Æ°, Device Driver¶õ HW Device¸¦ control Çϱâ À§ÇÑ software¸¦ ¸»Çϸç,
±×·¯ÇÑ Device°¡ memory-mapped device ÀÎ °æ¿ì´Â pointer¸¦ ÀÌ¿ëÇØ¾ß ÇÕ´Ï´Ù.

¿¹¸¦ µé¾î¼­ À§ÀÇ device1 Àº
¿ì¸®°¡ 0x00200000 ¹øÁö¿¡ 1À» ¾²°Ô µÇ¸é device 1ÀÇ power°¡ on ÀÌ µÇ°í,
0À» ¾²°Ô µÇ¸é device 1ÀÇ power°¡ off°¡ µÈ´Ù
¶ó°í °¡Á¤À» Çϸé,

int *a;

a = 0x00200000;

*a = 1; // Device 1 power on
*a = 0; // Device 1 power off

ó·³ codingÀ» Çؼ­ software·Î device 1À» Á¦¾î ÇÏ°Ô µË´Ï´Ù.

À§¿¡ ÀÖ´Â 4ÁÙÀÇ code°¡ ¹Ù·Î device driver ÀÔ´Ï´Ù.

Memory-Mapped Device °¡ mappingµÈ ¸Þ¸ð¸® ¿µ¿ªÀº
º¯¼ö¿Í °°ÀÌ ÀϹÝÀûÀÎ ¸Þ¸ð¸® ¿µ¿ªÀ¸·Î´Â »ç¿ëÇÏÁö ¸øÇÕ´Ï´Ù.
º¯¼ö¿Í °°ÀÌ ÀÐ°í ¾²´Â µ¿ÀÛÀº °¡´ÉÇÏÁö¸¸,
¸ðµç ÇØ´ç addressÀÇ ¸ðµç bit°¡ Àбâ/¾²±â¸¦ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù.
ÀÌ·¯ÇÑ °ÍÀ» memory-mapped device control register ¶ó°í ÇÕ´Ï´Ù.
ÀÌ·¯ÇÑ ¿µ¿ªÀ» ¸¶À½µ¥·Î ÀÐ°í ¾²±â¸¦ Çϸé systemÀÌ ´ç¿¬È÷ ¿Àµ¿ÀÛÀ» ÇÏ°ÚÁÒ.

¿¹¸¦ µé¾î¼­
0x00200000 Device 1 control register ´Â
´ÙÀ½°ú °°Àº register functionÀ» °¡Áú ¼ö ÀÖ½À´Ï´Ù.

bit [0]:      power on/off        (R/W)
bit [2:1]:   clk speed 0,1,2,3   (R/W)
bit [4:3]:   Device Version      (Read Only)
bit [7:5]:   Reserved                 (N/A)

ºÎºÐÀûÀ¸·Î read/write¸¦ ÇÒ ¼ö ÀÖÁö¸¸,
³ª¸ÓÁö´Â ¾ÈµÇ´Â °æ¿ìµµ ÀÖ½À´Ï´Ù.

À§¿Í °°Àº hw control registerÀÇ Á¤º¸´Â
HW Datasheet·Î Á¦°øµÇ°Å³ª system ¼³°èÀÚ¿¡ ÀÇÇؼ­ Á¦°øµË´Ï´Ù.
Device Driver °³¹ßÀÚ´Â À§¿Í °°ÀÌ Á¦°øµÇ´Â datasheet¸¦ º¸°í,
HW¸¦ ¾î¶»°Ô ±¸µ¿½ÃųÁö ÀÌÇظ¦ ÇÏ°í ÀÖ¾î¾ß ÇÕ´Ï´Ù.
±×·± ´ÙÀ½ pointer¸¦ ÀÌ¿ëÇؼ­ ¿øÇÏ´Â memory-mapped device control register¸¦
ÀÐ°í ¾²´Â °úÁ¤À» ¼øÂ÷ÀûÀ¸·Î ¼öÇàÇÏ°Ô µË´Ï´Ù.
ÀÌ·¯ÇÑ codeµéÀÌ ¹Ù·Î device driver ÀÔ´Ï´Ù.

int *a;
int devVersion;

a = 0x00200000;

/* Read and extract Device Version */
devVersion = (((*a)>>3) & 0x3);
printf("HW Device Version: %d", devVersion);

*a = 0x1        /* power on */
       | (0x2<<1);  /* set clock speed 2 */

À§ÀÇ code´Â ¿¹½ÃµÈ control register Á¤º¸¸¦ ¹ÙÅÁÀ¸·Î ÀÛ¼ºÇÑ
°£´ÜÇÑ device driver ÀÔ´Ï´Ù.

Device driver¸¦ °³¹ßÇÒ ¶§¿¡,
c language¿Í pointer´Â ÇϳªÀÇ ¼ö´ÜÀÏ »ÓÀÔ´Ï´Ù.
¿µ¾î·Î ¼Ò¼³À̳ª ½Ã¸¦ ¾²±â À§Çؼ­´Â ÀÏ´Ü ¿µ¾î¸¦ ¹è¿ö¾ß ÇϵíÀÌ,
device driver¸¦ °³¹ßÇϱâ À§Çؼ­´Â c ¾ð¾î¿Í ±×Áß¿¡¼­µµ pointer¸¦ ¹Ýµå½Ã ¾Ë¾Æ¾ß ÇÕ´Ï´Ù.

¶ÇÇÑ, Device driver °³¹ßÀ» À§Çؼ­´Â
HW¿¡ ´ëÇÑ ±âº»ÀûÀÎ Áö½ÄÀÌ ÇÊ¿äÇϸç,
´Ù¸¥ ºÐ¾ßµµ ¸¶Âù°¡Áö ÀÌ°ÚÁö¸¸, ¿µ¾î´Â ÇʼöÀÔ´Ï´Ù.
À§¿¡¼­ ¸»ÇÑ HW datasheet´Â ´ë°Ô ¼ö½Ê~¼ö¹é pageÀÇ ¿µ¾î·ÎµÈ PDF ¹®¼­µé ÀÔ´Ï´Ù.

[Note]
Âü°í·Î Device Driver´Â À§¿Í °°ÀÌ Á÷Á¢ÀûÀ¸·Î HW¸¦ Á¦¾îÇÏ´Â CodeµéÀÔ´Ï´Ù.
ÀÌ·¯ÇÑ HW¸¦ Á¦¾îÇÏ´Â device driver´Â ¾î¶»°Ô º¸¸é ´Ü¼øÇÕ´Ï´Ù.
¸¸¾à USB Driver¸¦ §´Ù°í Çϸé,
USB Device¸¦ Á÷Á¢ÀûÀ¸·Î Á¦¾îÇÏ´Â low level device driver¸¦ °³¹ßÇÏ°í,
±×·¯ÇÑ °ÍµéÀ» USB spec¿¡ ¸Â°Ô È£ÃâÇÏ¿©ÁÖ´Â Äڵ尡 ÇÊ¿äÇÕ´Ï´Ù.
±×·¯ÇÑ code¸¦ Protocol Stack À̶ó°í ÇÕ´Ï´Ù.
USB¸¦ ÅëÇؼ­ device driver´Â ¹°¸®ÀûÀÎ data¸¦ º¸³»°í ¹Þ´Â µ¿ÀÛÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù.
Protocol StackÀº USB Åë½Å ±Ô¾à¿¡ µû¶ó¼­ ÀÛ¼ºµÈ codeÀÔ´Ï´Ù.
Device Driver¸¦ È£ÃâÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù.
Protocol StackÀº USB spec.°ú °°Àº Åë½Å ±Ô¾à¿¡ ÀÇÇؼ­ Äڵ带 ÀÛ¼ºÇϱ⠶§¹®¿¡,
´ëºÎºÐ °ÅÀÇ µ¿ÀÏÇÏÁö¸¸,
Device Driver´Â USB controller HW¸¦ ¸¸µå´Â ȸ»ç¿¡ µû¶ó¼­
ÁÖ¾îÁø HW¿¡ ¸Â°Ô ´Þ¶óÁö°Ô µË´Ï´Ù.

À̹ø Àå¿¡¼­´Â device driver¸¦ °³¹ßÇÒ¶§¿¡,
pointer°¡ ¾î¶² ½ÄÀ¸·Î ÀÌ¿ëÀÌ µÇ´ÂÁö ¾Ë¾Æº¸¾Ò½À´Ï´Ù.
Device Driver´Â ¾î·Á¿î ºÐ¾ß°¡ ¾Æ´Ï¶ó »ý¼ÒÇÑ ºÐ¾ßÀÏ »ÓÀÔ´Ï´Ù.
´©±¸³ª HW¿¡ ´ëÇÑ Á¤º¸¿Í °ü½É¸¸ ÀÖÀ¸¸é °³¹ß ÇÒ ¼ö ÀÖ½À´Ï´Ù.
±×·¯±â À§Çؼ­ c¿Í pointer´Â Çʼö ÀÔ´Ï´Ù.

ÀÌ»óÀ¸·Î À̹ø ÀåÀ» ¸¶Ä¨´Ï´Ù.

Best Regards,
Wolverine



  Hit : 6746     Date : 2012/07/13 10:39



    
kbg06163 ¾ÆÁ÷Àº Àß ¸ð¸£°Ù³×¿ä ¤Ð, 2012/07/28  
cd80 Ç×»ó ÁÁÀº °­ÀÇ Á¤¸» °¨»çÇÕ´Ï´Ù 2012/07/30  
1221   c¾ð¾î[2]     jyc_joy
01/17 6702
1220   [º¸¾È´º½º]µ¿¿µ»ó °¨»ó ÄÚµ¦ Çü½ÄÀÇ ¹ÙÀÌ·¯½º À¯Æ÷Áß .. ±ä±Þ[1]     Ǫ¸¥ÇÏ´Ã
09/01 6717
1219   [Æß]ÆÄÀ̽ã ÀÔ¹®[5]     G.O.D
08/27 6720
1218   [ÀÚÀÛ] 3. Hello, World![4]     whdgusdl1220
08/23 6725
1217   ÃÖ´ëÈ­[1]     goldcsj
08/13 6728
1216   ÇØÅ·Ä·ÇÁ ctf 5¹ø Ç®ÀÌ.[3]     lMaxl04
09/18 6729
1215   [ÀÚÀÛ] ´Ù¸¥»ç¶÷ÀÌ ¾Ë±â½¬¿îÄڵ带 ¾²ÀÚ.[5]     qa22ahj
04/03 6737
1214   [ÀÚÀÛ]À©µµ¿ì!! ¼û°ÜÁø ³ÊÀÇ ¸ð½ÀÀ» º¸¿©Áà!!!(Intro)[8]     º°ºûÀ»´ã¾Æ
02/01 6739
1213   [JAVA] ¿¡¼­ abstract ¿Í interface Â÷ÀÌÁ¡     poiu2069
09/16 6745
  [ÀÚÀÛ] C °­ÁÂ [7] - PointerÀÇ È°¿ë (Device Driver)[2]     wolverine
07/13 6745
1211   ÄÄÇ»ÅÍ º¸¾ÈÇÁ·Î±×·¥ ¹«½ÉÄÚ ³»·Á¹Þ¾Ò´Ù°£ ³¶ÆР    koresong
10/31 6746
1210   ¿Â¶óÀÎ ½ºÅ͵ð -¾Ë°í¸®Áò ¹× c¾ð¾îµî º¸¾È°øºÎÀÇ ±âÃʺÎÅÍ ÇÔ²² ÇϽǺÐ[2]     hackcorps
09/26 6747
1209   [Æß] ³» ÄÄÇ»ÅÍ º¸¾ÈÀ» À¯ÁöÇÏ·Á¸é ??     dzhfldk
08/22 6748
1208   Shift ÀÇ °£ÆíÇÑ 9°¡Áö ±â´É[12]     Ǫ¸¥ÇÏ´Ã
12/02 6754
1207   gdb tip (at&t -> intel)     key
02/20 6756
1206   [ÀÚÀÛ]GoogleÇØÅ·±âº»-ÀÍ¸í¼ºÀ» À§ÇÑ Ä³½Ã»ç¿ëPart1[7]     lsn10919
10/09 6760
1205   ¾Ïȣȭ[3]     leewoongki
12/07 6762
1204   [C¾ð¾î]1-1 C¾ð¾î ½ÃÀÛ[2]     JJ4eye0ng
02/10 6763
1203   [ÀÚÀÛ]Ãʺ¸ÀÚ¸¦ À§ÇÑ C ¾ð¾î °­Á ¸ðÀ½[2]     kevin0960
08/15 6764
1202   [Æß]À̹ø ÇØÄ·¿¡ µµ¿òµÉ ³×Æ®¿öÅ© ±âÃÊ ÀÚ·á ÀÔ´Ï´Ù.[1]     BLu2Scr22n
02/11 6769
[1]..[11][12][13][14][15][16][17][18] 19 [20]..[80]

Copyright 1999-2024 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org