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 (ä¿çï¼å°æ¥å¯è½ä½¿ç¨)