LinuxÉ豸Çý¶¯¿ª·¢Ïê½â ±Ê¼Ç4 LinuxÄÚºËÄ£¿é
modprobeÃüÁî±ÈinsmodÃüÁîÇ¿´ó£¬ËüÔÚ¼ÓÔØÄ³Ä£¿éʱ»áͬʱ¼ÓÔØ¸ÃÄ£¿éËùÒÀÀµµÄÆäËûÄ£¿é¡£Ê¹ÓÃmodprobeÃüÁî¼ÓÔØµÄÄ£¿éÈôÒÔ“modprobe –r filename”µÄ·½Ê½Ð¶Ôؽ«Í¬Ê±Ð¶ÔØÆäÒÀÀµµÄÄ£¿é¡£
printk´òÓ¡µ½var/log/messages
2.6ÄÚºËÖÐÒѼÓÔØµÄÐÅÏ¢Ò²´æÔÚÓÚ/sys/moduleĿ¼Ï£¬¼ÓÔØhello.koºó£¬ÄÚºËÖн«°üº¬/sys/module/helloĿ¼£¬¸ÃĿ¼ÓÖ°üº¬Ò»¸örefcntÎļþºÍÒ»¸ösectionsĿ¼
/proc/kallsymsÎļþ¶ÔÓ¦×ÅÄں˷ûºÅ±í£¬Ëü¼Ç¼ÁË·ûºÅÒÔ¼°·ûºÅËùÔÚµÄÄÚ´æµØÖ·
#include<linux/init.h>
#include<linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
int add_integar(int a, int b)
{
return a+b;
}
int sub_integar(int a, int b)
{
return a-b;
}
EXPORT_SYMBOL(add_integar);
EXPORT_SYMBOL(sub_integar);
±àÒëºó½«Ä£¿é²åÈ룬¿ÉÒÔ´Ó/pro/kallsymsÎļþÖÐÕÒ³öadd_integar¡¢sub_integarÏà¹ØÐÅÏ¢
cat /pro/kallsyms |grep integar
try_module_get()Óëmodule_put()µÄÒýÈëÓëʹÓÃÓëLinux2.6ÄÚºËϵÄÉ豸ģÐÍÃÜÇÐÏà¹Ø¡£2.6ÄÚºËΪ²»Í¬ÀàÐ͵ÄÉ豸¶¨ÒåÁËstruct module *ownerÓò£¬ÓÃÀ´Ö¸Ïò¹ÜÀí´ËÉ豸µÄÄ£¿é¡£µ±¿ªÊ¼Ê¹ÓÃij¸öÉ豸ʱ£¬ÄÚºËʹÓÃtry_module_get(dev->owner)È¥Ôö¼Ó¹ÜÀí´ËÉ豸µÄownerÄ£¿éµÄʹÓüÆÊý£»µ±²»ÔÙʹÓôËÉ豸ʱ£¬ÄÚºËʹÓÃmodule_put(dev->owner)¼õÉÙ¶Ô¹ÜÀí´ËÉ豸µÄownerÄ£¿éʹÓüÆÊý¡£ÕâÑù£¬µ±É豸ÔÚʹÓÃʱ£¬¹ÜÀí´ËÉ豸µÄÄ£¿é½«²»Äܱ»Ð¶ÔØ¡£Ö»ÓÐÉ豸²»ÔÙ±»Ê¹ÓÃʱ£¬Ä£¿é²ÅÔÊÐí±»Ð¶ÔØ
¿ª·¢ÈËÔ±ËùдµÄÇý¶¯Í¨³£ÊÇÖ§³ÖijÖÖ¾ßÌåÉ豸µÄownerÄ£¿é£¬¶Ô´ËÉ豸ownerÄ£¿éµÄ¼ÆÊý¹ÜÀíÓÐÄں˸üµ×²ãµÄ´úÂ루Èç×ÜÏßÇý¶¯»òÊÇ´ËÀàÉ豸¹«ÓõĺËÐÄÄ£¿é£©À´ÊµÏÖ£¬´Ó¶ø¼ò»¯ÁËÉ豸Çý¶¯µÄ¿ª·¢
±àÒë²½Ö裺ÏȽøÈëLinuxÄÚºËËùÔÚµÄĿ¼£¬²¢±àÒë³ö.oÎļþ£¬ÔËÐÐMODPOST»ØÉú³ÉÁÙʱµÄ.mod.cÎļþ£¬¶øºó¸ù¾Ý´ËÎļþ±àÒë³ö.mod.o£¬Ö®ºóÁ¬½Ó.oºÍ.mod.oµÃµ½Ä£¿éÄ¿±êÎļþ.ko£¬×îºóÀ뿪LinuxÄÚºËËùÔÚĿ¼
Èç¹ûÄ£¿é°üº¬¶à¸ö.cÎļþ£¨Èçfile1.c¡¢file2.c£©£¬MakefileÈçÏ£º
obj-m := modulename.o
module-objs := file1.o file2.o
Ïà¹ØÎĵµ£º
manÊÇmanual£¨ÊֲᣩµÄËõд
man¿ÉÒÔÔÚ²»Í¬µÄ°æ±¾ÖÐʹÓã¬Ö÷Òª·ÖΪÁ½Àà¡£Red HatºÍÐí¶àÆäËû»ùÓÚRPMµÄ°æ±¾Ê¹Óô«Í³µÄman³ÌÐò£¬¶ø»ùÓÚDebianµÄ°æ±¾Ê¹ÓÃÒ»¸öÃûΪman-dbµÄÈí¼þ°ü¡£
man£¨1£©
ÔÚÎı¾´°¿ÚÖÐä¯ÀÀÎļþµÄ·½Ê½ÔÚÆÕ±éʹÓÃHTMLºÍPDFµÄʱ´úÖÐËÆºõÓÐЩ¹ýʱÁË£¬µ«ÔÚÖÕ¶Ë´°¿ÚÖÐÔĶÁÎļþÈÔÓÐÆäÓÅÊÆ¡£¶ÔÓÚÄÇЩLinux¿ª·¢ÕßÀ´ ......
ʱ¼ä¼ä¸ô¶¨Ê±Æ÷
interval timer(ʱ¼ä¼ä¸ô¶¨Ê±Æ÷)ϵͳµ÷ÓÃ×Ô´Ó±»POSIX±ê×¼»¯ºó£¬Ê״γöÏÖÓÚ4.2BSD£¬Äܹ»Ìṩ±Èalarm()»¹¶àµÄ¿ØÖÆ£º
#include <sys/time.h>
int getitimer(int which, struct itimerval *value);
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);
interval ti ......
¶ÔLinuxÄÚºËÖнø³ÌÉÏÏÂÎĺÍÖжÏÉÏÏÂÎĵÄÀí½â
2010Äê3ÔÂ3ÈÕ 10:51 ά¿â¿ª·¢Íø ×÷ ÕߣºÑî˶,»ªÇåÔ¶¼ûǶÈëʽѧԺ½²Ê¦
Äں˿ռäºÍÓû§¿Õ¼äÊDzÙ×÷ϵͳÀíÂ۵Ļù´¡Ö®Ò»£¬¼´Äں˹¦ÄÜÄ£¿éÔËÐÐÔÚÄں˿ռ䣬¶øÓ¦ÓóÌÐòÔËÐÐÔÚÓû§¿Õ¼ä¡£ÏÖ´úµÄCPU¶¼¾ßÓв»Í¬ ......
ÔÚÓû§¿Õ¼ä£¬Ê¹ÓÃioctlϵͳµ÷ÓÃÀ´¿ØÖÆÉ豸£¬ÔÐÍÈçÏ£º
int ioctl(int fd, unsigned long cmd, ...);
µÚÈý¸ö²ÎÊý²»±íʾһ¸ö±äÊýÄ¿µÄ²ÎÊý£¬¶øÊÇÒ»¸öÀàÐÍ¿ÉÑ¡µÄ²ÎÊý¡£µÚÈý¸ö²ÎÊýÒÀÀµÓÚ¿ØÖÆÃüÁһЩÃüÁî²»ÓòÎÊý£¬Ò»Ð©ÓÃÒ»¸öÕûÊýÖµ£¬Ò»Ð©Ê¹ÓÃÖ¸Õë
1¡¢ioctlº¯Êý¶¨ÒåÃüÁî
ÔÚ±àдioctl´úÂë֮ǰ£¬Ê×ÏÈÐèÒª¶¨ÒåÃüÁΪÁË·ÀÖ¹ ......
´¦ÀíÆ÷µÄ·ÖÀ࣬ÈçÏÂͼËùʾ£º
´æ´¢Æ÷¿É·ÖΪֻ¶Á´æ´¢Æ÷£¨ROM£©¡¢ÉÁ´æ£¨Flash£©¡¢Ëæ»ú´æÈ¡´æ´¢Æ÷£¨RAM£©¡¢¹â½éÖÊ´æ´¢Æ÷ºÍ´Å½éÖÊ´æ´¢Æ÷
Nor FlashºÍcpuµÄ½Ó¿ÚÊôÓÚµäÐ͵ÄÀàSRAM½Ó¿Ú£¬²»ÐèÒªÔö¼Ó¶îÍâµÄ¿ØÖƵç·¡£Nor FlashµÄÌØµãÊÇ¿ÉоƬÄÚÖ´ÐУ¬³ÌÐò¿ÉÒÔÖ±½ÓÔÚNorÄÚÔËÐС£¶øNand FashºÍcpuµÄ½Ó¿Ú±ØÐëÓÉÏàÓ¦µÄ¿ØÖƵç·½øÐÐת»»£ ......