LinuxÖÐALIGNºêµÄÔÀí
1. Òý×Ó
int a;
int size = 8;
Èç¹ûÈÃaΪ(size =8)µÄÕûÊý±¶±íʾ³É¶þ½øÖÆÓ¦ÊÇʲôÑù×ÓÄØ£¿ÄǾÍÊÇÈÃÕâ¸öÊý±íʾ³É¶þ½øÖÆÊ±µÄ×îºóÈýλΪ0.
¶øÒª´ïµ½ÕâһĿ±ê£¬Ö»ÒªÏÂÃæÕâ¸öÊýÓëËü½øÐÐÓëÔËËã¾Í¿ÉÒÔÁË:
11111111 11111111 11111111 11111000
¶øÉÏÃæÕâ¸öÊýʵ¼ÊϾÍÊÇ ~ (size - 1)£¬¿ÉÒÔ½«¸ÃÊý³ÆÎªsizeµÄ¶ÔÆëÑÚÂësize_mask.
¿ÉÕâÑù×öÇó³öµÄÊDZÈaСµÄÄǸö×î´óµÄ8µÄ±¶Êý. Èç¹ûÒªÇó³ö±Èa´óµÄÊDz»ÊÇÐèÒª¼ÓÉÏ8¾Í¿ÉÒÔÁË?
¿ÉÊÇÈç¹ûa±¾Éí¾ÍÊÇ8µÄ±¶Êý, ÕâÑù¼Ó8²»¾Í´íÁËÂð, ËùÒÔÔÚa»ù´¡ÉϼÓÉÏ size - 1, È»ºóÓësizeµÄ¶ÔÆëÑÚÂë½øÐÐÓëÔËËã.
ÕâÑù, ÎÒÃÇ¿ÉÒÔ¶¨ÒåÏÂÃæµÄºê, ÓÃÓÚ¼ÆËãÒ»¸öÊýaÒÔsizeΪ±¶ÊýµÄǰºóÁ½¸öÖµ£º
#define alignment_down(a, size) (a & (~(size-1)) )
#define alignment_up(a, size) ((a+size-1) & (~ (size-1)))
ÀýÈç:
a=0, size=8, Ôòalignment_down(a,size)=0, alignment_up(a,size)=0.
a=6, size=8, Ôòalignment_down(a,size)=0, alignment_up(a,size)=8.
a=8, size=8, Ôòalignment_down(a,size)=8, alignment_up(a,size)=8.
a=14, size=8, Ôòalignment_down(a,size)=8, alignment_up(a,size)=16.
×¢Ò⣺sizeÓ¦µ±Îª2µÄn´Î·½, ¼´2, 4, 8, 16, 32, 64, 128, 256, 1024, 2048, 4096.....
2. ÔÚlinuxÖеÄÓ¦ÓÃ
ÉÏÃæµÄ¼ÆËã·½·¨ÔÚlinuxµÈ´úÂëÖÐÒ²³£³£¿ÉÒÔ¿´µ½,ÏÂÃæ¸ø³ö¼¸¸öÀý×Ó.
Àý£±£ºµ±·ÖÅ䵨ַaddrʱ, Òª½«¸ÃµØÖ·ÒÔsizeΪ±¶Êý¶ÔÆë, ¶øÇÒÒªµÃµ½ÊDZÈaddr´óµÄÖµ, ÔòʹÓÃ_ALIGNºê£º
/* align addr on a size boundary - adjust address up if needed -- Cort */
#define _ALIGN(addr,size) (((addr)+(size)-1)&(~((size)-1)))
Àý2£ºÓëÒ³Ãæ¶ÔÆëÏà¹ØµÄºê
#define PAGE_SIZE 4096
#define PAGE_MASK (~(PAGE_SIZE-1))
/* to align the pointer to the (next) page boundary */
#define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1) & PAGE_MASK)
Àý3£ºÓëskb·ÖÅäʱ¶ÔÆëÏà¹ØµÄºê
#define SKB_DATA_ALIGN(X)
Ïà¹ØÎĵµ£º
1. HCI²ãÐÒé¸ÅÊö£º
HCIÌṩһÌ×ͳһµÄ·½·¨À´·ÃÎÊBluetoothµ×²ã¡£ÈçͼËùʾ£º
´ÓͼÉÏ¿ÉÒÔ¿´³ö£¬Host Controller Interface(HCI) ¾ÍÊÇÓÃÀ´¹µÍ¨HostºÍModule¡£Hostͨ³£¾ÍÊÇPC£¬ ModuleÔòÊÇÒÔ¸÷ÖÖÎïÀíÁ¬½ÓÐÎʽ£¨USB,serial,pc-cardµÈ£©Á¬½Óµ½PCÉϵÄbluetooth Dongle¡£
ÔÚHostÕâÒ»¶Ë£ºapplication,SDP,L2capµÈÐÒé ......
ÀýÒ»£º·¢ËÍSignaling Packet£º
Signaling CommandÊÇ2¸öBluetoothʵÌåÖ®¼äµÄL2CAP²ãÃüÁî´«Êä¡£ËùÒÔµÃSignaling CommandʹÓÃCID 0x0001.
¶à¸öCommand¿ÉÒÔÔÚÒ»¸öC-frame£¨control frame£©Öз¢ËÍ¡£
Èç¹ûÒªÖ±½Ó·¢ËÍSignaling Command.ÐèÒª½¨Á¢SOCK_RAWÀàÐ͵ÄL2CAPÁ¬½ÓSocket¡£ÕâÑù²ÅÓлú»á×Ô¼ºÌî³äCommand Code£¬Identi ......
Ò»£ºÇ°ÑÔ
×î½üÔÚÑо¿androidµÄsensor driver£¬Ö÷ÒªÊÇE-compass£¬ÆäÖÐÓõ½ÁËLinux input×Óϵͳ.ÔÚÍøÉÏÒ²¿´Á˺ܶàÕâ·½ÃæµÄ×ÊÁÏ£¬¸Ð¾õ»¹ÊÇÕâÆª·ÖÎöµÄ±È½ÏϸÖÂ͸³¹£¬Òò´Ë×ªÔØÒ»ÏÂÒÔ±ã×Ô¼ºÑ§Ï°£¬Í¬Ê±ºÍ´ó¼Ò·ÖÏí£¡
£¨ÕâÆª²©¿ÍÖ÷ÒªÊÇÒÔ¼üÅÌÇý¶¯ÎªÀýµÄ£¬²»¹ý½²½âµÄÊÇLinux Input Subsystem£¬¿ÉÒÔ×ÐϸµÄÑо¿Ò»Ï£¡£©
¼üÅÌÇý¶¯½«¼ì ......
ÔÎÄÍøÖ·£ºhttp://www.ibm.com/developerworks/cn/linux/l-rcu/
±¾ÎÄÏêϸµØ½éÉÜÁË Linux 2.6 ÄÚºËÖÐеÄËø»úÖÆ RCU(Read-Copy Update) µÄʵÏÖ»úÖÆ£¬Ê¹ÓÃÒªÇóÓëµäÐÍÓ¦Óá£
Ò»¡¢ ÒýÑÔ
ÖÚËùÖÜÖª£¬ÎªÁ˱£»¤¹²ÏíÊý¾Ý,ÐèҪһЩͬ²½»úÖÆ,Èç×ÔÐýËø(spinlock)£¬¶ÁÐ´Ëø(rwlock)£¬ËüÃÇʹÓÃÆðÀ´·Ç³£¼òµ¥,¶øÇÒÊÇÒ»ÖÖºÜÓÐЧµÄͬ²½»úÖ ......
Linux »·¾³½ø³Ì¼äͨÐÅ£¨Áù£©
Ì×½Ó¿Ú
ÎĵµÑ¡Ïî
<tr
valign="top"><td width="8"><img alt="" height="1" width="8"
src="//www.ibm.com/i/c.gif"/></td><td width="16"><img alt="" width=" ......