ARM¹¤³Ìʦ È«ÇòͳһÈÏÖ¤¿¼ÊÔ £¨ÖйúÇø£©
¸öÈËÐÅÏ¢
ÐÕÃû£º ¹¤×÷µ¥Î»£º
ÓÐЧ֤¼þÀàÐÍ£º Éí·ÝÖ¤ ¾ü¹ÙÖ¤ ÆäËü
Ö¤¼þ±àºÅ£º
ÊÔÌâ
ÇëÔÚ60·ÖÖÓÄÚ£¬¾¡¿ÉÄÜÍê³ÉÒÔÏÂÄÚÈÝ
Ò»¡¢»ù´¡Ìâ (ÿÌâ4·Ö)
1. ÃèÊöCÓïÑÔÄÚǶ»ã±àÖÐ, __asm__ __volatile__ ÕâÒ»¾äµÄ __volatile__ µÄ×÷ÓÃÊÇ£¿µ±ÐÞÊαäÁ¿Ê±volatileʲôº¬Òå? \±íʾ±àÒëÆ÷²»ÒªÓÅ»¯´úÂ룬ºóÃæµÄÖ¸Áî ±£ÁôÔÑù£¬\ÊÇËüµÄ±ðÃû¡£ Volatile±äÁ¿¾ßÓÐ synchronized µÄ¿É¼ûÐÔÌØÐÔ£¬µ«ÊDz»¾ß±¸Ô×ÓÌØÐÔ¡£Õâ¾ÍÊÇ˵Ïß³ÌÄܹ»×Ô¶¯·¢ÏÖ volatile±äÁ¿µÄ×îÐÂÖµ¡£Volatile±äÁ¿¿ÉÓÃÓÚÌṩḬ̈߳²È«£¬µ«ÊÇÖ»ÄÜÓ¦ÓÃÓڷdz£ÓÐÏÞµÄÒ»×éÓÃÀý£º¶à¸ö±äÁ¿Ö®¼ä»òÕßij¸ö±äÁ¿µÄµ±Ç°ÖµÓëÐ޸ĺóÖµÖ®¼äûÓÐÔ¼Êø 2. ÈçºÎÔÚCÓïÑÔµÄÄÚǶ»ã±àÖзÃÎÊC±äÁ¿£¬ÒÔ¼°ÈçºÎ±£»¤ÄÚǶ»ã±àÖб»ÆÆ»µµÄ¼Ä´æÆ÷?
3. Çëд³öÔÚARMƽ̨ÉÏ¡°ÂúµÝ¼õÕ»\´æºÍÈ¡µÄÖ¸Áî, ÿÌõÖ¸Áî¶¼ÒªÇóд³öÁ½ÖÖÐÎʽ.
(1)STMDA R0!,{R5-R6}½«R5¡¢R6´æÈëÏàÓ¦µÄR0Ö¸ÏòµÄµØÖ·¶ÔÓ¦µÄÄÚ´æ . . .
LDMIB R0!,{R5-R6}½«R0Ö¸ÏòµÄµØÖ·¶ÔÓ¦µÄÄÚ´æµÄÄÚÈÝ´æÈëR5ºÍR6
(2)STMED R13!,{R5-R6} . . .
LDMED R13!,{R5-R6}ÕâÒ»¶Î´úÂëµÄÁ½¸ö¶¼ÊÇED
4. ÔÚarmÖÐ, cpsrºÍspsr£¬ÒÔ¼°lrµÄ×÷ÓÃ? cpsrÊǵ±Ç°³ÌÐò״̬¼Ä´æÆ÷£¬SPSRÊDZ¸·Ý³ÌÐò״̬¼Ä´æÆ÷£¬µ±ÓÐÒì³£·¢Éúʱ¾Í»á°ÑCPSR×Ô¶¯±¸·Ý£¬µ±ÄãÐèҪʱ¾Í¿ÉÒÔÓëÆä»Ö¸´ÁË£¬ÎÞÂÛÄĸöģʽ¶¼ÊÇʹÓÃcpsr£¬spsr¾ÍÊDZ£´æ½øÈë¸ÃģʽǰcpsrµÄ״̬
lrµÄ×÷Óãº1.µ±Ê¹ÓÃbl»òÕßblxÌø×ªµ½×Ó¹ý³ÌµÄʱºò£¬r14±£´æÁË·µ»ØµØÖ·£¬¿ÉÒÔÔÚµ÷Óùý³Ì½áβ»Ö¸´¡£2.Òì³£ÖжϷ¢Éúʱ£¬Õâ¸öÒì³£Ä£Ê½ÌØ¶¨µÄÎïÀíR14±»ÉèÖóɸÃÒ쳣ģʽ½«Òª·µ»ØµÄµØÖ·¡£
5. Á´½ÓÆ÷ldµÄ--dynamic-linkerºÍ-TÑ¡ÏîÓÐʲô×÷ÓÃ? £¨1£©¶¯Ì¬Á´½Ó
6. ÔÚÁ´½Ó½Å±¾ÖÐÓÐÒ»¾ä: . = 0x32000000; text_start = .; Çë·Ö±ðд³öÒ»ÌõÖ¸Átext_startµÄÖµ×°µ½r0Öкͽ«text_start´¦Ö¸Áî×°µ½r1ÖÐ.
7. ÇëÃèÊöVMA ÓëLMAµÄÇø±ð. VMAÓëLMAÁ½¸öµØÖ·¶¼ÊÇÐéÄâµØÖ·¡£lma: ¼ÓÔØµØÖ·£¬Èç¼ÓÔØµ½RAMÖеȣ¬ÔÚǶÈëʽÖУ¬ÓпÉÄÜÊÇÔÚROMÖУ¨ÕâʱLMA!=VMA£©vma: ÐéÄâµØÖ·£¬¾ÍÊdzÌÐòÔËÐÐʱµÄµØÖ·£¬Ò»°ã¾ÍÊÇÄÚ´æµØÖ·£¬ÈçÒª°ÑROMÖеÄÊý¾Ý¼ÓÔØµ½RAMÖÐÔËÐС£
Ò»°ãÇé¿öÏÂÊÇLMA £½ VMA£¬Ö»ÓÐСÊýÇé¿öÊDz»ÏàµÈ£ºCPU´ÓROM£¬±ÈÈç³£¼ûµÄNor FlashÖжÁÈ¡´úÂëµÄËÙ¶È£¬ÒªÔ¶Ô¶Ð¡ÓÚ´ÓRAM£¬±ÈÈç³£¼ûµÄSDRAM£¬ÖжÁÈ¡µÄËÙ¶È£¬ËùÒÔ£¬²Å»áÇ£³¶µ½½«´úÂëÉÕдµ½ROMÀïÃæ£¬È»ºó´úÂëµÄ×ʼ£¬½«´Ë²¿·Ö³ÌÐòreaload£¬ÖØÔØ£¬Ò²¾ÍÊÇ´Ó´Ë´¦µÄROMµÄµØÖ·£¬¼´LMA£¬ÖØÐ¿½±´µ½SDRAMÖÐÈ¥£¬Ò²¾ÍÊÇVMAµÄµØ·½£¬È»ºó´ÓÄÇÀïÔËÐС£
8. ÔÚarm AT&T»ã±àÖÐ, .section ºÍ .org¹Ø¼ü×Ö×÷ÓÃ?
9. ÓÃÖ¸Áî¾ÙÀý˵Ã÷armµÄµØÖ·¶ÔÆëÎÊÌâ.
10. Õâ5ÌõÖ¸Áî,ÓÐÊ²Ã´Çø±ð?: ldr r0, =label αָÁ½«label¼ÓÔØµ½r0¼Ä´æÆ÷ÖУ©
ldr r0, label ½«±êºÅLABELËù´ú±íµÄÄÚ´æµØÖ·´¦´æ·ÅµÄÄÚÈݼÓÔØµ½R0ÖÐ ldr r0, =0x56789 αָÁ½«0X56789´æÈër0¼Ä´æÆ÷ÖУ© ldr r0,[r1] ´ÓR1¼Ä´æÆ÷µÄµØÖ·ÖÐÈ¡³öÒ»¸ö×ÖµÄÊý¾Ý£¬´æ´¢µ½R0¼Ä´æÆ÷ÖÐ adr r0,label ½«labelµÄµØÖ·×°Ôص½R0¼Ä´æÆ÷ÖÐ
11. ARM »úÆ÷Ö¸ÁîµÄ³¤¶ÈÊǶàÉÙ£¿¾ßÌåÓÐÄļ¸ÀàÖ¸Áî? (1)ARMÖ¸Á¶ÈÊǹ̶¨µÄ£¬ÔÚ arm ״̬ÏÂÊÇ 32 bits µÄ£¬ÔÚ thumb ״̬ÏÂÊÇ 16 bitsµÄ¡£ (2)Ìø×ªÖ¸Áî¡¢Êý¾Ý´¦ÀíÖ¸Áî¡¢³Ë·¨Ö¸ÁîÓë³Ë¼ÓÖ¸Áî¡¢³ÌÐò״̬¼Ä´æÆ÷·ÃÎÊÖ¸Áî¡¢¼ÓÔØ/´æ´¢Ö¸Áî¡¢ÅúÁ¿Êý¾Ý¼ÓÔØ/´æ´¢Ö¸Áî¡¢Êý¾Ý½»»»Ö¸Áî¡¢ÒÆÎ»Ö¸Áд¦ÀíÆ÷Ö¸Áî¡¢Òì³£²úÉúÖ¸Áî¡£
12. Çë˵Ã÷Exception Vectors(Òì³£ÏòÁ¿±í)µÄ×÷ÓÃ,²¢ÔÚarmÈÎÒâÒ»Öּܹ¹ÉϾÙÀýÔÚ±à³ÌʱÒì³£ÏòÁ¿±íÈçºÎ´¦Àí. (1)Vectors(Òì³£ÏòÁ¿±í)µÄ×÷ÓãºÉêÇëÖжϡ¢ÏàÓ¦Öжϡ¢´¦ÀíÖжϡ¢·µ»ØÖжϡ£ (2)
13. ÇëÃèÊöarm·¢ÉúģʽÇл»ºó, Èç¹ûÒª·µ»Øµ½ÔÀ´Ä£Ê½£¬ÐèÒª»Ö¸´Äö¼Ä´æÆ÷£¬ÁоٳöÏàÓ¦Ö¸Áî? £¨1£©Èý¸ö¼Ä´æÆ÷ £¨2£©sub sp,fp,#12 ldmfd sp,{fp,sp,pc}
14. SWIÈí¼þÖжÏÖ¸ÁîµÄ×÷ÓúÍÓ¦Óó¡ºÏ? (1)SWIÖ¸Áî---Èí¼þÖжÏʵÀýÏê½â:¸ÃÖ¸Áî²úÉúÒ»¸öSWIÒì³£¡£Òâ˼¾ÍÊÇ´¦ÀíÆ÷ģʽ¸Ä±äΪ³¬¼¶Óû§Ä£Ê½£¬CPSR¼Ä´æÆ÷±£´æµ½³¬¼¶Óû§Ä£Ê½ÏµÄSPSR¼Ä´æÆ÷£¬²¢ÇÒÌø×ªµ½SWIÏòÁ¿¡£ (2)
15. cpsrÖÐIºÍFλÓëSoCÖеÄÖжϿØÖÆÆ÷µÄÓÐʲô¹ØÏµ?
16.ÁоÙÖжϵĴ¥·¢·½Ê½? ÍⲿÖжϱßÑØ´¥·¢:·ÖΪÉÏÉýÑØ´¥·¢ºÍϽµÑØ´¥·¢£»¸ßµçƽ´¥·¢£»µÍµçƽ´¥·¢¡£
17.ÔÚu-bootÖУ¬¶ÁÈ¡Nand Flash ÄÚÈݵÄÃüÁîÊÇʲô£¿
Ê×ÏȲÁ³ýÐèҪдµÄÇøÓòÀýÈç £ºnand rease 0x0 0x300000 ²Á³ýÆ«ÒÆ0 ³¤¶È3MµÄÇøÓò; °ÑÊý¾Ýloadµ½ÄÚ´æ(sdram)ÀïÃæ,tftp 0x22000000 zImage.img loadµ½ 0x22000000µÄµØ·½.
°ÑÊý¾ÝдÈënandflash nand write 0x22000000 0x100000 0x140000;
£¨ÔÚ´Ë×¢Òâ 0x140000ΪдÈëµÄ³¤¶È,ÄãµÄÎļþ¿ÉÄܲ»ÊÇÕâô´ó,ÎÒµÄ zImage.img ÊÇ0x13900c;£©
18. mmuµÄ×÷ÓÃÊÇʲô? MMUÔÚµ±ÖнøÐеØÖ·×ª»»ËùÆðµÄ×÷ÓÃ
19. ¼òÊö·ë.ŵÒÀÂü½á¹¹ºÍ¹þ·ð½á¹¹µÄÇø±ð,²¢ËµÃ÷ARMµÄ¹þ·ð½á¹¹ÊÇÈçºÎʵÏÖµÄ. £¨1£©Çø±ð£ºµØÖ·¿Õ¼äºÍÊý¾Ý¿Õ¼ä·Ö¿ªÓë·ñ £¬·ëŵÒÀÂü½á¹¹Êý¾Ý¿Õ¼äºÍµØÖ·¿Õ¼ä²»·Ö¿ª£¬
¹þ·ð½á¹¹Êý¾Ý¿Õ¼äºÍµØÖ·¿Õ¼äÊÇ·Ö¿ªµÄ¡£ £¨2£©Ò»°ãDSP¶¼ÊDzÉÓøĽøÐ͹þ·ð½á¹¹£¬¾ÍÊÇ·Ö¿ªµÄÊý¾Ý¿Õ¼äºÍµØÖ·¿Õ¼ä¶¼²»Ö»ÊÇÒ»Ìõ£¬¶øÊÇÓÐ ¶àÌõ£¬Õâ¸ù¾Ý²»Í¬µÄÉú²ú³§É̵ÄDSPоƬÓÐËù²»Í¬¡£ ¹þ·ð½á¹¹´¦ÀíÆ÷ÓÐÁ½¸öÃ÷ÏÔµÄÌØµã£º 1¡¢Ê¹ÓÃÁ½¸ö¶ÀÁ¢µÄ´æ´¢Æ÷Ä£¿é£¬·Ö±ð´æ´¢Ö¸ÁîºÍÊý¾Ý£¬Ã¿¸ö´æ´¢Ä£¿é¶¼²»ÔÊÐíÖ¸ÁîºÍÊý¾Ý²¢´æ£»2¡¢Ê¹ÓöÀÁ¢µÄÁ½Ìõ×ÜÏߣ¬·Ö±ð×÷ΪCPUÓëÿ¸ö´æ´¢Æ÷Ö®¼äµÄרÓÃͨÐÅ·¾¶£¬¶øÕâÁ½Ìõ×ÜÏßÖ®¼äºÁÎÞ¹ØÁª¡£
¸Ä½øµÄ¹þ·ð½á¹¹£¬Æä½á¹¹ÌصãΪ£º ʹÓÃÁ½¸ö¶ÀÁ¢µÄ´æ´¢Æ÷Ä£¿é£¬·Ö±ð´æ´¢Ö¸ÁîºÍÊý¾Ý£¬Ã¿¸ö´æ´¢Ä£¿é¶¼²»ÔÊÐíÖ¸ÁîºÍÊý¾Ý²¢´æ£¬ÒÔ±ãʵÏÖ²¢Ðд¦Àí£»¾ßÓÐÒ»Ìõ¶ÀÁ¢µÄµØÖ·×ÜÏߺÍÒ»Ìõ
¶ÀÁ¢µÄÊý¾Ý×ÜÏߣ¬ÀûÓù«ÓõØÖ·×ÜÏß·ÃÎÊÁ½¸ö´æ´¢Ä£¿é£¨³ÌÐò´æ´¢Ä£¿éºÍÊý¾Ý´æ´¢Ä£¿é£©£¬¹«ÓÃÊý¾Ý×ÜÏßÔò±»ÓÃÀ´Íê³É³ÌÐò´æ´¢Ä£¿é»òÊý¾Ý´æ´¢Ä£¿éÓëCPUÖ®¼äµÄÊý¾Ý´«Ê䣻
20. ¶Ôu-boot¶øÑÔ£¬bootmËùÆðµÄ×÷ÓúÍËüµÄʵÏÖÔÀí? bootmµÄ×÷ÓÃÊÇ¿ÉÒÔ¼ÓÔØÓÃuboot¹¤¾ßÖÆ×÷µÄkernel ºÍramdisk
¶þ¡¢×ÛºÏÌâ ( 20·Ö) ÇëÏêϸÃèÊöÈçºÎÎªÌØ¶¨µÄARMƽ̨²¿ÊðǶÈëʽ²Ù×÷ϵͳ£¨´ÓBootloader£¬kernel£¬rootfs·½Ãæ·ÖÎö£©¡£
Ïà¹ØÍÆ¼ö£º