Chinese translated version of Documentation/arm64/booting.txt
If you have any comment or update to the content, please contact the
original document maintainer directly. However, if you have a problem
communicating in English you can also ask the Chinese maintainer for
help. Contact the Chinese maintainer if this translation is outdated
or if there is a problem with the translation.
Maintainer: Will Deacon will.deacon@arm.com
Chinese maintainer: Fu Wei tekkamanninja@gmail.com
Documentation/arm64/booting.txt çä¸æç¿»è¯
å¦ææ³è¯è®ºææ´æ°æ¬æçå
容ï¼è¯·ç´æ¥èç³»åææ¡£çç»´æ¤è
ãå¦æä½ ä½¿ç¨è±æ
交æµæå°é¾çè¯ï¼ä¹å¯ä»¥åä¸æçç»´æ¤è
æ±å©ãå¦ææ¬ç¿»è¯æ´æ°ä¸åæ¶æè
ç¿»
è¯åå¨é®é¢ï¼è¯·èç³»ä¸æçç»´æ¤è
ã
è±æçç»´æ¤è
ï¼ Will Deacon will.deacon@arm.com
ä¸æçç»´æ¤è
ï¼ å
ç Fu Wei tekkamanninja@gmail.com
ä¸æçç¿»è¯è
ï¼ å
ç Fu Wei tekkamanninja@gmail.com
ä¸æçæ ¡è¯è
ï¼ å
ç Fu Wei tekkamanninja@gmail.com
以ä¸ä¸ºæ£æ
å¯å¨ AArch64 Linux
==================
ä½è
: Will Deacon will.deacon@arm.com
æ¥æ: 2012 å¹´ 09 æ 07 æ¥
æ¬ææ¡£åºäº Russell King ç ARM å¯å¨ææ¡£ï¼ä¸éç¨äºææå
¬å¼åå¸ç
AArch64 Linux å
æ ¸ä»£ç ã
AArch64 å¼å¸¸æ¨¡åç±å¤ä¸ªå¼å¸¸çº§å«ï¼EL0 - EL3ï¼ç»æï¼å¯¹äº EL0 å EL1
å¼å¸¸çº§æ对åºçå®å
¨åéå®å
¨æ¨¡å¼ãEL2 æ¯ç³»ç»ç®¡ç级ï¼ä¸ä»
åå¨äº
éå®å
¨æ¨¡å¼ä¸ãEL3 æ¯æé«ç¹æ级ï¼ä¸ä»
åå¨äºå®å
¨æ¨¡å¼ä¸ã
åºäºæ¬ææ¡£çç®çï¼æ们å°ç®åå°ä½¿ç¨âå¼å¯¼è£
è½½ç¨åºâï¼âboot loaderâï¼
è¿ä¸ªæ¯è¯æ¥å®ä¹å¨å°æ§å¶æäº¤ç» Linux å
æ ¸å CPU ä¸æ§è¡çææ软件ã
è¿å¯è½å
å«å®å
¨çæ§åç³»ç»ç®¡ç代ç ï¼æè
å®å¯è½åªæ¯ä¸äºç¨äºåå¤æå°å¯å¨
ç¯å¢çæ令ã
åºæ¬ä¸ï¼å¼å¯¼è£ è½½ç¨åºï¼è³å°ï¼åºå®ç°ä»¥ä¸æä½ï¼
1ã设置ååå§å RAM
2ã设置设å¤æ æ°æ®
3ã解åå
æ ¸æ å
4ãè°ç¨å
æ ¸æ å
1ã设置ååå§å RAM
å¿ è¦æ§: 强å¶
å¼å¯¼è£
è½½ç¨åºåºè¯¥æ¾å°å¹¶åå§åç³»ç»ä¸ææå
æ ¸ç¨äºä¿æç³»ç»åéæ°æ®ç RAMã
è¿ä¸ªæä½çæ§è¡æ¯è®¾å¤ä¾èµçãï¼å®å¯è½ä½¿ç¨å
é¨ç®æ³æ¥èªå¨å®ä½å计ç®ææ
RAMï¼æå¯è½ä½¿ç¨å¯¹è¿ä¸ªè®¾å¤å·²ç¥ç RAM ä¿¡æ¯ï¼è¿å¯è½ä½¿ç¨ä»»ä½å¼å¯¼è£
è½½ç¨åº
设计è
æ³å°çå¹é
æ¹æ³ãï¼
2ã设置设å¤æ æ°æ®
å¿ è¦æ§: 强å¶
设å¤æ æ°æ®åï¼dtbï¼å¤§å°å¿
é¡»ä¸å¤§äº 2 MBï¼ä¸ä½äºä»å
æ ¸æ åèµ·å§ç®èµ·ç¬¬ä¸ä¸ª
512MB å
ç 2MB è¾¹çä¸ãè¿ä½¿å¾å
æ ¸å¯ä»¥éè¿åå§é¡µè¡¨ä¸çå个èæ述符æ¥
æ å°æ¤æ°æ®åã
3ã解åå æ ¸æ å
å¿ è¦æ§: å¯é
AArch64 å
æ ¸å½å没ææä¾èªè§£å代ç ï¼å æ¤å¦æ使ç¨äºå缩å
æ ¸æ åæ件
ï¼æ¯å¦ Image.gzï¼ï¼åéè¦éè¿å¼å¯¼è£
è½½ç¨åºï¼ä½¿ç¨ gzip çï¼æ¥è¿è¡è§£åã
è¥å¼å¯¼è£
è½½ç¨åºæ²¡æå®ç°è¿ä¸ªéæ±ï¼å°±è¦ä½¿ç¨éå缩å
æ ¸æ åæ件ã
4ãè°ç¨å æ ¸æ å
å¿ è¦æ§: 强å¶
已解åçå æ ¸æ åå å«ä¸ä¸ª 32 åèç头ï¼å 容å¦ä¸ï¼
u32 magic = 0x14000008; /* è·³è½¬å° stext, å°ç«¯ /
u32 res0 = 0; / ä¿ç /
u64 text_offset; / æ åè£
è½½å移 /
u64 res1 = 0; / ä¿ç /
u64 res2 = 0; / ä¿ç */
æ åå¿
é¡»ä½äºç³»ç» RAM èµ·å§å¤çç¹å®å移ï¼å½åæ¯ 0x80000ï¼ãç³»ç» RAM
çèµ·å§å°åå¿
é¡»æ¯ä»¥ 2MB 对é½çã
å¨è·³è½¬å ¥å æ ¸åï¼å¿ 须符å以ä¸ç¶æï¼
åæ¢ææ DMA 设å¤ï¼è¿æ ·å åæ°æ®å°±ä¸ä¼å 为èåç½ç»å æç£çæ°æ®è
è¢«ç ´åãè¿å¯è½å¯ä»¥èçä½ è®¸å¤çè°è¯æ¶é´ã主 CPU éç¨å¯åå¨è®¾ç½®
x0 = ç³»ç» RAM ä¸è®¾å¤æ æ°æ®åï¼dtbï¼çç©çå°åã
x1 = 0 (ä¿çï¼å°æ¥å¯è½ä½¿ç¨)
x2 = 0 (ä¿çï¼å°æ¥å¯è½ä½¿ç¨)
x3 = 0 (ä¿çï¼å°æ¥å¯è½ä½¿ç¨)CPU 模å¼
ææå½¢å¼çä¸æå¿ é¡»å¨ PSTATE.DAIF ä¸è¢«å±è½ï¼DebugãSErrorãIRQ
å FIQï¼ã
CPU å¿ é¡»å¤äº EL2ï¼æ¨èï¼å¯è®¿é®èæåæ©å±ï¼æéå®å ¨ EL1 模å¼ä¸ãé«éç¼åãMMU
MMU å¿ é¡»å ³éã
æ令ç¼åå¼å¯æå ³éé½å¯ä»¥ã
æ°æ®ç¼åå¿ é¡»å ³éä¸æ æã
å¤é¨é«éç¼åï¼å¦æåå¨ï¼å¿ é¡»é 置并ç¦ç¨ãæ¶æ计æ¶å¨
CNTFRQ å¿ é¡»è®¾å®ä¸ºè®¡æ¶å¨çé¢çã
å¦æå¨ EL1 模å¼ä¸è¿å ¥å æ ¸ï¼å CNTHCTL_EL2 ä¸ç EL1PCTEN (bit 0)
å¿ é¡»ç½®ä½ãä¸è´æ§
éè¿å æ ¸å¯å¨çææ CPU å¨å æ ¸å ¥å£å°åä¸å¿ é¡»å¤äºç¸åçä¸è´æ§åä¸ã
è¿å¯è½è¦æ ¹æ®å ·ä½å®ç°æ¥å®ä¹åå§åè¿ç¨ï¼ä»¥ä½¿è½æ¯ä¸ªCPUä¸å¯¹ç»´æ¤æä½ç
æ¥æ¶ãç³»ç»å¯åå¨
å¨è¿å ¥å æ ¸æ åçå¼å¸¸çº§ä¸ï¼ææææ¶ä¸å¯åçç³»ç»å¯åå¨å¿ é¡»éè¿è½¯ä»¶
å¨ä¸ä¸ªæ´é«çå¼å¸¸çº§å«ä¸åå§åï¼ä»¥é²æ¢å¨ æªç¥ ç¶æä¸è¿è¡ã
å¼å¯¼è£ è½½ç¨åºå¿ é¡»å¨æ¯ä¸ª CPU å¤äºä»¥ä¸ç¶ææ¶è·³å ¥å æ ¸å ¥å£ï¼
主 CPU å¿ é¡»ç´æ¥è·³å ¥å æ ¸æ åç第ä¸æ¡æ令ãéè¿æ¤ CPU ä¼ éç设å¤æ
æ°æ®åå¿ é¡»å¨æ¯ä¸ª CPU èç¹ä¸å å«ä»¥ä¸å 容ï¼1ãâenable-methodâå±æ§ãç®åï¼æ¤å段æ¯æçå¼ä» 为å符串âspin-tableâã
2ãâcpu-release-addrâæ è¯ä¸ä¸ª 64-bitãåå§å为é¶çå åä½ç½®ã
å¼å¯¼è£ è½½ç¨åºå¿ é¡»çæè¿äºè®¾å¤æ å±æ§ï¼å¹¶å¨è·³å ¥å æ ¸å ¥å£ä¹åå°å ¶æå ¥
æ°æ®åãä»»ä½è¾ å© CPU å¿ é¡»å¨å åä¿çåºï¼éè¿è®¾å¤æ ä¸ç /memreserve/ åä¼ é
ç»å æ ¸ï¼ä¸èªæäºå æ ¸ä¹å¤ï¼è½®è¯¢å®ä»¬ç cpu-release-addr ä½ç½®ï¼å¿ é¡»
å å«å¨ä¿çåºä¸ï¼ãå¯éè¿æå ¥ wfe æ令æ¥éä½å¿å¾ªç¯å¼éï¼è主 CPU å°
ååº sev æ令ãå½å¯¹ cpu-release-addr ææä½ç½®ç读åæä½è¿åéé¶å¼
æ¶ï¼CPU å¿ é¡»ç´æ¥è·³å ¥æ¤å¼ææåçå°åãè¾ å© CPU éç¨å¯åå¨è®¾ç½®
x0 = 0 (ä¿çï¼å°æ¥å¯è½ä½¿ç¨)
x1 = 0 (ä¿çï¼å°æ¥å¯è½ä½¿ç¨)
x2 = 0 (ä¿çï¼å°æ¥å¯è½ä½¿ç¨)
x3 = 0 (ä¿çï¼å°æ¥å¯è½ä½¿ç¨)