<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
-->
ÎÒÃÇ˵¾ä´ó°×»°£¬Ëùν“ÓÎ˵Õß”£¨
lobbist
£¬
lobber
£©¾ÍÊǹŴúµÄ“說¿Í”£¬Ö»ÊÇÈËÃÇÆ½ÈÕ²»ºÃÒâ˼Õâô˵¶øÒÑ¡£µ±½ñ£¬¸ÊÔ¸×öÒ»Ãû
Linux
ÓÎ˵ÕßÊǺܹâÈÙµÄÊÂÇé¡£´Ë»°µ±Õ棿
Linux
ÓÎ˵Õß±ØÐëÓеãѧÎÊ£¬Óеã°ì·¨²ÅÄÜ×àЧ£¬¹â¿¿ºú´µ¡¢ÂÒÙ©²»ÐС£ÎÒÏ룬
Linux
ÓÎ˵Õß±ØÐëÉí´øÐí¶à×ÔÆô¶¯
U
ÅÌ£¬¸÷ÖÖ
Linux
°æ±¾¶¼ÓУ¬¶øÇÒ£¬ÓÎ˵Õß±ØÐëÊìϤÐí¶à
Linux
Ó¦ÓÃÈí¼þ°ü£¬±ÈÈ磺ÄÚÈݹÜÀí£¬Ã½Ìå²¥·Å£¬×ÀÃæ³ö°æ£¬ÊÕ·¢Óʼþ£¬²ÆÎñ¹ÜÀí£¬Í¼ÐλæÖÆ£¬¼´Ê±Í¨ÐÅ£¬ÏîÄ¿¹ÜÀí£¬
PDF
¹¤¾ß£¬×ÀÃæ°ì¹«£¬
......(
¶à´ïÊýÊ®ÖÖ
)
¡£ÓÎ˵Õß±ØÐëѧ»á²ìÑÔ¹ÛÉ«£¬¼ûʲôÈË£¬ËµÊ²Ã´»°£¬²åʲôÅÌ£¬²»Äܸã´í£¨²å´íÁË
U
ÅÌ£©¡£
Linux
ÓÎ˵ÕßµÄÓÎ˵¶ÔÏó¿ÉÒÔÊÇÇׯÝÅóÓÑ£¬ÆóÒµ¾Àí£¬¹¤×÷ͬÊ£¬Õþ¸®¹ÙÔ±£¬
......
µÈµÈ¡£
Linux
ÓÎ˵Õß±ØÐëѧ»áһЩ“Ì×»°”£¬±ÈÈ磺ÕâÊÇ“Íâ¹ú»õ”£¨“·Ç±¾¹ú»õ”£©£¬Ã»ÓГ×ÔÖ÷֪ʶ²úȨ”£¬“Ô´´úÂ빫¿ª&rdq ......
´ÓLinux 2.6ÆðÒýÈëÁËÒ»Ì×еÄÇý¶¯¹ÜÀíºÍ×¢²á»úÖÆ:Platform_deviceºÍPlatform_driver¡£
LinuxÖд󲿷ֵÄÉ豸Çý¶¯£¬¶¼¿ÉÒÔʹÓÃÕâÌ×»úÖÆ, É豸ÓÃPlatform_device±íʾ£¬Çý¶¯ÓÃPlatform_driver½øÐÐ×¢²á¡£
Linux platform driver»úÖÆºÍ´«Í³µÄdevice driver »úÖÆ(ͨ¹ýdriver_registerº¯Êý½øÐÐ×¢²á)Ïà±È£¬Ò»¸öÊ®·ÖÃ÷ÏÔµÄÓÅÊÆÔÚÓÚplatform»úÖÆ½«É豸±¾ÉíµÄ×ÊÔ´×¢²á½øÄںˣ¬ÓÉÄÚºËͳһ¹ÜÀí£¬ÔÚÇý¶¯³ÌÐòÖÐʹÓÃÕâЩ×ÊԴʱͨ¹ýplatform deviceÌṩµÄ±ê×¼½Ó¿Ú½øÐÐÉêÇ벢ʹÓá£ÕâÑùÌá¸ßÁËÇý¶¯ºÍ×ÊÔ´¹ÜÀíµÄ¶ÀÁ¢ÐÔ£¬²¢ÇÒÓµÓнϺõĿÉÒÆÖ²ÐԺͰ²È«ÐÔ(ÕâЩ±ê×¼½Ó¿ÚÊǰ²È«µÄ)¡£
Platform»úÖÆµÄ±¾ÉíʹÓò¢²»¸´ÔÓ£¬ÓÉÁ½²¿·Ö×é³É£ºplatform_deviceºÍplatfrom_driver¡£
ͨ¹ýPlatform»úÖÆ¿ª·¢·¢µ×²ãÇý¶¯µÄ´óÖÂÁ÷³ÌΪ: ¶¨Òå platform_device à ×¢²á platform_device à ¶¨Òå platform_driver à×¢²á platform_driver¡£
Ê×ÏÈҪȷÈϵľÍÊÇÉ豸µÄ×ÊÔ´ÐÅÏ¢£¬ÀýÈçÉ豸µÄµØÖ·£¬ÖжϺŵȡ£
ÔÚ2.6ÄÚºËÖÐplatformÉ豸ÓýṹÌåplatform_deviceÀ´ÃèÊö£¬¸Ã½á¹¹Ì嶨ÒåÔÚkernel\include\linux\platform_device.hÖУ¬
struct platform_device {
const c ......
6.7.1 LinuxʹÓõĻº´æ
²»¹ÜÔÚÓ²¼þÉè¼Æ»¹ÊÇÈí¼þÉè¼ÆÖУ¬¸ßËÙ»º´æÊÇ»ñµÃ¸ßÐÔÄܵij£ÓÃÊֶΡ£Linux ʹÓÃÁ˶àÖÖºÍÄÚ´æ¹ÜÀíÏà¹ØµÄ¸ßËÙ»º´æ¡£
1£® »º³åÇø¸ßËÙ»º´æ£º
»º³åÇø¸ßËÙ»º´æÖаüº¬ÁËÓÉ¿éÉ豸ʹÓõÄÊý¾Ý»º³åÇø¡£ÕâЩ»º³åÇøÖаüº¬ÁË´ÓÉ豸ÖжÁÈ¡µÄÊý¾Ý¿é»òдÈëÉ豸µÄÊý¾Ý¿é¡£»º³åÇø¸ßËÙ»º´æÓÉÉ豸±êʶºÅºÍ¿é±êºÅË÷Òý£¬Òò´Ë¿ÉÒÔ¿ìËÙÕÒ³öÊý¾Ý¿é¡£Èç¹ûÊý¾ÝÄܹ»ÔÚ»º³åÇø¸ßËÙ»º´æÖÐÕÒµ½£¬Ôòϵͳ¾ÍûÓбØÒªÔÚÎïÀí¿éÉ豸ÉϽøÐÐʵ¼ÊµÄ¶Á²Ù×÷¡£
ÄÚºËΪÿ¸ö»º³åÇøÎ¬»¤ºÜ¶àÐÅÏ¢ÒÔÓÐÖúÓÚ»ººÍд²Ù×÷£¬ÕâЩÐÅÏ¢°üÀ¨Ò»¸ö“Ôࣨdirty£©”룬±íʾÄÚ´æÖеĻº³åÇøÒѱ»Ð޸쬱ØÐëдµ½´ÅÅÌ£»»¹°üÀ¨Ò»¸öʱ¼ä±êÖ¾£¬±íʾ»º³åÇø±»Ë¢Ðµ½´ÅÅÌ֮ǰÒѾÔÚÄÚ´æÖÐÍ£ÁôÁ˶೤ʱ¼ä¡£ÒòΪ»º³åÇøµÄÓйØÐÅÏ¢±»±£´æÔÚ»º³åÇøÊײ¿£¬ËùÒÔ£¬ÕâЩÊý¾Ý½á¹¹Á¬Í¬Óû§Êý¾Ý±¾ÉíµÄ»º³åÇø¶¼ÐèҪά»¤¡£
»º³åÇø¸ßËÙ»º´æµÄ´óС¿ÉÒԱ仯¡£µ±ÐèҪлº³åÇø¶øÏÖÔÚÓÖûÓпÉÓõĻº³åÇøÊ±£¬¾Í°´Ðè·ÖÅäÒ³Ãæ¡£µ±¿ÕÏÐÄÚ´æ±äµÃ²»×ãʱ£¬ÀýÈçÉÏÒ»½Ú¿´µ½µÄÇé¿ö£¬¾ÍÊÍ·Å»º³åÇø²¢·´¸´Ê¹ÓÃÏàÓ¦µÄÒ³Ãæ¡£
2£® Ò³Ãæ¸ßËÙ»º´æ
Ò³Ãæ¸ßËÙ»º´æÊÇÒ³ÃæI/O²Ù×÷·ÃÎÊÊý¾ÝËùʹÓõĴÅÅ̸ßËÙ»º´æ¡£ÎÒÃÇÔÚÎļþϵͳ»á¿´µ½£¬read( )¡¢write( )ºÍmmap ......
#insmod ./driver_xx.ko
´Ëʱ#cat /proc/devices ÄÜ¿´µ½ driver_xx É豸
#mknod /dev/mygpio c 230 0 (230ÊÇÖ÷É豸ºÅ£¬0ÊÇ×ÓÉ豸ºÅ£©
{ÕâÀï¿ÉÒÔÐÞ¸ÄÉ豸Ãû³Æ,µ«ÊÇÒªºÍ²âÊÔ³ÌÐòÖÐÒ»Ö fd_pio = open(“/dev/mygpio”, O_RDWR);
×îºÃºÍregister_chrdev(MY_PIO_MAJOR, "mygpio", &my_pio_fops)ÖеÄÒ»ÖÂ}
ʹÓÃ#cd /dev
#ls
Äܹ»¿´µ½mygpio ½Úµã
ʹÓÃ#cat /proc/interrupts Äܹ»¿´µ½Ê¹ÓõÄÖжϺÅ
#chmod 777 a.out
#./a.out
#rmmod ./driver_xx.ko ......
ÔÚ struct mntent ÖеijÉÔ±Óë /etc/fstab ÎļþÖеÄÌõÄ¿ÊÇÖ±½Ó¶ÔÓ¦µÄ¡£ËüµÄÄÚÈÝÈçÏ£º
struct mntent {
char *mnt_fsname; /* ¹ÒÔØµÄÎļþϵͳµÄÃû×Ö */
char *mnt_dir; /* ¹ÒÔØµã */
char *mnt_type; /* ÎļþϵͳÀàÐÍ£ºufs¡¢nfs µÈ */
char *mnt_opts; /* Ñ¡ÏÒÔ¶ººÅΪ·Ö¸ô·û */
int mnt_freq; /* Dump µÄƵÂÊ(ÒÔÌìΪµ¥Î») */
int mnt_passno; /* fsck¼ì²éµÄ´ÎÐò */
};
FILE *setmntent(const char *filename, const char *type);
struct mntent *getmntent(FILE *filep);
int addmntent(FILE *filep, const struct mntent *mnt);
int endmntent(FILE *filep);
char *hasmntopt(const struct mntent *mnt, const char *opt);
setmntent() ÊÇ´ò¿ª°üº¬¹ÒÔØµãÏîÄ¿µÄÎļþ, ÆäÖÐµÄ filename ²ÎÊýÊÇÒª´ò¿ªµÄÎļþÃû, type ²ÎÊý¾ÍÏñ fopen() µÄµÚ¶þ¸ö²ÎÊý, ´ú±íÖ»¶Á¡¢Ö»Ð´, »ò¶Áд½Ô¿ÉµÄ´æÈ¡Ä£Ê½ ¡£·µ»ØFILE*¡£
getmntent() ÔòÊÇÑÐò¶ÁÈ¡Õû¸öµµ°¸£¬´«»ØÖ¸Ïò static struct mntent ½á¹¹µÄÖ¸Õ룬½á¹¹ÖлáÌîÈëÊʵ±µÄÖµ¡£
add ......
±¾ÎÄ·ÖÎöÁËlinux 2.4.xÄں˵ÄÍøÇŵÄʵÏÖ·½·¨£¬²¢ÇÒÃèÊöÁËÈçºÎʹÓÃ2.4ÖеÄÍøÇÅ¡£ÍøÇÅ£¬ÀàËÆÓÚÖÐ¼ÌÆ÷£¬Á¬½Ó¾ÖÓòÍøÖÐÁ½¸ö»òÕß¶à¸öÍø¶Î¡£ËüÓëÖÐ¼ÌÆ÷µÄ²»Í¬Ö®´¦¾ÍÔÚÓÚËüÄܹ»½âÎöËüÊÕ·¢µÄÊý¾Ý£¬¶ÁȡĿ±êµØÖ·ÐÅÏ¢£¨MAC£©£¬²¢¾ö¶¨ÊÇ·ñÏòËùÁ¬½ÓÍøÂçµÄÆäËûÍø¶Îת·¢Êý¾Ý°ü¡£ÎªÁËÄܹ»¾ö²ßÏòÄǸöÍø¶Î·¢ËÍÊý¾Ý°ü£¬ÍøÇÅѧϰ½ÓÊÕµ½Êý¾Ý°üµÄÔ´MACµØÖ·£¬ÔÚ±¾µØ½¨Á¢Ò»¸öÒÔMACºÍ¶Ë¿ÚΪ¼Ç¼ÏîµÄÐÅÏ¢Êý¾Ý¿â¡£
LinuxÄÚºËÍøÇŵÄʵÏÖ·ÖÎö
Linux Äں˷ֱðÔÚ2.2 ºÍ 2.4ÄÚºËÖÐʵÏÖÁËÍøÇÅ¡£µ«ÊÇ2.2 ÄÚºËºÍ 2.4Äں˵ÄʵÏÖÓкܴóµÄÇø±ð£¬2.4ÖеÄʵÏÖ¼¸ºõÊÇÈ«²¿ÖØÐ´ÁËËùÓеÄʵÏÖ´úÂë¡£±¾ÎÄÒÔ2.4.0Äں˰汾ΪÀý½øÐзÖÎö¡£
ÔÚ·ÖÎö¾ßÌåµÄʵÏÖ֮ǰ£¬ÏÈÃèÊö¼¸¸ö¸ÅÄÓÐÖúÓÚ¶ÔÍøÇŵŦÄܼ°ÊµÏÖÓиüÉîµÄÀí½â¡£
³åÍ»Óò
Ò»¸ö³åÍ»ÓòÓÉËùÓÐÄܹ»¿´µ½Í¬Ò»¸ö³åÍ»»òÕß±»¸Ã³åÍ»Éæ¼°µ½µÄÉ豸×é³É¡£ÒÔÌ«ÍøÊ¹ÓÃC S M A / C D£¨Carrier Sense Multiple Access with Collision Detection£¬´øÓгåÍ»¼à²âµÄÔØ²¨ÕìÌý¶àÖ··ÃÎÊ£©¼¼ÊõÀ´±£Ö¤Í¬Ò»Ê±¿Ì£¬Ö»ÓÐÒ»¸ö½ÚµãÄܹ»ÔÚ³åÍ»ÓòÄÚ´«ËÍÊý¾Ý¡£ÍøÇÅ»òÕß½»»»»ú£¬¹¹³ÉÁËÒ»¸ö³åÍ»ÓòµÄ±ß½ç¡£È±Ê¡Çé¿öÏ£¬ÍøÇÅÖеÄÿ¸ö¶Ë¿Úʵ¼ÊÉϾÍÊÇÒ»¸ö³åÍ»ÓòµÄ½áÊøµã¡£
¹ã²¥Óò
Ò»¸ö¹ã²¥ÓòÓÉËùÓÐÄܹ ......