linuxÄÚºËÔ´ÂëÖг£¼ûºê¶¨Òå
1. gccµÄ__attribute__±àÒïÊôÐÔ
ÒªÁ˽âLinux Kernel´úÂëµÄ·Ö¶ÎÐÅÏ¢£¬ÐèÒªÁ˽âÒ»ÏÂgccµÄ__attribute__µÄ±àÒïÊôÐÔ£¬__attribute__Ö÷ÒªÓÃÓڸıäËùÉùÃ÷»ò¶¨ÒåµÄº¯Êý»òÊý¾ÝµÄÌØÐÔ£¬ËüÓкܶà×ÓÏÓÃÓڸıä×÷ÓöÔÏóµÄÌØÐÔ¡£±ÈÈç¶Ôº¯Êý£¬noline½«½ûÖ¹½øÐÐÄÚÁªÀ©Õ¹¡¢noreturn±íʾûÓзµ»ØÖµ¡¢pure±íÃ÷º¯Êý³ý·µ»ØÖµÍ⣬²»»áͨ¹ýÆäËü£¨ÈçÈ«¾Ö±äÁ¿¡¢Ö¸Õ룩¶Ôº¯ÊýÍⲿ²úÉúÈκÎÓ°Ïì¡£µ«ÕâÀïÎÒÃDZȽϸÐÐËȤµÄÊǶԴúÂë¶ÎÆð×÷ÓÃ×ÓÏîsection¡£
__attribute__µÄsection×ÓÏîµÄʹÓøñʽΪ£º
__attribute__((section("section_name")))
Æä×÷ÓÃÊǽ«×÷Óõĺ¯Êý»òÊý¾Ý·ÅÈëÖ¸¶¨ÃûΪ"section_name"ÊäÈë¶Î¡£
ÕâÀﻹҪעÒâÒ»ÏÂÁ½¸ö¸ÅÄÊäÈë¶ÎºÍÊä³ö¶Î
ÊäÈë¶ÎºÍÊä³ö¶ÎÊÇÏà¶ÔÓÚÒªÉú³É×îÖÕµÄelf»òbinaryʱµÄLink¹ý³Ì˵µÄ£¬Link¹ý³ÌµÄÊäÈë´ó¶¼ÊÇÓÉÔ´´úÂë±àÒïÉú³ÉµÄÄ¿±êÎļþ.o£¬ÄÇôÕâЩ.oÎļþÖаüº¬µÄ¶ÎÏà¶Ôlink¹ý³ÌÀ´Ëµ¾ÍÊÇÊäÈë¶Î£¬¶øLinkµÄÊä³öÒ»°ãÊÇ¿ÉÖ´ÐÐÎļþelf»ò¿âµÈ£¬ÕâЩÊä³öÎļþÖÐÒ²°üº¬ÓжΣ¬ÕâЩÊä³öÎļþÖеĶξͽÐ×öÊä³ö¶Î¡£ÊäÈë¶ÎºÍÊä³ö¶Î±¾À´Ã»ÓÐʲô±ØÈ»µÄÁªÏµ£¬ÊÇ»¥Ïà¶ÀÁ¢£¬Ö»ÊÇÔÚLink¹ý³ÌÖУ¬Link³ÌÐò»á¸ù¾ÝÒ»¶¨µÄ¹æÔò£¨ÕâЩ¹æÔòÆäʵÀ´Ô´ÓÚLink Script£©£¬½«²»Í¬µÄÊäÈë¶ÎÖØÐÂ×éºÏµ½²»Í¬µÄÊä³ö¶ÎÖУ¬¼´Ê¹ÊǶεÄÃû×Ö£¬ÊäÈë¶ÎºÍÊä³ö¶Î¿ÉÒÔÍêÈ«²»Í¬¡£
ÆäÓ÷¨¾ÙÀýÈçÏ£º
int var __attribute__((section(".xdata"))) = 0;
ÕâÑù¶¨ÒåµÄ±äÁ¿var½«±»·ÅÈëÃûΪ.xdataµÄÊäÈë¶Î£¬£¨×¢Ò⣺__attribute__ÕâÖÖÓ÷¨ÖеÄÀ¨ºÅºÃÏñºÜÑϸñ£¬ÕâÀïµÄ¼¸¸öÀ¨ºÅºÃÏóÒ»¸öÒ²²»ÄÜÉÙ¡££©
static int __attribute__((section(".xinit"))) functionA(void)
{
.....
}
Õâ¸öÀý×Ó½«Ê¹º¯ÊýfunctionA±»·ÅÈëÃû½Ð.xinitµÄÊäÈë¶Î¡£
ÐèÒª×Å֨עÒâµÄÊÇ£¬__attribute__µÄsectionÊôÐÔÖ»Ö¸¶¨¶ÔÏóµÄÊäÈë¶Î£¬Ëü²¢²»ÄÜÓ°ÏìËùÖ¸¶¨¶ÔÏó×îÖÕ»á·ÅÔÚ¿ÉÖ´ÐÐÎļþµÄʲô¶Î¡£
2. Linux KernelÔ´´úÂëÖÐÓë¶ÎÓйصÄÖØÒªºê¶¨Òå
£Á. ¹ØÓÚ__init¡¢__initdata¡¢__exit¡¢__exitdata¼°ÀàËÆµÄºê
´ò¿ªLinux KernelÔ´´úÂëÊ÷ÖеÄÎļþ£ºinclude/init.h£¬¿ÉÒÔ¿´µ½ÓÐÏÂÃæµÄºê¶¨Ò飺
#define __init __attribute__ ((__section__ (".init.text"))) __cold
#define __initdata __attribute__ (( __section__ (".init.data")))
#define __exitdata __attribute__ (( __section__ (".exit.data")))
#define __exit_call __attribute_used__ __attribute_
Ïà¹ØÎĵµ£º
½ø³ÌÀàËÆÓÚÈËÉú£ºËüÃDZ»²úÉú£¬Óлò¶à»òÉÙÓÐЧµÄÉúÃü£¬¿ÉÒÔ²úÉúÒ»¸ö»ò¶à¸ö×Ó½ø³Ì£¬×îÖÕ¶¼ÒªËÀÍö¡£Ò»¸ö΢СµÄ²îÒìÊǽø³ÌÖ®¼äûÓÐÐÔ±ð²îÒ엗ÿ¸ö½ø³Ì¶¼Ö»ÓÐÒ»¸ö¸¸Çס£ÄÇô£¬²Ù×÷ϵͳÓÐÒ»¸öÖØÒªµÄ¸ÅÄî——Ị̈߳¬ÔÚLinuxÉÏÊÇÔõôʵÏÖµÄÄØ£¿¿ÉÒÔÃ÷È·µÄ¸æËßÄ㣬Linux²¢Ã»ÓÐÏß³ÌÕâ¸ö¸ÅÄî¡£ºÇºÇ£¬ÊDz»ÊÇLinuxº ......
Linux Îļþϵͳ¸ÅÊö
×÷Õߣº±±ÄÏÄϱ±
À´×Ô£ºLinuxSir.Org
ÕªÒª£º ±¾ÎÄͨ¹ýÎļþϵͳµÄ¶¨Òå˵Æð£¬È»ºóͨ¹ýÒýÎļòµ¥µÄ½éÉÜÁËÒ»ÏÂÎļþϵͳÀàÐÍ£»¶ÔLinux³£ÓõÄext2¡¢ext3¼°reiserfs ¸ù¾Ý±¾ÈËʹÓþÑéÒ²·º·ºµÄ̸ÁË̸£¬µ«²¢²»ÊÇרҵµÄ¡£ÈçºÎÔĶÁ±¾ÎÄ£¬»¹ÊÇÓÃÂí¿Ë˼ÀíÂÛ¸æËßÎÒÃǵķ½·¨£ºÒ»·ÖΪ¶þ£¬±ß¿´±ßÅú°É£»Ä¿Â¼Ë÷Òý Ò»¡¢Ê²Ã´ ......
Ò»¡¢ÏÂÔØjpeg¿â
¶þ¡¢ÅäÖñàÒ룬Éú³ÉMakefileÎļþ¡£
#./configure --prefix=/usr/arm/arm-linux --exec-prefix=/usr/arm/arm-linux \
--enable-shared --enable-static
×¢Ò⣺prefixÊÇ×îºó°²×°Ê±¿â´æ·ÅµÄÎļþ£¬sharedÊDZàÒë³É¶¯Ì¬¿â£¬staticÊDZàÒë³É¾²Ì¬¿â
Èý¡¢ÐÞ¸ÄÉú³ÉµÄMakefile¡£
ʹÓÃgedit £Í£á£ë£å£æ£é£ì£å
½«CC ......
ÎÒÕýÔÚѧϰдlinux device driver for embedded system.
ÎÒÓÐÒ»¸ölinuxǶÈëʽÉ豸£¬Ò²ÓÐÕâ¸öÉ豸µÄlinuxÔ´´úÂë¡£Ò²ÓÐcross compiler tool chain.
µÚÒ»²½£¬¾ÍÊÇдһ¸ö¼òµ¥µÄhelloÄ£¿é£¬È»ºó×°µ½É豸ÖС£ÒÔÑéÖ¤ÎÒÕâ¸ö¿ª·¢»·¾³¡£
ÔÚÍøÉÏËÑË÷ÁËһϣ¬ how to cross compile linux device driver
·¢ÏÖÔÚlinux´úÂë¸ùĿ¼µÄMak ......