[[TableOfContents]] = ¸ñÀû = ÀÌ ¹®¼­´Â À¯¿µÃ¢´ÔÀÇ ¸®´ª½º µð¹ÙÀ̽º µå¶óÀ̹ö¶õ Ã¥À» Åä´ë·Î Á¦°¡ °øºÎÇÑ °á°ú¸¦ Á¤¸®ÇÑ ¹®¼­ÀÔ´Ï´Ù. Ã¥ÀÇ ¿ä¾àº¸´Ù´Â °¢ À庰 Á¦°¡ ¹è¿ì°í ´À³¤Á¡À» Á¤¸®ÇÏ´Â µ¥ ÃÊÁ¡À» µÑ °ÍÀÔ´Ï´Ù. = Self Study Memo = == 2006-03-18 == * Ä¿³Î¼Ò½º Áغñ * Å×½ºÆ® Ŷ Á¦ÀÛ == 2006-03-23 == === 2Àå. ¸®´ª½º Ä¿³Î°ú µð¹ÙÀ̽º µå¶óÀ̹ö === ==== Ä¿³Î¿¡ ´ëÇÑ °³°ýÀûÀÎ ¼³¸í ==== * Ä¿³Î ¼Ò½ºÀÇ ±¸Á¶ * Documentation/ * arch/ : ¾ÆÅ°ÅØó¿Í ¹ÐÁ¢ÇÑ ¼Ò½ºµé À§Ä¡ * include/asm : ½Éº¼¸¯ ¸µÅ©, ¾ÆÅ°ÅØó Ư¼º¿¡ ¸Â´Â * include/linux : Ç¥ÁØ ¸®´ª½º Ä¿³Î°ú °ü·ÃµÈ Çì´õÆÄÀÏ * Ä¿³Î ¼Ò½º Ž»ö¹æ¹ý * [http/lxr.linux.no Ä¿³Î ¼Ò½º¸¦ À¥ºê¶ó¿ìÀú·Î º¸¿©ÁØ´Ù] * grep»ç¿ë * »ç¿ë¹ý: grep [¿É¼Ç] ... ÆÐÅÏ [ÆÄÀÏ] ... * greb readb * -r : ÇϺΠµð·ºÅ丮¸¦ ¸ðµÎ ´ã»öÇÏ¿© readb¶ó´Â ¹®ÀÚ¿­ °Ë»ö * greb readb * -r | greb include : readb °Ë»ö°á°ú¿¡¼­ include°¡ Æ÷ÇÔµÈ °Íµé¸¸. * À§¿Í °°ÀÌ grebÀ» ¿©·¯°³ °ãÃľ²¸é À¯¿ë ==== µð¹ÙÀ̽º µå¶óÀ̹ö ==== * Ä¿³Î¿¡ ÀÚ¿ø ó¸® ¿äû - ½Ã½ºÅÛ È£Ãâ(½Ã½ºÅÛÄÝ, ¼ÒÇÁÆ®¿þ¾î ÀÎÅÍ·´Æ®), µð¹ÙÀ̽º µå¶óÀ̹ö(ÆÄÀÏ ÀÔÃâ·Â °³³ä) * ¸ð±Ö°ú µð¹ÙÀ̽º ÆÄÀÏ * ¸ðµâ : ´Ù¾Æºñ½º µå¶óÀ̹ö¸¦ Ä¿³Î ¼Ò½º¿¡¼­ ºÐ¸®½ÃŲ °Í? * µð¹ÙÀ̽º ÆÄÀÏ : ½Ã½ºÅÛ¿¡ ÀÖ´Â ¸ðµç ÀÚ¿øÀ» ÆÄÀÏ Çü½ÄÀ¸·Î Ç¥Çö * /dev/¿¡ À§Ä¡ * ½Ã½ºÅÛ ¶Ç´Â Çϵå¿þ¾î Á¤º¸¸¦ Á¦°ø * µð¹ÙÀ̽º ŸÀÔ : ¹®ÀÚ or ºí·Ï * ÁÖ ¹øÈ£(Major) : ÀÀ¿ë ÇÁ·Î±×·¥°ú µð¹ÙÀ̽º µå¶óÀ̹ö »çÀÌÀÇ ¿¬°á °í¸® * ºÎ ¹øÈ£(Minor) : ½ÇÁúÀûÀÎ µð¹ÙÀ̽º '''''<<== ÁÖ ¹øÈ£¿Í ºÎ ¹øÈ£ÀÇ Â÷ÀÌ°¡ ¹«¾ùÀΰ¡?''''' * µð¹ÙÀ̽º µå¶óÀ̹öÀÇ Á¾·ù * ¹®ÀÚ : ÀÓÀÇÀÇ ±æÀ̸¦ °®´Â ¹®ÀÚ¿­, ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­, ¹öÆÛ¾ø´Â * ºí·° : ÀÏÁ¤ Å©±âÀÇ ¹öÆÛ¸¦ ÅëÇØ µ¥ÀÌÅ͸¦ ó¸®, Ä¿³Î ³»ºÎÀÇ ÆÄÀÏ ½Ã½ºÅÛ¿¡¼­ °ü¸® * ³×Æ®¿öÅ© : ³×Æ®¿öÅ© Ãþ°ú ¿¬°áµÈ µð¹ÙÀ̽º µå¶óÀ̹ö * ÅëÇÕÇü µð¹ÙÀ̽º µå¶óÀ̹ö(Ä¿³Î 2.6ºÎÅÍ) * device : ½ÇÁ¦ Á¸ÀçÇÏ´Â Çϵå¿þ¾î * driver : µð¹ÙÀ̽º¸¦ Á¦¾îÇÏ´Â ¼ÒÇÁÆ®¿þ¾î * bus : Çϵå¿þ¾î°¡ ¿¬°áµÈ ¹ö½º¸¦ ÀÇ¹Ì '''''<<==¹ö½ºµµ µð¹ÙÀ̽º ¶ó°í ÇÒ ¼ö ÀÖ³ª?''''' * class : Çϵå¿þ¾îÀÇ Á¾·ù * interface : ³í¸®ÀûÀÎ ÀÎÅÍÆäÀ̽º * Kconfig '''''<-- ÁýÁß Å½±¸ ÇÊ¿ä''''' * ÀÌ ¼³Á¤ÆÄÀÏ ¾È¿¡ µð¹ÙÀ̽º°¡ ¼³Á¤µÇ¾î ÀÖÀ¸¸é Ä¿³ÎÀÇ ÄÄÆÄÀÏ ¿É¼Ç¿¡ ÇØ´ç µð¹ÙÀ̽º°¡ ³ªÅ¸³ª°Ô µÈ´Ù??? === 3Àå. µð¹ÙÀ̽º ÆÄÀÏ°ú Àú¼öÁØ ÆÄÀÏ ÀÔÃâ·Â === ==== µð¹ÙÀ̽º ÆÄÀÏ°ú ÆÄÀÏ ÀÔÃâ·Â ÇÔ¼ö ==== * mknod [µð¹ÙÀ̽º ÆÄÀϸí] [µð¹ÙÀ̽º ÆÄÀÏÇü] [ÁÖ ¹øÈ£] [ºÎ ¹øÈ£] * µð¹ÙÀ̽º ÆÄÀÏ¿¡´Â fopen°ú °°Àº ½ºÆ®¸² ÆÄÀÏ ÀÔÃâ·Â ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é ¾ÈµÈ´Ù. ==== Àú¼öÁØ ÆÄÀÏ ÀÔÃâ·Â ÇÔ¼ö ==== ==== µð¹ÙÀ̽º ÆÄÀÏ °ü·Ã ÇÔ¼ö ==== * mknod {{{#!vim c #include #include #include #include int mknod(const char* pathname, mode_t mode, dev_t dev); }}} * S_IFCHR(¹®ÀÚ), S_IFBLK(ºí·Ï) * S_IRWXU : »ç¿ëÀÚ¿¡ Àбâ, ¾²±â * S_IRWXG : ±×·ì¿¡ Àбâ, ¾²±â * dev : ÁÖ¹øÈ£¿Í ºÎ¹øÈ£ ÁöÁ¤ --> (240<<8) | 1 * perror() : ½ÇÆÐ ÀÌÀ¯¿¡ ´ëÇÑ error ¹øÈ£¸¦ Çؼ®ÇÏ¿© ¹®ÀÚ¿­·Î Ç¥Çö ==== Àú¼öÁØ ÆÄÀÏ ÀÔÃâ·Â ÇÔ¼öÀÇ »ç¿ë ¿¹Á¦ ==== ===== port.c ===== {{{#!vim c /* * Test /dev/port device file. * Output data to print port that is located 0x378 * It connected 8-LED. */ #include #include #include #include int main(int argc, char **argv) { int fd; // File Descripter int lp; // Loop Counter unsigned char buff[1]; // Buffer for write fd = open("/dev/port", O_RDWR); // open /dev/port in read & write mode if(fd < 0) // open error, fd must be unsigned. { perror("/dev/port open error"); } while(1) // Infinite loop. It must be terminated manually. { for(lp = 0; lp < 8; lp++) // loop 8th times. { lseek(fd, 0x378, SEEK_SET); // Define file pointer is 0x378 that is parallel port. buff[0] = (0x01 << lp); // shift lp times. LED will be shifted. write(fd, buff, 1); // Out to print port. sleep(1); // delay some time. Maybe 1 second? } } close(fd); return 0; } }}} ===== lp.c ===== {{{#!vim c /* * test ioctl() by using /dev/lp0. * /dev/lp0 can control printer port. It is used to check printer status. * 13 Pin -> LP_PSELECD * 12 Pin -> LP_POUTPA * 10 Pin -> LP_PACK * If button is pushed, they are connected to ground. * So logic value is change to zero. */ #include #include #include #include #include int main(int argc, char **argv) { int fd; // file descripter. int prnstate; // save state of print port. int lp; // loop counter. fd = open("/dev/lp0", O_RDWR | O_NDELAY); // open read & write & no_delay. if(fd < 0) { perror("open error"); exit(1); } while(1) { ioctl(fd, LPGETSTATUS, &prnstate); // load print status to prnstate. /* To get status of printer, * We define parameter of ioctl() is LPGETSTATUS. */ if((prnstate & LP_PSELECD) == 0) // LP_PSELECD is 13 Pin. It is connected GND. printf("LP_PSELECK\n"); else if((prnstate & LP_POUTPA) == 0) printf("LP_POUTPA\n"); else if((prnstate & LP_PACK) == 0) printf("LP_PACK\n"); else printf("ON\n"); usleep(50000); } close(fd); return 0; } }}} ===== mknod ¸í·É°ú Àú¼öÁØ ÆÄÀÏ ÀÔÃâ·Â ÇÔ¼ö Á¤¸® ===== === 4Àå. °£´ÜÇÑ ¸ðµâ Å×½ºÆ® === ==== ¸ðµâ ==== * ¾î¶² ±â´ÉÀ» ±¸ÇöÇÏ´Â Ä¿³Î ºÎºÐÀ» ÀǹÌÇϸç ELF Çü½ÄÀÇ °´Ã¼ ÆÄÀÏ * Hello worldÇÁ·Î±×·¥ ¹®Á¦ ¹ß»ý.. Ã¥¿¡¼­´Â Ä¿³Î ¹öÀüÀÌ 2.6.4Àε¥ ºñÇØ Áö±Ý »ç¿ëÁßÀÎ Ä¿³ÎÀº 2.6.14.7À̶ó ¹öÀüÀÌ Æ²·Á¼­ Àΰ¡ ÇßÁö¸¸ °á±¹. ¿ÀŸ·Î ¹àÇôÁü. * Makefile¿¡¼­ ogj-m := test.c¶ó°í Çسù¾úÀ½.. --;;; * ¸ðµâ µ¿Àû ¸µÅ© °³³ä * ½Éº¼ Å×ÀÌºí¿¡ ¿ÜºÎ ÂüÁ¶°¡ °¡´ÉÇÑ ÇÔ¼öÀÇ ½Éº¼°ú ÁÖ¼Ò°¡ µî·ÏµÇ¾îÀÖÀ½. * ¸ðµâÀÌ Ä¿³Î¿¡ ÀûÀçµÉ¶§ Ä¿³Î³»ÀÇ ½Éº¼ Å×À̺íÀ» ÂüÁ¶ÇÏ°í ÁÖ¼Ò¸¦ ¾ò´Â´Ù. * ¸ðµâ¿¡ ¿ÜºÎ ÂüÁ¶µÈ ½Éº¼ ¼±¾ðÀº °´Ã¼¿Í Å×À̺íÀ» ÀÌ¿ëÇØ °ü¸® <== '''''¹«½¼ ¸»''''' * ¸ðµâÀÇ ¿ÜºÎ ÂüÁ¶°¡ ¼±¾ðµÈ ½Éº¼µéÀ» Ä¿³Î ³»ÀÇ ½Éº¼ Å×ÀÌºí¿¡ µî·Ï * '''''¸ðµâÀÇ ¿ÜºÎ ÂüÁ¶ ½Éº¼ÀÌ ¸ðÁö?''''' * ¸ðµâ Äڵ忡¼­ ¼±¾ðµÇÁö ¾Ê¾Ò´ø ÁÖ¼Ò¸¦ ¸ðµÎ ¼±¾ðÇϸé Ä¿³Î¿¡ µî·ÏµÈ´Ù. * Ä¿³Î¿¡¼­ »ç¿ëÇÏ´Â ½Éº¼ Å×À̺íÀº cat /proc/ksyms * ¸ðµâ À¯Æ¿¸®Æ¼ * insmod * rmmod * lsmod * depmod * modprobe * ¸ðµâÀûÀç °úÁ¤ -- ''''ÀÌÇØ°¡ ¾È°¨. Á¦°Å °úÁ¤µµ ¸¶Âù°¡Áö''''' ==== ¸ðµâ ¼Ò½º Çü½Ä ==== * Çì´õÆÄÀÏ {{{ #include #include #include }}} * ¸ðµâ °ü·Ã ÇÔ¼ö Ç¥±â¹ý {{{ module_init(hello_init); // »ç¿ëÀÚ°¡ ÀÓÀÇ·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. module_exit(hello_exit); }}} ==== ¸ðµâ ¸Å°³º¯¼ö ÁöÁ¤ ==== * µð¹ÙÀ̽º µå¶óÀ̹ö¿Í °°Àº ÃʱⰪ Áß¿¡¼­ ¿ÜºÎ¿¡¼­ º¯°æÇÒ ¼ö ÀÖ´Â °ÍÀ» '''¸ðµâ ¸Å°³º¯¼ö''' * ¼³Á¤°ªÀ» ±×¶§ ±×¶§ ´Ù¸£°Ô ÇØ ÁÙ¶§ »ç¿ëÇұ.. {{{ #define static int onevalue = 1; static char *twostring = NULL; module_param(onevalue, int, 0); module_param(twosrting, charp, 0); }}} * module_param(º¯¼ö¸í, º¯¼ö ŸÀÔ, Á¢±Ù ¼Ó¼º) ==== Ä¿³Î ¸Þ½ÃÁö Ãâ·Â ==== * printk(·Î±×·¹º§, "¸ÞÁö½Ã"); * µðÆúÆ®´Â 4 * Ä¿³Î ¸Þ½ÃÁö´Â ¹Ù·Î ÄַܼΠÃâ·ÂµÇÁö ¾Ê°í ¿øÇü Å¥ÇüÅ·Π·Î±×¹öÆÛ¿¡ ÀúÀåµÈ´Ù. * dmesg¸¦ »ç¿ëÇϸé Ä¿³Î ¸Þ½ÃÁö¸¦ º¼ ¼ö ÀÖ´Ù. * cat /proc/kmsg ´Â ¸Þ½ÃÁö ¹Ù·Î¹Ù·Î Ãâ·Â°¡´ÉÇÏ°Ô. == 2006-03-25 == * FA Linux ½Ã¹Ì³ª Âü¼®Çß¾ú½À´Ï´Ù. À½... Á¦°¡ Ãʺ¸¶ó ¼¼¹Ì³ª ³»¿ëÀÌ Àß ÀÌÇØ´Â µÇÁö ¾Ê¾ÒÁö¸¸.. ±×·¡µµ Âü ½Å±âÇÑ °æÇèÀ̾ú³×¿ä. À¯¿µÃ¢´Ô ¿ª½Ã Á¦ »ý°¢´ë·Î ±²ÀåÈù Æ÷½º¸¦ dz±â½Ã´øµ¥¿ä.. == 2006-04-06 == * ¿¡ÈÞ~ ÀÌ·¸°Ô ³¯Â¥°¡ ¶Ò¶Ò ¶³¾îÁö´Â°É º¸´Ï Á¦°¡ »ý°¢Çصµ Âü ÇѽÉÇϳ׿ä.. »¡¸® ¿­½ÉÈ÷ ÇØ¾ß Çϴµ¥. === 5Àå. ¸Þ¸ð¸® ÇÒ´ç°ú ÇØÁ¦ === ==== º¯¼ö ==== * Àü¿ª & Áö¿ª º¯¼ö : °¡±ÞÀû Áö¿ªº¯¼ö¸¦ »ç¿ëÇÏ°í µð¹ÙÀ̽º µå¶óÀ̹ö°¡ Ä¿³Î¿¡ ÀûÀçµÇ°í ÇØÁ¦µÇ´Â ½ÃÁ¡±îÁö À¯ÁöÇÒ·Á¸é Àü¿ªº¯¼ö·Î ÁöÁ¤ * static Å°¿öµå¸¦ »ç¿ëÇÏÀÚ : ÇØ´ç ¼Ò½º¿¡¼­¸¸ ÂüÁ¶ * int ¹®Á¦ : cpu ¸¶´Ù ´Ù¸£´Ï È®ÀÎ, Ä¿³Î¿¡¼­ Á¦°øµÇ´Â °Í »ç¿ë? * ±¸Á¶Ã¼´Â packed¸¦ »ç¿ë ½ÇÁ¦ Å©±â·Î ¼±¾ð * include/linux/byteorder, #include * '''volatile''' * Çϵå¿þ¾î ¼ÂÆýà ÄÄÆÄÀÏ·¯°¡ ÀÚµ¿À¸·Î ÃÖÀûÈ­¸¦ ÇÏ°Ô ÇÏ¸é ¾ÈµÈ´Ù * ¹Ýµå½Ã ¸Þ¸ð¸®¿¡ Á¢±ÙÇÏ¿© ó¸®ÇÏ¿©¾ß. * '''''¿¹Á¦ÀÛ¼º Çغ¼°Í''''' ==== µ¿Àû ¸Þ¸ð¸® ==== * kmalloc(), kfree() * vmalloc(), vfree() * __get_free_pages(), free_pages() ==== ¸Þ¸ð¸® Ç® ==== * »çÀü¿¡ ¿¹ÃøµÇ´Â ÃÖ¼ÒÇÑÀÇ ¸Þ¸ð¸®¸¦ ¹Ì¸® ÇÒ´çÇÏ°í, °ü¸®ÇÏ´Â ¹æ½Ä? * Àý´ë ÇÒ´çÀÌ ½ÇÆÐÇÏÁö ¾ÊÀ½. === 6Àå. µð¹ÙÀ̽ºÀÇ µî·Ï°ú ÇØÁ¦ === ==== µð¹ÙÀ̽º µå¶óÀ̹ö Á¦¾î ¹æ½Ä ==== * ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ Çϵå¿þ¾î¸¦ Á¦¾îÇϱâ À§Çؼ­´Â Àú¼öÁØ ÆÄÀÏ ÀÔÃâ·Â ÇÔ¼ö¸¦ »ç¿ë µð¹ÙÀ̽º ÆÄÀÏ¿¡ Á¢±ÙÇÏ¸é ±×¿¡ ÇØ´çµÇ´Â µð¹ÙÀ̽º µå¶óÀ̹ö¿¡ Á¦¾î ÇÔ¼öµéÀÌ È£ÃâÀÌ µÇ¾î¼­ Çϵå¿þ¾î¸¦ ´Ù·ç°Ô µÈ´Ù. * ¹®ÀÚ, ºí·Ï, ³×Æ®¿öÅ© * ¹®ÀÚ µð¹ÙÀ̽º µå¶óÀ̹ö´Â Àú¼öÁØ ÆÄÀÏ ÀÔÃâ·Â¿¡ ´ëÀÀÇÏ´Â Çϵå¿þ¾î¸¦ ´Ù·ç´Â Ä¿³Î ÇÔ¼öÀÇ ÁýÇÕ ==== struct file_operations ==== * ÆÄÀÏ ÀÔÃâ·Â ÇÔ¼ö¿¡ ÇØ´çÇÏ´Â ÇÔ¼öµéÀ» µî·Ï½ÃÅ°´Â ±¸Á¶Ã¼ ==== ¹®ÀÚ µð¹ÙÀ̽º µå¶óÀ̹öÀÇ µî·Ï°ú ÇØÁ¦ ¹× ±¸¼º ==== === 7Àå. µð¹ÙÀ̽º µå¶óÀ̹öÀÇ ÃʱâÈ­¿Í Á¾·á === ==== ÃʱâÈ­¿Í Á¾·áó¸® ==== * µð¹ÙÀ̽º µå¶óÀ̹ö¿¡ ¸ðµâ ÃʱâÈ­ ½ÃÁ¡, µð¹ÙÀ̽º¸¦ ¿©´Â ½ÃÁ¡, ¸ðµâ Á¦°Å ½ÃÁ¡, µð¹ÙÀ̽º¸¦ ´Ý´Â ½ÃÁ¡ * insmod ¸í·É : module_init - ¸ðµâ ÀûÀç °úÁ¤ * open()ÇÔ¼ö : file_operations.open - µð¹ÙÀ̽º ÆÄÀÏÀ» ¿©´Â °úÁ¤ * close()ÇÔ¼ö : file_operations.release - µð¹ÙÀ̽º ÆÄÀÏÀ» ´Ý´Â °úÁ¤ * rmmod ¸í·É : module_exit - ¸ðµâ Á¦°Å °úÁ¤ ==== ¸ðµâ »ç¿ë Ƚ¼ö °ü¸® ==== ==== I/O ¿µ¿ªÀÇ °æÀï ó¸® ÇÔ¼ö ==== === '''''Check Point''''' === ==== Makefile ==== {{{#!vim obj-m := test.o KDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules test: echo $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules }}} * À§ÀÇ MakefileÀº ±âº»ÀûÀÎ Makefile°ú´Â ´Þ¸® source, object, compilerµîÀÇ ¼³Á¤ÀÌ ¾ø´Ù. °ú¿¬ ÀÌ°Ç ¾î¶»°Ô µ¿ÀÛÀ» ÇÏ´Â °ÍÀϱî? * uname -r : ÇöÀç Ä¿³Î ¹öÀüÀÌ Ã߷µȴÙ. * /lib/modules/$(shell uname -r)/build : kernel source°¡ ÀÖ´Ù. °¢ ¹öÀü´ëÀÇ kernel ¼Ò½º¿¡ ´ëÇÑ ½Éº¼¸¯ ¸µÅ©ÀÌ´Ù. * $(MAKE) : ±×³É make * -C : man make·Î È®Àΰá°ú ÀÛ¾÷µð·ºÅ丮¸¦ ¹Ù²Ù´Â ¿É¼ÇÀÌ´Ù. Áï -C /path Çϸé ÇØ´ç path¿¡ ÀÖ´Â MakefileÀ» ½ÇÇà½ÃÅ°´Âµ¥ ¿©±â¼­´Â Ä¿³Î ¼Ò½º¸¦ ÀÛ¾÷µð·ºÅ丮·Î ¼³Á¤ÇÑ´Ù. SUBDIRSÀº ÇöÀç ÄÄÆÄÀÏÇÒ ¼Ò½º°¡ ÀÖ´Â µð·ºÅ丮¸¦ Ä¿³Î¼Ò½º¿¡ ÀÖ´Â Makefile¿¡ ³Ñ°ÜÁÖ´Â ¿ªÈ°À» ÇÑ´Ù. * °á±¹ Ä¿³Î¼Ò½º³»ÀÇ MakefileÀ» »ç¿ëÇؼ­ ÇöÀç µð·ºÅ丮¿¡ À§Ä¡ÇÑ ¼Ò½º¸¦ make moduleÀ» ÇÏ´Â °ÍÀÌ´Ù. * ¹°·Ð ÀÌ·¸°Ô °£´ÜÇÑ ±¸Á¶´Â ¾Æ´Ñ°Í °°Áö¸¸ ÀÏ´Ü ÇöÀç·Î¼­´Â ¿©±âÁ¤µµ±îÁö ÆľÇÀ» ÇÏ¿´´Ù. * make module½Ã SUBDIRS°¡ ¼³Á¤ÀÌ µÇ¾î ÀÖÀ¸¸é ÀÏ¹Ý Ä¿³Î ÄÄÆÄÀϽà ¼öÇàµÇ´Â make modules°¡ ¾Æ´Ñ ÇöÀç »ç¿ëÀÚ°¡ ÀÛ¼ºÇÑ ¼Ò½º(SUBDIRS¿¡ À§Ä¡ÇÑ)¸¸ ¸ðµâ·Î ÄÄÆÄÀÏÀ» ¼öÇàÇÏ´Â °Í °°´Ù. * ¿ª½Ã ¸®´ª½º´Â ½É¿À. ÀÌ·±½ÄÀ¸·Î ¿¬µ¿ÀÌ µÇ³ª´Ï ´ë´Ü~~ ==== kmalloc() test ==== * °ú¿¬ kmalloc()À¸·Î ¸Þ¸ð¸® ÇÒ´ç ¹ÞÀ¸¸é /proc/meminfo¿¡ ¸Þ¸ð¸® Á¤º¸°¡ ±× ¸¸Å­ º¯ÇÒ °ÍÀΰ¡? * meminfo¿¡ ¾î´À ºÎºÐÀÌ º¯ÇÏ´Â °ÍÀÎÁö ãÀÚ!! * ½Ã½ºÅÛ ºÎÆ®½Ã Ä¿³ÎÀº Ä¿³Î ·çƾµéÀÌ ÇÊ¿ä·Î ÇÒ ¸¸Å­À» ¿¹»óÇÏ¿© ¹Ì¸® free_page_list·Î ÃʱâÈ­½ÃÄÑ µÎ°í Ä¿³Î ·çƾÀÌ kmalloc()À» È£ÃâÇϸé kmalloc()·çƾÀº free_page_list¿¡¼­ ¿ä±¸ÇÑ ¸¸Å­À» ÇÒ´çÇØ ÁÖ´Â °ÍÀÌ´Ù. ¹Ì¸® ÇÒ´çÇØ µÎ´Â Å©±â´Â ½Ã½ºÅÛÀÇ ¹°¸®¸Þ·Î¸®¿¡ ºñ·ÊÇÑ´Ù. * /usr/src/linux/include/linux/mm.h¿¡¼­ È®ÀÎ! * ¿ä±¸µÈ ¾çÀ» ±×·¡µµ ÇÒ´çÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ´ÜÆíÈ­¸¦ ¸·±âÀ§ÇØ N¹ÙÀÌÆ®¸¦ ¿ä±¸Çϸé 2^X¹ÙÀÌÆ®¸¦ ÇÒ´ç : 1000¹ÙÀÌÆ®¸¦ ¿ä±¸Çϸé 1025¹ÙÀÌÆ® ÀÌ·±½Ä * PAGE_SIZE*32Å©±â¾¿ 100°³ ÇÒ´çÇØÇÑ °á°ú = ÃÑ 13107200Byte, ¾à 13MB, ÀÌÁ¤µµÀÇ ¾çÀÌ º¯ÇѺκÐÀº? || |||| ÇÒ´çÀü |||| ÇÒ´çÈÄ || || Total |||| 256264 |||| 256264 || || MemFree |||| 120572 |||| 107648 || || Buffers |||| 9040 |||| 9072 || || Cached |||| 71152 |||| 71208 || || Active |||| 77080 |||| 77144 || || Inactive |||| 41608 |||| 41636 || || LowFree |||| 120572 |||| 107648 || || Dirty |||| 108 |||| 180 || || Slab |||| 12920 |||| 25720 || * À§ÀÇ °á°ú¸¦ º¸¸é MemFree, LowFree,SlabµîÀÌ 13MB¾¿ º¯ÇÑ °ÍÀ» º¼¼ö ÀÖ´Ù. °¢°¢ÀÇ Àǹ̸¦ ´õ Á¤È®ÇÏ°Ô ÆľÇÇÒ ÇÊ¿ä°¡ ÀÖÀ» °Í °°´Ù. * '''''Ãß°¡Á¶»ç ÇÊ¿ä'''''' ==== volatile test ==== * volatileÀ» ÇßÀ» ¶§¶û ¾È ÇßÀ» ¶§¶û ¾î¼Àºí¸® ÄÚµåÀÇ º¯È­ È®ÀÎ! ==== read(), write(), llseek() ±¸Çö ==== * ½ÇÁ¦·Î µ¿ÀÛÇÏ´Â °Í ó·³ º¸ÀÌ´Â ¿¹Á¦ ÄÚµå ÀÛ¼ºÇغ¸±â.. = °Ô½ÃÆÇ = [[comment(@PAGE)]]