linuxÄÚºËÒÆÖ²s3c2410£¬ÒÆÖ²Õýʽ¿ªÊ¼2
ÄÚºËÆô¶¯µÄÏÖÔÚÒѾÊÇ¿ªÊ¼Ö´Ðк¯Êýstart_kernelº¯ÊýÁË¡£start_kernelº¯ÊýÔÚinit/main.cÖж¨Òå¡£start_kernelº¯ÊýÖ»ÊÇÍê³É
ÏàÓ¦µÄ½á¹¹µÄ³õʼ»¯ÈÎÎñ¡£
printk(KERN_NOTICE);
printk(linux_banner);
setup_arch(&command_line);
ÔÚubootµÄÒ»Ö±¹ý³ÌÖУ¬uboot´«µÝ¸økernelµÄ²ÎÊý£ºÔ¤ÏÈ´æ·ÅÔÚij¸öµØ·½µÄtagºÍ»úÆ÷ÀàÐÍid£¬»úÆ÷ÀàÐÍidÔÚº¯Êý__look_up_machine
ÖÐÒѾʹÓã¬tagÁбíÊÇÔÚº¯Êýsetup_archÖе÷Óõġ£setup_archº¯ÊýÊÇÔÚarch/arm/kernel/setup.cÖж¨Ò壺
void __init setup_arch(char **cmdline_p)
{
....
setup_processor(); // ´¦ÀíÆ÷Ïà¹ØµÄÉèÖÃ
mdesc = setup_machine(machine_arch_type); // µÃµ½machine_desc½á¹¹
machine_name = mdesc->name;
...
if (mdesc->boot_params) // ¶¨ÒåÁËubootµÄ²ÎÊý
tags = phys_to_virt(mdesc->boot_params); // µÃµ½uboot²ÎÊýtagµØÖ·
...
if (tags->hdr.tag == ATAG_CORE) {
if (meminfo.nr_banks != 0) // ÔÚÄÚºËÖж¨ÒåÁËmeminfo
squash_mem_tags(tags); // ºöÂÔÄÚ´æÖеÄÐÅÏ¢
parse_tags(tags); // ½âÎötag
}
...
memcpy(boot_command_line, from, COMMAND_LINE_SIZE);
boot_command_line[COMMAND_LINE_SIZE-1] = '\0';
parse_cmdline(cmdline_p, from); // ½âÎöÃüÁîÐÐ
paging_init(&meminfo, mdesc); // ÖØÐ³õʼ»¯Ò³±í
request_standard_resources(&meminfo, mdesc);
...
}
ÉÏÃæº¯ÊýµÄÒÉÎÊÊÇif (mdesc->boot_params) // ¶¨ÒåÁËubootµÄ²ÎÊý£¬ubootµÄ²ÎÊýÊÇÔÚÄÇÀﶨÒåµÄ£¿´ð°¸¾ÍÊÇÔÚarch/arm/
mach-s3c2410/mach-smdk2410.cÖж¨Ò壺
MACHINE_START(SMDK2410, "SMDK2410") /* @TODO: request a new identifier and switch
...
.boot_params = S3C2410_SDRAM_PA + 0x100,
MACHINE_END
È»ºó¾ÍÊǺ¯Êýparse_tagsµÄ
Ïà¹ØÎĵµ£º
ÔÚCÓïÑÔÖУ¬½á¹¹ÊÇÒ»ÖÖ¸´ºÏÊý¾ÝÀàÐÍ£¬Æä¹¹³ÉÔªËØ¼È¿ÉÒÔÊÇ»ù±¾Êý¾ÝÀàÐÍ£¨Èçint¡¢long¡¢floatµÈ£©µÄ±äÁ¿£¬Ò²¿É
ÒÔÊÇһЩ¸´ºÏÊý¾ÝÀàÐÍ£¨ÈçÊý×é¡¢½á¹¹¡¢ÁªºÏµÈ£©µÄÊý¾Ýµ¥Ôª¡£ÔڽṹÖУ¬±àÒëÆ÷Ϊ½á¹¹µÄÿ¸ö³ÉÔ±°´Æä×ÔÈ»¶Ô½ç£¨alignment£©Ìõ¼þ·ÖÅä¿Õ¼ä¡£¸÷¸ö³ÉÔ±
°´ÕÕËüÃDZ»ÉùÃ÷µÄ˳ÐòÔÚÄÚ´æÖÐ˳Ðò´æ´¢£¬µÚÒ»¸ö³ÉÔ±µÄµØÖ·ºÍÕû¸ö ......
×÷ÕߣºÊ¯Í·
extern "C"°üº¬Ë«Öغ¬Ò壬ÆäÒ»£º±»ËüÐÞÊεÄÄ¿±êÊÇ“extern”µÄ£»Æä¶þ£º±»ËüÐÞÊεÄÄ¿±êÊÇ“C”µÄ¡£
1£©±»extern “C”ÏÞ¶¨µÄº¯Êý»ò±äÁ¿ÊÇexternÀàÐ͵ģ»
externÊÇC/C++ÓïÑÔÖбíÃ÷º¯ÊýºÍÈ«¾Ö±äÁ¿×÷Ó÷¶Î§£¨¿É¼ûÐÔ£©µÄ¹Ø¼ü×Ö£¬¸Ã¹Ø¼ü×Ö¸æËß±àÒëÆ÷£¬ÆäÉùÃ÷µÄº¯ ......
1. Workqueue
WorkqueueµÄÃû×־ͺÍËûµÄ¹¦ÄÜÒ»Ñù£ºÐèÒª´¦ÀíµÄ¹¤×÷ÁбíºÍ¹¤×÷µÄÌí¼Óɾ³ý£¨Ã²ËÆÃ»Óп´µ½ÈçºÎɾ³ýµÄ£©¡¢ÒÔ¼°¹¤×÷µÄµ÷¶ÈÖ´ÐС£
ÐèÒª´¦ÀíµÄ¹¤×÷Áбíͨ³£¶¼Î¬»¤ÔÚÄں˶ÔÏóworkqueue_structÀïÃæ¡£ÏµÍ³ÀïÃæ¿ÉÒÔÓжà¸öworkqueue_struct¡£ ......
ÖÕ¶ËÊÇÒ»ÖÖ×Ö·ûÐÍÉ豸£¬ËüÓжàÖÖÀàÐÍ£¬Í¨³£Ê¹ÓÃttyÀ´¼ò³Æ¸÷ÖÖÀàÐ͵ÄÖÕ¶ËÉ豸¡£ttyÊÇTeletypeµÄËõд£¬TeletypeÊÇ×îÔç³öÏÖµÄÒ»ÖÖÖÕ¶ËÉ豸£¬ºÜÏóµç´«´ò×Ö»ú£¬ÊÇÓÉTeletype¹«Ë¾Éú²úµÄ¡£É豸Ãû·ÅÔÚÌØÊâÎļþĿ¼/dev/Ï£¬ÖÕ¶ËÌØÊâÉ豸ÎļþÒ»°ãÓÐÒÔϼ¸ÖÖ£º
1£¬´®Ðж˿ÚÖÕ¶Ë£¨/dev/ttySn£©£º´®Ðж ......
< type="text/javascript"><!--
google_ad_client = "pub-3936520987820628";
//250x250, ´´½¨ÓÚ 07-12-28
google_ad_slot = "5080959190";
google_ad_width = 250;
google_ad_height = 250;
//-->
< src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javasc ......