1.LINUXç³»ç»ä»ç»
2.浅度剖析 SeaBIOS 基础组件之 PCI 枚举
3.å¦ä½å¦ä¹ åµå
¥å¼
4.Ariane处理器源码剖析(五)续:MMU
5.linux内核$(kallsyms.o)详解续篇 --- 内核符号表的码分生成和查找过程
6.MappedByteBuffer VS FileChannel å°å¼ºå°å¼±ï¼
LINUXç³»ç»ä»ç»
åµå ¥å¼Linuxç³»ç»ç设计ä¸åºç¨
æè¦ï¼éçåµå ¥å¼Linuxç³»ç»çè¿ éåå±ï¼åµå ¥å¼Linuxå·²åå±æ为åµå ¥å¼æä½ç³»ç»çä¸ä¸ªéè¦åæ¯ãæ¬æä»ç»äºåµå ¥å¼Linuxç设计åå ç§æµè¡çåµå ¥å¼Linuxç³»ç»ã
å ³é®è¯ï¼åµå ¥å¼Linux
ä¸ãå¼è¨
åµå ¥å¼ç³»ç»(Embedded Systems)æ¯æ ¹æ®åºç¨çè¦æ±ï¼å°æä½ç³»ç»ååè½è½¯ä»¶éæäºè®¡ç®æºç¡¬ä»¶ç³»ç»ä¹ä¸ï¼ä»èå®ç°è½¯ä»¶ä¸ç¡¬ä»¶ä¸ä½åç计ç®æºç³»ç»ãåµå ¥å¼ç³»ç»åºç°äºå¹´ä»£ææï¼å®æå被ç¨äºæ§å¶æºçµçµè¯äº¤æ¢æºï¼å¦ä»å·²è¢«å¹¿æ³çåºç¨äºå·¥ä¸å¶é ãè¿ç¨æ§å¶ãé讯ã仪å¨ã仪表ã汽车ãè¹è¶ãèªç©ºãèªå¤©ãåäºè£ å¤ãæ¶è´¹ç±»äº§åçä¼å¤é¢åãåµå ¥å¼ç³»ç»å¨æ°éä¸è¿è¿è¶ è¿äºåç§éç¨è®¡ç®æºç³»ç»ï¼è®¡ç®æºç³»ç»æ ¸å¿CPUï¼æ¯å¹´å¨å ¨çèå´å ç产é大æ¦å¨äºå亿é¢å·¦å³ï¼å ¶ä¸è¶ è¿ï¼ åºç¨äºåç±»ä¸ç¨æ§å¾å¼ºçåµå ¥å¼ç³»ç»ã
ä¸è¬ç说ï¼å¡æ¯å¸¦æå¾®å¤çå¨çä¸ç¨è½¯ç¡¬ä»¶ç³»ç»é½å¯ä»¥ç§°ä¸ºåµå ¥å¼ç³»ç»ãåéç¨ç计ç®å¹³å°ç¸æ¯ï¼åµå ¥å¼ç³»ç»å¾å¾å ·æåè½åä¸ãä½ç§¯å°ãåèä½ãå¯é æ§é«ãåªè£æ§å¥½ã软硬件éæ度é«ã计ç®è½åç¸å¯¹è¾ä½çç¹ç¹ãå¤å¹´æ¥ï¼åµå ¥å¼è®¾å¤ä¸æ²¡ææä½ç³»ç»ï¼å ¶ä¸»è¦åå æäºï¼é¦å ï¼è¯¸å¦æ´è¡£æºã微波çãçµå°ç®±è¿æ ·ç设å¤ä» ä» éè¦ä¸éç®åçæ§å¶ç¨åºï¼ä»¥ç®¡çæ°éæéçæé®åæ示ç¯ï¼æ²¡æ使ç¨æä½ç³»ç»çå¿ è¦ï¼å ¶æ¬¡ï¼å®å¾å¾åªå ·ææéç硬件èµæºï¼ä¸è¶³ä»¥æ¯æä¸ä¸ªæä½ç³»ç»ã
ç¶èï¼éç硬件çåå±ï¼åµå ¥å¼ç³»ç»åå¾è¶æ¥è¶å¤æï¼æåçæ§å¶ç¨åºä¸éæ¥çå å ¥äºè®¸å¤åè½ï¼èè¿äºåè½ä¸æå¾å¤å¯ä»¥ç±æä½ç³»ç»æä¾ãäºæ¯ï¼å¨å¹´ä»£æ«æåºç°äºåµå ¥å¼æä½ç³»ç»(Embedded Operating Systems)ï¼å®çåºç°å¤§å¤§ç®åäºåºç¨ç¨åºè®¾è®¡ï¼å¹¶å¯ä»¥ææçä¿é软件质éå缩çå¼åå¨æãç®åçESä¸è¬å¹¶ä¸ä½¿ç¨æä½ç³»ç»ï¼åªå å«ä¸äºæ§å¶æµç¨ï¼ä½æ¯éçåµå ¥å¼æä½ç³»ç»å¨å¤ææ§ä¸çå¢é¿ï¼ç®åçæµç¨æ§å¶å°±ä¸è½æ»¡è¶³ç³»ç»çè¦æ±ï¼è¿æ¯å°±å¿ é¡»èè使ç¨æä½ç³»ç»åç³»ç»è½¯ä»¶ãå æ¤ï¼åµå ¥å¼æä½ç³»ç»å°±åºè¿èçã
éçEOSç广æ³åºç¨ï¼ä¸çå·²æ¨åºä¸äºåºç¨æ¯è¾æåçEOS产åãå½çº³èµ·æ¥EOSåºè¯¥å ·æ以ä¸å 个ç¹ç¹ï¼å°å·§ãå®æ¶æ§ãå¯è£ å¸ãåºå代ç ã弱交äºæ§ã强稳å®æ§åç»ä¸çæ¥å£ãç®å使ç¨æå¤çEOS产åå æ¬æï¼VxworkãQNXãPalmOSãWindowsCEãpSOSãHopen OS(å½å å¯æéå¢å ¬å¸èªä¸»ç å¶å¼å)çãå ¶ä¸ï¼Vxwork使ç¨æ为广æ³ãå¸åºå æçæé«ï¼å ¶çªåºç¹ç¹æ¯å®æ¶æ§å¼º(éç¨ä¼å 级æ¢å å轮转è°åº¦çæºå¶)ï¼é¤æ¤ä¹å¤ï¼å ¶å¯é æ§åå¯åªè£æ§ä¹ç¸å½ä¸éãQNXæ¯ä¸ç§ä¼¸ç¼©æ§æä½³çç³»ç»ï¼å ¶æ ¸å¿å ä¸å®æ¶POSIXç¯å¢åä¸ä¸ªå®æ´ççªå£ç³»ç»è¿ä¸å°ä¸å ãç¸æ¯ä¹ä¸ï¼Microsoft WinCEçæ ¸å¿ä½ç§¯åºå¤§ï¼å®æ¶æ§è½ä¹å·®å¼ºäººæï¼ä½ç±äºWindowsç³»åå好çç¨æ·çé¢å为ç¨åºåæçæçAPIï¼å¹¶æç»IEãOfficeçåºç¨ç¨åºï¼æ£éæ¸è·å¾æ´å¤§çå¸åºä»½é¢ãèä¸è¿äºåä¸åçæä½ç³»ç»ç¸æ¯ï¼Linuxå·²ç»è¶æ¥è¶åå°äººä»¬ç注æã
äºãåµå ¥å¼Linuxæ¦è¿°
Linuxæ¯ä¸ä¸ªæçè稳å®çç½ç»æä½ç³»ç»ãå°Linuxæ¤å ¥åµå ¥å¼è®¾å¤å ·æä¼å¤çä¼ç¹ãé¦å ï¼Linuxçæºä»£ç æ¯å¼æ¾çï¼ä»»ä½äººé½å¯ä»¥è·å并修æ¹ï¼ç¨ä¹å¼åèªå·±ç产åãå ¶æ¬¡ï¼Lirmxæ¯å¯ä»¥å®å¶çï¼å ¶ç³»ç»å æ ¸æå°åªæ约kBãä¸ä¸ªå¸¦æä¸æç³»ç»åå¾å½¢ç¨æ·çé¢çæ ¸å¿ç¨åºä¹å¯ä»¥åå°ä¸è¶³1MBï¼å¹¶ä¸åæ ·ç¨³å®ãå¦å¤ï¼å®åå¤æ°Unixç³»ç»å ¼å®¹ï¼åºç¨ç¨åºçå¼åå移æ¤ç¸å½å®¹æãåæ¶ï¼ç±äºå ·æè¯å¥½çå¯ç§»æ¤æ§ï¼äººä»¬å·²æå使Linuxè¿è¡äºæ°ç¾ç§ç¡¬ä»¶å¹³å°ä¹ä¸ã
ç¶èï¼Linux并éä¸é¨ä¸ºå®æ¶æ§åºç¨è设计ï¼å æ¤å¦ææ³å¨å¯¹å®æ¶æ§è¦æ±è¾é«çåµå ¥å¼ç³»ç»ä¸è¿è¡Linuxï¼å°±å¿ 须为ä¹æ·»å å®æ¶è½¯ä»¶æ¨¡åãè¿äºæ¨¡åè¿è¡çå æ ¸ç©ºé´æ£æ¯æä½ç³»ç»å®ç°è¿ç¨è°åº¦ãä¸æå¤çåç¨åºæ§è¡çé¨åï¼å æ¤é误ç代ç å¯è½ä¼ç ´åæä½ç³»ç»ï¼è¿èå½±åæ´ä¸ªç³»ç»çå¯é æ§å稳å®æ§ãLinuxçä¼å¤ä¼ç¹è¿æ¯ä½¿å®å¨åµå ¥å¼é¢åè·å¾äºå¹¿æ³çåºç¨ï¼å¹¶åºç°äºæ°éå¯è§çåµå ¥å¼Linuxç³»ç»ãå ¶ä¸æ代表æ§çå æ¬ï¼uClinuxãETLinuxãThinLinuxãLOAFçãETLinuxé常ç¨äºå¨å°åå·¥ä¸è®¡ç®æºï¼å°¤å ¶æ¯PCï¼æ¨¡åãThinLinuxé¢åä¸ç¨çç §ç¸æºæå¡å¨ãX-æ§å¶å¨ãMP3ææ¾å¨åå ¶å®ç±»ä¼¼çåµå ¥å¼åºç¨ãLOAFæ¯Linux On A Floppyç缩ç¥è¯ï¼å®è¿è¡å¨å¹³å°ä¸ã
ä¸ãLinuxä½ä¸ºåµå ¥å¼æä½ç³»ç»çä¼å¿
Linuxä½ä¸ºåµå ¥å¼æä½ç³»ç»çä¼å¿ä¸»è¦æ以ä¸å ç¹ï¼
1ã å¯åºç¨äºå¤ç§ç¡¬ä»¶å¹³å°ãLinuxå·²ç»è¢«ç§»æ¤å°å¤ç§ç¡¬ä»¶å¹³å°ï¼è¿å¯¹äºç»è´¹ï¼æ¶é´åéå¶çç 究ä¸å¼å项ç®æ¯å¾æå¸å¼åçãååå¯ä»¥å¨æ åå¹³å°ä¸å¼åå移æ¤å°å ·ä½ç硬件ä¸ï¼å å¿«äºè½¯ä»¶ä¸ç¡¬ä»¶çå¼åè¿ç¨ãLinuxéç¨ä¸ä¸ªç»ä¸çæ¡æ¶å¯¹ç¡¬ä»¶è¿è¡ç®¡çï¼ä»ä¸ä¸ªç¡¬ä»¶å¹³å°å°å¦ä¸ä¸ªç¡¬ä»¶å¹³å°çæ¹å¨ä¸ä¸å±åºç¨æ å ³ãLinuxå¯ä»¥éæå°é ç½®ï¼ä¸éè¦ä»»ä½ç许å¯è¯æå家çåä½å ³ç³»ï¼æºä»£ç å¯ä»¥å è´¹å¾å°ãè¿ä½¿å¾éç¨Linuxä½ä¸ºæä½ç³»ç»ä¸ä¼éå°ä»»ä½å ³äºçæççº çº·ã毫æ çé®ï¼è¿ä¼èç大éçå¼åè´¹ç¨ãæ¬èº«å ç½®ç½ç»æ¯æï¼èç®ååµå ¥å¼ç³»ç»å¯¹ç½ç»æ¯æè¦æ±è¶æ¥è¶é«ãLinuxçé«åº¦æ¨¡åå使添å é¨ä»¶é常容æã
2ã Linuxæ¯ä¸ä¸ªåUnixç¸ä¼¼ã以å æ ¸ä¸ºåºç¡çãå ·æå®å ¨çå å访é®æ§å¶ï¼æ¯æ大é硬件(å æ¬Xï¼AlphaãARMåMotorolaçç°æç大é¨åè¯ç)çç¹æ§çä¸ç§éç¨æä½ç³»ç»ãå ¶ç¨åºæºç å ¨é¨å ¬å¼ï¼ä»»ä½äººå¯ä»¥ä¿®æ¹å¹¶å¨GUNéç¨å ¬å ±è®¸å¯è¯(GNU General Public License)ä¸åè¡ãè¿æ ·ï¼å¼å人åå¯ä»¥å¯¹æä½ç³»ç»è¿è¡å®å¶ï¼éåºå ¶ç¹æ®éè¦ã
3ã Linux带æUnixç¨æ·çæçå®åçå¼åå·¥å ·ï¼å ä¹ææçUnixç³»ç»çåºç¨è½¯ä»¶é½å·²ç§»æ¤å°äºLinuxä¸ãLinuxè¿æä¾äºå¼ºå¤§çç½ç»åè½ï¼æå¤ç§å¯éæ©çªå£ç®¡çå¨(X Windows)ãå ¶å¼ºå¤§çè¯è¨ç¼è¯å¨GCCï¼C++çä¹å¯ä»¥å¾å®¹æå¾å°ï¼ä¸ä½æçå®åï¼èä¸ä½¿ç¨æ¹ä¾¿ã
åãåµå ¥å¼Linuxç建ç«
å®æ´çåµå ¥å¼Linux解å³æ¹æ¡åºå æ¬åµå ¥å¼Linuxæä½ç³»ç»å æ ¸ãè¿è¡ç¯å¢ãå¾å½¢åçé¢ååºç¨è½¯ä»¶çãç±äºåµå ¥å¼è®¾å¤çç¹æ®è¦æ±ï¼åµå ¥å¼Linux解å³æ¹æ¡ä¸çå æ ¸ãç¯å¢ãGUIçé½ä¸æ åLinuxæå¾å¤§ä¸åï¼å ¶ä¸»è¦æææ¯å¦ä½å¨çå°çFLASHãROMåå åä¸å®ç°é«è´¨éçä»»å¡å®æ¶è°åº¦ãå¾å½¢åæ¾ç¤ºãç½ç»éä¿¡çåè½ã
1ã ç²¾ç®å æ ¸
Linuxå æ ¸æèªå·±çç»æä½ç³»ï¼å ¶ä¸è¿ç¨ç®¡çãå å管çåæ件系ç»æ¯å ¶æåºæ¬ç3个åç³»ç»ãå¾1ç®å表示äºå®çæ¡æ¶ãç¨æ·è¿ç¨å¯ç´æ¥éè¿ç³»ç»è°ç¨æè å½æ°åºæ¥è®¿é®å æ ¸èµæºãæ£å 为Linuxå æ ¸å ·æè¿æ ·çç»æï¼å æ¤ä¿®æ¹å æ ¸æ¶å¿ 须注æå个åç³»ç»ä¹é´çåè°ã
åµå ¥å¼Linuxå æ ¸ä¸è¬ç±æ åLinuxå æ ¸è£åªèæ¥ãç¨æ·å¯æ ¹æ®éæ±é 置系ç»ï¼åé¤ä¸éçæå¡åè½ãæ件系ç»å设å¤é©±å¨ãç»è¿è£åªãå缩åçç³»ç»å æ ¸ä¸è¬åªækå·¦å³ï¼ååéååµå ¥å¼è®¾å¤ãåæ åLinuxä¸åçæ¯åµå ¥å¼Linuxå¿ é¡»è¦å®ç°ä»FLASHæROMçå¯å¨ãæ åLinuxå¯å¨ä»£ç å®ç°äºç³»ç»åå§ååä»è½¯çã硬çOçåºå¼å¯¼å æ ¸ãåµå ¥å¼Linuxä¸è¬ä¿åå¨FLASHæROMä¸ï¼æ åLILOæ æ³å¼å¯¼ãå¨æ¯æç´æ¥ä»FLASH设å¤å¼å¯¼çç³»ç»ä¸ï¼å¦åæå ¬å¸çuClinuxï¼å¼å¯¼ç¨åºä¸»è¦å®æ对硬件系ç»çåå§åå·¥ä½åæä½ç³»ç»ç解åã移ä½å·¥ä½ãå¨ä¸æ¯æç´æ¥ä»FLASHå¼å¯¼çç³»ç»ä¸ï¼FLASH设å¤åªè½ä½ä¸ºéå¼å¯¼ç£ç使ç¨ãæ¤æ¶ï¼å¯éç¨å ä»ç¡¬çæ软çå è½½ä¸ä¸ªå°æä½ç³»ç»ï¼å¦åµå ¥å¼DOSï¼ç¶ååæ§è¡"Loadlin"å è½½ç¨åºä»FLASHå¼å¯¼åµå ¥å¼Linuxã
对æ åLinuxçä¿®æ¹ä¸»è¦æ¯èæå ååè°åº¦ç¨åºé¨åçæ¹å¨ãå 为æ åLinuxç³»ç»ä½¿ç¨èæå å管ççç®çæ¯ä¸ºäºè½åæ¶è¿è¡å¤ä¸ªè¿ç¨ï¼ä½æ¯è¿æ ·æ¯ä¸ªå¾ è¿è¡çè¿ç¨æè½åé çCPUæ¶é´çå°±åéå¶ï¼èµæºç使ç¨æçå°±ä½ãè¿æ ·å¯¹äºå®æ¶æ§è¦æ±è¾é«çåµå ¥å¼ç³»ç»æ¥è¯´ï¼å®æ¶ä»»å¡å¾å¾è¦æ±CPUå ·æå¾é«ççªåå¤çè½åï¼å³å¨æäºæ¶åéè¦æé«çå¤çæçï¼å æ¤éè¦å±è½å æ ¸çèæå å管çæºå¶ã对äºæ 硬ç设å¤çåµå ¥å¼ç³»ç»ï¼ä¸å¿ éç¨èå管çã强å®æ¶éæ±çåµå ¥å¼åºç¨å¯ä»¥éè¿ä¿®æ¹ä»»å¡è°åº¦æ¨¡åå®ç°ï¼ä¸»è¦æ¯å¨å æ ¸å设å¤é©±å¨ç¨åºä¸å å ¥äºè®¸å¤åæ¢ç¹ãå¨è¯¥ç¹å¤ï¼ç³»ç»æ£æµæ¯å¦åå¨æªå¤ççç´§æ¥ä¸æï¼æåå¥å¤ºå æ ¸çè¿è¡ï¼åæ¶å¤çä¸æãå®ç°å®æ¶æ§æå¡çä¸ä¸ªè¾å¥½çæ¹æ³æ¯å¨æ åçLinuxå æ ¸ä¸å¢å ä¸ä¸ªå®æ¶å æ ¸ï¼æ åLinuxå æ ¸ä½ä¸ºä¸ä¸ªä»»å¡è¿è¡äºå®æ¶å æ ¸ä¸ï¼å¼ºå®æ¶æ§ä»»å¡ä¹ç´æ¥è¿è¡å¨å®æ¶å æ ¸ä¸ï¼å¦RT-Linuxçã
æ件系ç»æ¯åµå ¥å¼Linuxæä½ç³»ç»å¿ ä¸å¯å°çãä½æ åLinuxæ¯æ大éçæ件系ç»ï¼å æ¤é¤äºæ»¡è¶³ç³»ç»çæ£å¸¸è¿è¡éè¦èä¿çä¸ç§å¤ï¼å ¶å®çå ¨é¨å¯ä»¥å é¤ï¼å©ç¨åæç设置é项å¯ä»¥ç§»é¤ãä¸è¬åµå ¥å¼è®¾å¤æ件系ç»ä¸»è¦ä½¿ç¨RamDiskææ¯åç½ç»æ件系ç»ææ¯ãRamDiskå¯é©»çäºFlashï¼è¿è¡æ¶å è½½å°å åä¸ã
2ã ç²¾ç®è¿è¡ç¯å¢
Linuxé常çè¿è¡ç¯å¢æç¨æ·è¿è¡ä»»ä½åºç¨çåºç¡è®¾æ½ï¼ä¸»è¦å æ¬å½æ°åºååºæ¬å½ä»¤éçãæ åLinuxç³»ç»åæ¶åç¨æ·æä¾äºéæåå¨æå½æ°åºãéæå½æ°åºå¨çæåºç¨æ¶ç´æ¥é¾æ¥å°ç¨æ·åºç¨ä¸ãå¨æåºå¨åºç¨è¿è¡æ¶æé¾æ¥ãç±äºåµå ¥å¼ç³»ç»åºç¨ä¸è¬é½æ¯å¨å¼åå¹³å°ä¸é¢å çæçï¼å æ¤åµå ¥å¼ç³»ç»åªéååºç¨æä¾å¨æå½æ°åºãLinuxåºç¨è¿è¡æéçå½æ°åºä¸»è¦æCåºãæ°å¦åºã线ç¨åºãå å¯åºãç½ç»éä¿¡åºçãå ¶ä¸æåºæ¬çæ¯Cè¯è¨çè¿è¡åºglibãè¿ä¸ªåºä¸»è¦å®æåºæ¬çè¾å ¥è¾åºï¼å å访é®ï¼æ件å¤çãä¸ä¸ªæ åçglibåºå¤§çº¦è¦kBåå¨ç©ºé´ï¼èèå°åµå ¥å¼Linuxå æ ¸å¾å¾å¾å°ï¼è¿ç§è¿è¡åºå®å¨å¤ªå¤§ï¼æ们åäºä¸äºç²¾ç®çå·¥ä½ï¼æ¹æ³æ两ç§ï¼(1)ã使ç¨éæè¿æ¥çæ¹æ³ï¼å®å ¨ä¸ä½¿ç¨è¿è¡åºå¨æè¿æ¥ï¼(2)ã对è¿ä¸ªåºçå½æ°è¿è¡ç²¾ç®ã
å¨ä¸ä¸ªæ¡é¢ç³»ç»ä¸ï¼ä½¿ç¨å¨æè¿æ¥å¯ä»¥å¸¦æ¥è®¸å¤å¥½å¤ã使ç¨å¨æè¿æ¥åºï¼å¯ä»¥è®©åºç¨ç¨åºè·å½æ°åºçæ´æ°ãå级å离ï¼ä¾¿äºç»´æ¤ï¼å¯ä»¥è®©åæ¶è¿è¡çå¤ä¸ªç¨åºå ±äº«ä¸æ®µä»£ç ãä½æ¯ï¼å¨åµå ¥å¼ç³»ç»ä¸ï¼å¾å°æå¤ä¸ªç¨åºå¹¶è¡çå¯è½ï¼ç¨åºçç»´æ¤ï¼å°¤å ¶æ¯åºå½æ°çç»´æ¤æ´æ°æ¯ä¸å¸¸è§çãè¿æ¶ï¼ä½¿ç¨éæè¿æ¥çä¼å¿å°±æ为ææ¾ãå 为éæè¿æ¥å¯ä»¥åªå°åºä¸ç¨å°çé¨åè¿æ¥è¿ç¨åºãå¨åºç¨ç¨åºè¾å°(å°äº5)çæ åµä¸ï¼éæè¿æ¥å¯ä»¥è¾¾å°è¾å¥½çç»æã为äºä¾¿äºå°æ¥æ©å çéè¦ï¼æ们ä¹éç¨ç¬¬äºç§æ¹æ³ï¼é对æ们çéè¦ï¼å¯¹åºå½æ°çå 容è¿è¡ç²¾ç®ï¼åªä¿çä¸äºåºæ¬åè½ï¼è¿æä¸ç§æ¹æ³æ¯éç¨å ¶å®çCè¯è¨è¿è¡åºãä½æ¯è¿äºåºå¯¹å ¼å®¹æ§å½±åå¾å¤§ã
åºæ¬å½ä»¤éåæ ·æ¯è¿è¡ç¨æ·åºç¨çåºç¡ï¼ä¸»è¦å æ¬åå§åè¿ç¨initï¼ç»ç«¯è·ågettyãShellååºæ¬å½ä»¤çãåµå ¥å¼ç³»ç»çå¯å¨è¿ç¨å¯è½ä¸æ åLinuxä¸åï¼ä¾å¦è·³è¿ç»å½è¿ç¨ç´æ¥å¯å¨GUIçãè¿å°±è¦æ±ä¿®æ¹initï¼gettyçãæ åLinuxå½ä»¤éåæ ·ç±äºä½ç§¯é®é¢æ æ³ç´æ¥åºç¨äºåµå ¥å¼ç¯å¢ãç®åï¼å°å½ä»¤éç解å³æ¹æ³ä¸»è¦æéææ¹æ³åæ±ç¼æ¹æ³ä¸¤ç§ãéææ¹æ³éç¨éæå ¬å ±é¨ååå°å½ä»¤éæ´ä½ä½ç§¯ï¼ç¨Cå®ç°ï¼æè¾å¥½çå¹³å°ç§»æ¤æ§ï¼æ±ç¼æ¹æ³åéç¨æ±ç¼ç¼ç¨åå°æ¯ä¸ªå½ä»¤çä½ç§¯ï¼è¿æ ·å¯ä½¿ä½ç§¯å¾å°ä½å ¶å¹³å°ç§»æ¤æ§è¾å·®ã
3ã åµå ¥å¼Linuxä¸çGUI
GUIå¨åµå ¥å¼ç³»ç»æè å®æ¶ç³»ç»ä¸çå°ä½è¶æ¥è¶éè¦ï¼æ¯å¦PDAãDVDææ¾æºãWAPææºçï¼é½éè¦ä¸ä¸ªå®æ´ï¼æ¼äº®çå¾å½¢ç¨æ·çé¢ãè¿äºç³»ç»å¯¹GUIçåºæ¬è¦æ±å æ¬ï¼(1)ãè½»åãå ç¨èµæºå°ï¼(2)ãé«æ§è½ï¼(3)ãé«å¯é æ§ï¼(4)ãå¯é ç½®ãè¿äºä¹æ为è¯ä»·åµå ¥å¼ç³»ç»çéè¦ææ ãç®åï¼åµå ¥å¼Linuxä¸çGUI主è¦æwinCEãMicro Windowã紧缩çX WindowãMiniGUI(å½å åå¾è¾å¥½çèªç±è½¯ä»¶ä¹ä¸)ãæ åLinuxçXfreeç±äºä½ç§¯åºå¤§ï¼è¿è¡ç¯å¢è¦æ±é«ï¼æ æ³è¿è¡äºåµå ¥å¼ç¯å¢ãåµå ¥å¼GUI主è¦éè¿åååè½ï¼éä½æ§è½æ¥å®ç°ä½ç§¯å°åå ç¨èµæºå°ãç®ååµå ¥å¼Linuxä¸çGUIç¯å¢ä¸»è¦æ两类ï¼Xç±»åwinç±»ãXç±»GUIå为æå¡æ¹å客æ·æ¹ä¸¤æ¹ãæå¡å¨æ¹æä¾é¼ æ ãé®çå¤çåæ¾ç¤ºåè½ï¼å®¢æ·æ¹æ¯ç¨æ·åºç¨ï¼æå¡æ¹å客æ·æ¹éè¿socketæ¥å£åXåè®®éä¿¡ãéç¨è¯¥æ¹å¼ååæå©äºè¿ç¨ç½ç»å¾å½¢åæå¡ï¼å®¢æ·æ¹åæå¡æ¹å¯éè¿ç½ç»å®ç°Xåè®®åå¾å½¢æ¾ç¤ºãå ¸åçXç±»GUIæMicro Windowã紧缩çX Windowçãwinç±»çGUIä¸åå¨å®¢æ·æ¹åæå¡æ¹ï¼æ¯ä¸ªä»»å¡é½èªæä¸ä½ï¼ä»»ä½ä»»å¡é´çåæ¢ãäºä»¶ååç±ä¸é¨ç管çä»»å¡è´è´£ãå¦wiCEãMiniGUIå°±æ¯ç±»ä¼¼äºwinç±»çGUIã
äºãå½åæµè¡çå ç§åµå ¥å¼Linuxç³»ç»
é¤äºæºè½æ°åç»ç«¯é¢å以å¤ï¼Linuxå¨ç§»å¨è®¡ç®å¹³å°ãæºè½å·¥ä¸æ§å¶ãéèä¸ç»ç«¯ç³»ç»ï¼çè³åäºé¢åé½æç广æ³çåºç¨åæ¯ãè¿äºLinux被ç»ç§°ä¸º"åµå ¥å¼Linux"ã
1ãRT-Linux
è¿æ¯ç±ç¾å½å¢¨è¥¿å¥çå·¥å¦é¢å¼åçåµå ¥å¼Linuxæä½ç³»ç»ãå°ç®å为æ¢ï¼RT-Linuxå·²ç»æåå°åºç¨äºèªå¤©é£æºç空é´æ°æ®ééãç§å¦ä»ªå¨æµæ§åçµå½±ç¹æå¾åå¤çç广æ³é¢åãRT-Linuxå¼åè 并没æé对å®æ¶æä½ç³»ç»çç¹æ§èéåLinuxçå æ ¸ï¼å 为è¿æ ·åçå·¥ä½éé常大ï¼èä¸è¦ä¿è¯å ¼å®¹æ§ä¹é常å°é¾ã为æ¤ï¼RT-Linuxæåºäºç²¾å·§çå æ ¸ï¼å¹¶ææ åçLinuxæ ¸å¿ä½ä¸ºå®æ¶æ ¸å¿çä¸ä¸ªè¿ç¨ï¼åç¨æ·çå®æ¶è¿ç¨ä¸èµ·è°åº¦ãè¿æ ·å¯¹Linuxå æ ¸çæ¹å¨é常å°ï¼å¹¶ä¸å åå©ç¨äºLinuxä¸ç°æç丰å¯ç软件èµæºã
2ãuClinux
uCLinuxæ¯Lineoå ¬å¸ç主æ产åï¼åæ¶ä¹æ¯å¼æ¾æºç çåµå ¥å¼Linuxçå ¸èä¹ä½ãuCLinux主è¦æ¯é对ç®æ å¤çå¨æ²¡æåå¨ç®¡çåå MMU(Memory Management Unit) çåµå ¥å¼ç³»ç»è设计çãå®å·²ç»è¢«æåå°ç§»æ¤å°äºå¾å¤å¹³å°ä¸ãç±äºæ²¡æMMUï¼å ¶å¤ä»»å¡çå®ç°éè¦ä¸å®æå·§ãuCLinuxæ¯ä¸ç§ä¼ç§çåµå ¥å¼Linuxçæ¬ï¼æ¯micro-Conrol-Linuxç缩åãå®ç§æ¿äºæ åLinuxçä¼è¯ç¹æ§ï¼ç»è¿åæ¹é¢çå°ååæ¹é ï¼å½¢æäºä¸ä¸ªé«åº¦ä¼åçã代ç ç´§åçåµå ¥å¼Linuxãè½ç¶å®çä½ç§¯å¾å°ï¼å´ä»ç¶ä¿çäºLinuxç大å¤æ°çä¼ç¹ï¼ç¨³å®ãè¯å¥½ç移æ¤æ§ãä¼ç§çç½ç»åè½ã对åç§æ件系ç»å®å¤çæ¯æåæ å丰å¯çAPIãå®ä¸ä¸ºåµå ¥å¼ç³»ç»åäºè®¸å¤å°ååçå·¥ä½ï¼ç®åå·²æ¯æå¤æ¬¾CPUãå ¶ç¼è¯åç®æ æ件å¯æ§å¶å¨å ç¾KBæ°é级ï¼å¹¶å·²ç»è¢«æåå°ç§»æ¤å°å¾å¤å¹³å°ä¸ã
3ãEmbedix
Embedixæ¯ç±åµå ¥å¼Linuxè¡ä¸ä¸»è¦ååä¹ä¸Luneoæ¨åºçï¼æ¯æ ¹æ®åµå ¥å¼åºç¨ç³»ç»çç¹ç¹éæ°è®¾è®¡çLinuxåè¡çæ¬ãEmbedixæä¾äºè¶ è¿ç§çLinuxç³»ç»æå¡ï¼å æ¬Webæå¡å¨çãç³»ç»éè¦æå°8MBå åï¼3MB ROMæå¿«ééªåãEmbedixåºäºLinux 2.2å æ ¸ï¼å¹¶å·²ç»æåå°ç§»æ¤å°äºIntel xåPowerPCå¤çå¨ç³»åä¸ãåå ¶å®çLinuxçæ¬ä¸æ ·ï¼Embedixå¯ä»¥å è´¹è·å¾ãLuneoè¿åå¸äºå¦ä¸ä¸ªéè¦ç软件产åï¼å®å¯ä»¥è®©å¨Windows CEä¸è¿è¡çç¨åºè½å¤å¨Embedixä¸è¿è¡ãLuneoè¿å°è®¡åæ¨åºEmbedixçå¼åè°è¯å·¥å ·å ãåºäºå¾å½¢çé¢çæµè§å¨çãå¯ä»¥è¯´ï¼Embedixæ¯ä¸ç§å®æ´çåµå ¥å¼Linux解å³æ¹æ¡ã
4ãXlinux
XLinuxæ¯ç±ç¾å½ç½èå ¬å¸æ¨åºï¼ä¸»è¦å¼åè æ¯éç豪ãä»å¨å çç½èå 个æå便å¼ååºäºåºäºXLinuxçãå·ç§°æ¯ä¸çä¸æå°çåµå ¥å¼Linuxç³»ç»ï¼å æ ¸åªæKBï¼èä¸è¿å¨ä¸æåå°ãXLinuxæ ¸å¿éç¨äº"è¶ åå é"ä¸å©ææ¯ï¼è®©Linuxæ ¸å¿ä¸ä» å¯è½ä¸æ åå符éç¸å®¹ï¼è¿å«çäº1 2个å½å®¶åå°åºçå符éãå æ¤ï¼XLinuxå¨æ¨å¹¿Linuxçå½é åºç¨æ¹é¢æç¬ç¹çä¼å¿ã
5ãPoketLinux
ç±Agendaå ¬å¸éç¨ãä½ä¸ºå ¶æ°äº§å"VR3PDA"çåµå ¥å¼Linuxæä½ç³»ç»ãå®å¯ä»¥æä¾è·¨æä½ç³»ç»æé ç»ä¸çãæ ååçåå¼æ¾çä¿¡æ¯éä¿¡åºç¡ç»æï¼å¨æ¤ç»æä¸å®ç°ç«¯å°ç«¯æ¹æ¡çå®æ´å¹³å°ãPoketLinuxèµæºæ¡æ¶å¼æ¾ï¼ä½¿æ®éç软件ç»æå¯ä»¥ä¸ºææç¨æ·æä¾ä¸è´çæå¡ãPoketLinuxå¹³å°ä½¿ç¨æ·çè§çº¿ä»è®¾å¤ãå¹³å°åç½ç»ä¸ç§»å¼ï¼ç±æ¤å¼åäºä¿¡æ¯ææ¯æ°æ¶ä»£ç产çãå¨PoketLinuxä¸ï¼ç§°ä¹ä¸ºç¨æ·åä¿¡æ¯äº¤æ¢(CIE)ï¼ä¹å°±æ¯æä¾å访é®ä¸ºæ¯ä¸ªç¨æ·éæ±èå®å¶ç"主é¢"ä¿¡æ¯çè½åï¼èä¸ç®¡æ£å¨ä½¿ç¨ç设å¤æ¯ä»ä¹ã
6ãMidoriLinux
ç±Transmetaå ¬å¸æ¨åºçMidoriLinuxæä½ç³»ç»ä»£ç å¼æ¾ï¼å¨GUNæ®éå ¬å ±è®¸å¯(GPL)ä¸åå¸ï¼å¯ä»¥å¨ä¸ç«å³è·å¾ãè¯¥å ¬å¸æ个å为"MidoriLinux计å"ã"MidoriLinux"è¿ä¸ªååæ¥æºäºæ¥æ¬ç"绿è²"---Midoriï¼ç¨æ¥åæ å ¶Linuxæä½ç³»ç»çç¯ä¿å¤è§ã
7ã红æåµå ¥å¼Linux
ç±å京ä¸ç§é¢çº¢æè½¯ä»¶å ¬å¸æ¨åºçåµå ¥å¼Linuxæ¯å½å åå¾è¾å¥½çä¸æ¬¾åµå ¥å¼æä½ç³»ç»ãç®åï¼ä¸ç§é¢è®¡ç®æèªè¡å¼åçå¼æ¾æºç çåµå ¥å¼æä½ç³»ç»---Easy Embedded OS(EEOS)ä¹å·²ç»å¼å§è¿å ¥å®ç¨é¶æ®µäºã该款åµå ¥å¼æä½ç³»ç»éç¹æ¯æp-Javaãç³»ç»ç®æ ä¸æ¹é¢æ¯å°ååï¼å¦ä¸æ¹é¢è½éç¨Linuxç驱å¨åå ¶å®æ¨¡åãç±äºæä¸ç§é¢è®¡ç®æç强大ç§ç åéååç¾ï¼EEOSææåå±æ为åè½å®åã稳å®ãå¯é çå½äº§åµå ¥å¼æä½ç³»ç»å¹³å°ã
å ãç»æè¯
ç±äºLinuxæ¯ä¸ä¸ªå æ ¸æºä»£ç å¼æ¾ãå ·å¤ä¸æ´å¥å·¥å ·é¾ãæ强大çç½ç»æ¯æåææ¬ä½å»çæä½ç³»ç»ï¼å æ¤åµå ¥å¼Linuxèªè¯çèµ·å°±ç§æ¿äºè¿ä¼å¤ç¬ç¹ä¼å¿ï¼è¿ä½¿å®æ£å¨å¹¶è¶æ¥è¶å¤å°åå°äººä»¬çå ³æ³¨ãæ®Even Dataæ°æ®æ¾ç¤ºï¼ææ使ç¨åµå ¥å¼Linuxçç¨æ·ä»å¹´çï¼ å¢å°å¹´ï¼ ï¼èåæVxworkåªæ¯ä»ï¼ å°ï¼ ï¼Win CEä»9ï¼ å°ï¼ ãå¦å¤ï¼å¨åµå ¥å¼Linuxçåç§åºç¨å¸åºä¸ï¼éä¿¡(è¯é³åæ°æ®)åå第ä¸ï¼å¹´çéå®é¢æ¯ä¸ç¾å ï¼èå¹´é¢è®¡å°è¾¾å°1.亿ç¾å ï¼å¯ä»¥é¢è§ï¼åµå ¥å¼Linuxå°å¨æªæ¥çéä¿¡ç¨åµå ¥å¼æä½ç³»ç»ä¸å æ®å¼ºæåçå°ä½
Linuxæ¯ç®åååç«ççæä½ç³»ç»ãå®æ¯ç±è¬å °èµ«å°è¾åºå¤§å¦çä¸ä¸ªå¤§å¦çLinus B. Torvoldså¨å¹´é¦æ¬¡ç¼åçãæ å¿æ§å¾æ æ¯ä¸ä¸ªå¯ç±çå°ä¼é¹ ã
Linuxæ¯ä¸ç§ç±»Unixç³»ç»ï¼Linuså½æ¶ç¼åå®çç®çæ¯ä¸ºäºæ¿ä»£ä¸ç§åå«Minixçæä½ç³»ç»ãMinixæ¯ç±ä¸ä¸ªåå«Andrew Tannebaumç计ç®æºææç¼åçï¼å½æ¶ç±äºUnixæ¯ä¸ä¸ªåä¸è½¯ä»¶ï¼å ¶æºä»£ç æ¯ä¸è½æ¿æ¥è¿è¡æå¦çï¼Andrewææå°±èªå·±ç¼åäºä¸ä¸ªç³»ç»ç¨äºæå¦ãæ
åçMinixç¨ä¸å¼ 软çå°±è½è£ ä¸ï¼éº»éè½å°ãäºèä¿±å ¨ï¼Minixå ·æä¸è¬æä½ç³»ç»çç¹å¾ï¼å®åæ¶å ¼å®¹Unixç³»ç»ã
Linuxæ¯ä¸ä¸ªå è´¹çæä½ç³»ç»ï¼ç¨æ·å¯ä»¥å è´¹è·å¾å ¶æºä»£ç ï¼å¹¶è½å¤éæä¿®æ¹ãå®æ¯å¨å ±ç¨è®¸å¯è¯GPL(General Public License)ä¿æ¤ä¸çèªç±è½¯ä»¶ï¼ä¹æ好å ç§çæ¬ï¼å¦Red Hat LinuxãSlackwareï¼ä»¥åå½å çXteam Linuxçã
Linuxå ·æ许å¤Unixç³»ç»çåè½åç¹ç¹ï¼è½å¤å ¼å®¹Unixï¼ä½æ éæ¯ä»Unixé«é¢çè´¹ç¨ãæ¯å¦ä¸ä¸ªUnixç¨åºåå¨åä½å¯ä»¥å¨Unixç³»ç»ä¸è¿è¡å·¥ä½ï¼åå°å®¶éå¨Linuxç³»ç»ä¸ä¹è½å®æåæ ·çå·¥ä½ï¼èä¸å¿ éæ°è´ä¹°Unixãè¦ç¥éUnixçä»·æ ¼æ¯å¸¸è§çWindowsè¦é«åºè¥å¹²åï¼åLinuxçä½å»æ´æ¯ç¸è·çè¿ã
Linuxçåºç¨ä¹åå广æ³ãSonyææ°çPS2游ææºå°±éç¨äºLinuxä½ä¸ºç³»ç»è½¯ä»¶ï¼ä½¿PS2æ身ä¸åï¼æ为äºä¸å°Linuxå·¥ä½ç«ãèåççµå½±ãæ³°å¦å°¼å å·ãçæ°åææ¯åæå·¥ä½å°±æ¯å©ç¨å¤å°Linuxæå¡å¨æ¥å®æçã
å¹´8ææ¥ï¼Linuxåå¸äºææ°çLinux 2.4.9çï¼å®ä¹å·²ç»åå²äºã
Linuxçä¼ç¹
Linuxçæµè¡æ¯å 为å®å ·æ许å¤è¯±äººä¹å¤ã
1ãå®å ¨å è´¹
Linuxæ¯ä¸æ¬¾å è´¹çæä½ç³»ç»ï¼ç¨æ·å¯ä»¥éè¿ç½ç»æå ¶ä»éå¾å è´¹è·å¾ï¼å¹¶å¯ä»¥ä»»æä¿®æ¹å ¶æºä»£ç ãè¿æ¯å ¶ä»çæä½ç³»ç»æåä¸å°çãæ£æ¯ç±äºè¿ä¸ç¹ï¼æ¥èªå ¨ä¸ççæ æ°ç¨åºååä¸äºLinuxçä¿®æ¹ãç¼åå·¥ä½ï¼ç¨åºåå¯ä»¥æ ¹æ®èªå·±çå ´è¶£åçµæå¯¹å ¶è¿è¡æ¹åãè¿è®©Linuxå¸æ¶äºæ æ°ç¨åºåçç²¾åï¼ä¸æ壮大ã
2ãå®å ¨å ¼å®¹POSIX 1.0æ å
è¿ä½¿å¾å¯ä»¥å¨Linuxä¸éè¿ç¸åºç模æå¨è¿è¡å¸¸è§çDOSãWindowsçç¨åºãè¿ä¸ºç¨æ·ä»Windows转å°Linuxå¥ å®äºåºç¡ã许å¤ç¨æ·å¨èè使ç¨Linuxæ¶ï¼å°±æ³å°ä»¥åå¨Windowsä¸å¸¸è§çç¨åºæ¯å¦è½æ£å¸¸è¿è¡ï¼è¿ä¸ç¹å°±æ¶é¤äºä»ä»¬ççèã
3ãå¤ç¨æ·ãå¤ä»»å¡
Linuxæ¯æå¤ç¨æ·ï¼å个ç¨æ·å¯¹äºèªå·±çæ件设å¤æèªå·±ç¹æ®çæå©ï¼ä¿è¯äºåç¨æ·ä¹é´äºä¸å½±åãå¤ä»»å¡åæ¯ç°å¨çµèæ主è¦çä¸ä¸ªç¹ç¹ï¼Linuxå¯ä»¥ä½¿å¤ä¸ªç¨åºåæ¶å¹¶ç¬ç«å°è¿è¡ã
4ãè¯å¥½ççé¢
Linuxåæ¶å ·æå符çé¢åå¾å½¢çé¢ãå¨å符çé¢ç¨æ·å¯ä»¥éè¿é®çè¾å ¥ç¸åºçæ令æ¥è¿è¡æä½ãå®åæ¶ä¹æä¾äºç±»ä¼¼Windowså¾å½¢çé¢çX-Windowsç³»ç»ï¼ç¨æ·å¯ä»¥ä½¿ç¨é¼ æ å¯¹å ¶è¿è¡æä½ãå¨X-Windowsç¯å¢ä¸å°±åå¨Windowsä¸ç¸ä¼¼ï¼å¯ä»¥è¯´æ¯ä¸ä¸ªLinuxççWindowsã
5ã丰å¯çç½ç»åè½
äºèç½æ¯å¨Unixçåºç¡ä¸ç¹è£èµ·æ¥çï¼Linuxçç½ç»åè½å½ç¶ä¸ä¼éè²ãå®çç½ç»åè½åå ¶å æ ¸ç´§å¯ç¸è¿ï¼å¨è¿æ¹é¢Linuxè¦ä¼äºå ¶ä»æä½ç³»ç»ãå¨Linuxä¸ï¼ç¨æ·å¯ä»¥è½»æ¾å®ç°ç½é¡µæµè§ãæä»¶ä¼ è¾ãè¿ç¨ç»éçç½ç»å·¥ä½ã并ä¸å¯ä»¥ä½ä¸ºæå¡å¨æä¾WWWãFTPãE-Mailçæå¡ã
6ãå¯é çå®å ¨ã稳å®æ§è½
Linuxéåäºè®¸å¤å®å ¨ææ¯æªæ½ï¼å ¶ä¸æ对读ãåè¿è¡æéæ§å¶ã审计è·è¸ªãæ ¸å¿ææçææ¯ï¼è¿äºé½ä¸ºå®å ¨æä¾äºä¿éãLinuxç±äºéè¦åºç¨å°ç½ç»æå¡å¨ï¼è¿å¯¹ç¨³å®æ§ä¹ææ¯è¾é«çè¦æ±ï¼å®é ä¸Linuxå¨è¿æ¹é¢ä¹åååºè²ã
7ãæ¯æå¤ç§å¹³å°
Linuxå¯ä»¥è¿è¡å¨å¤ç§ç¡¬ä»¶å¹³å°ä¸ï¼å¦å ·æxãx0ãSPARCãAlphaçå¤çå¨çå¹³å°ãæ¤å¤Linuxè¿æ¯ä¸ç§åµå ¥å¼æä½ç³»ç»ï¼å¯ä»¥è¿è¡å¨æä¸çµèãæºé¡¶çæ游ææºä¸ãå¹´1æ份åå¸çLinux 2.4çå æ ¸å·²ç»è½å¤å®å ¨æ¯æIntel ä½è¯çæ¶æãåæ¶Linuxä¹æ¯æå¤å¤çå¨ææ¯ãå¤ä¸ªå¤çå¨åæ¶å·¥ä½ï¼ä½¿ç³»ç»æ§è½å¤§å¤§æé«ã
Linuxçä¸è¶³
ç±äºå¨ç°å¨ç个人çµèæä½ç³»ç»è¡ä¸ä¸ï¼å¾®è½¯çWindowsç³»ç»ä»ç¶å æ大é¨åç份é¢ï¼ç»å¤§å¤æ°çè½¯ä»¶å ¬å¸é½æ¯æWindowsãè¿ä½¿å¾Windowsä¸çåºç¨è½¯ä»¶åºæå°½æï¼èå ¶ä»çæä½ç³»ç»å°±è¦å°ä¸äºã许å¤ç¨æ·å¨æ¢æä½ç³»ç»çæ¶åé½ä¼èè以åç软件è½å¦ç»§ç»ä½¿ç¨ï¼æ¢äºæä½ç³»ç»åæ¯å¦ä¼ä¸æ¹ä¾¿ãè½ç¶Linuxå ·æDOSãWindows模æå¨ï¼å¯ä»¥è¿è¡ä¸äºWindowsç¨åºï¼ä½Windowsç³»ç»æå ¶å¤æï¼æ¨¡æå¨æ模æçè¿è¡ç¯å¢ä¸å¯è½å®å ¨ä¸çå®çWindowsç¯å¢ä¸æ¨¡ä¸æ ·ï¼è¿å°±ä½¿å¾ä¸äºè½¯ä»¶æ æ³æ£å¸¸è¿è¡ã
许å¤ç¡¬ä»¶è®¾å¤é¢å¯¹Linuxç驱å¨ç¨åºä¹ä¸è¶³ï¼ä¸å°ç¡¬ä»¶ååæ¯å¨æ¨åºWindowsçæ¬ç驱å¨ç¨åºåæç¼åLinuxççãä½ä¸äºå¤§ç¡¬ä»¶ååå¨è¿æ¹é¢åå¾è¿ä¸éï¼ä»ä»¬çLinuxç驱å¨ç¨åºä¸è¬é½æ¨åºå¾æ¯è¾åæ¶ã
软件æ¯æçä¸è¶³æ¯Linuxæ大ç缺æ¾ï¼ä½éçLinuxçåå±ï¼è¶æ¥è¶å¤ç软件ååä¼æ¯æLinuxï¼å®åºç¨çèå´ä¹è¶æ¥è¶å¹¿ãè¿åªå°ä¼é¹ çåæ¯æ¯ååå æçã
浅度剖析 SeaBIOS 基础组件之 PCI 枚举
欢迎关注我的公众号:窗有老梅
本文是一篇关于《QEMU/KVM 源码解析与应用》系列读书笔记的番外篇,深入浅出地分析了 SeaBIOS 中 PCI 枚举的码分实现,并探讨了 PCI 体系下的码分几个有趣细节。以下内容将引导您了解 PCIe 总线基本架构、码分SeaBIOS PCI 枚举的码分实现、以及探讨设备如何得知自己的码分源码线程执行流程 bus、device 和 function 号,码分最后讨论一条总线上最多能挂载的码分设备数量。
在 PCIe 总线的码分基本架构中,图1展示了一个直观的码分总线结构图。理解 PCIe 总线中的码分 bridge 概念对于深入学习 PCI 架构至关重要,尽管关于 bridge 在 PCI 和 PCIe 下的码分不同含义,文中并未详细区分。码分
SeaBIOS 枚举 PCI 的码分基本流程如下:遍历一条 bus 上的所有 device,以实现系统对硬件设备的码分全面识别与管理。这一过程对于理解 BIOS 如何与硬件交互具有重要意义。
接下来,本文将深入探讨 PCI 枚举代码背后的一些有趣细节。首先,小数补码和源码设备是如何知道自己的 bus 号的。设备的标识 BDF(bus device function)需要通过主机桥在 PCI 总线扫描时分配给设备,此过程基于 DFS(深度优先搜索)策略。当访问到一个 bridge 时,主机桥会为其分配 primary 和 secondary bus number,subordinate bus number 则在 DFS 回溯到当前层时得知。设备在收到的配置报文中包含 bus 和 device 号,此时设备将其记录到寄存器中,类似于当有人敲门告诉你所在的门牌号,你便能知道自己所处的位置。
其次,设备如何得知自己的 device 号。设备的 device 号在与主机桥的交互过程中被确定,实际上,这是基于地址译码电路将 AD[:] 转换成片选信号,实现设备选择。PCI 总线推荐使用 AD[:] 进行地址译码,通过固化的燕窝溯源码蓝色映射关系,每种设备对应唯一的片选信号,从而确定设备号。
设备如何知道自己的 function 号?对于单 function 设备,function 号默认为 0。而对于多 function 设备或支持虚拟 function 的设备,function 号由设备内部管理,无需通过总线枚举确定。
一条总线上能挂载的设备数量受到多种因素限制。理论上,设备的 BDF 寄存器宽度允许最多 个设备。然而,实际限制还包括物理地址译码电路、负载能力,以及内存管理单元(MMU)对地址空间的支持。例如,AD[:] 的输入限制最多只能输出 路片选信号,实际的译码电路输入通常减少到 AD[:],进一步限制到 路。东方财富交易源码PCI 总线负载能力也限制了最多能挂接 个负载。
通过本文的深入探讨,您可以对 PCI 架构及其在 SeaBIOS 中的应用有更全面的理解,同时对设备识别和硬件交互过程有更深的洞察。
å¦ä½å¦ä¹ åµå ¥å¼
ä½è ï¼å¿åç¨æ·
é¾æ¥ï¼/question//answer/
æ¥æºï¼ç¥ä¹
èä½æå½ä½è ææãåä¸è½¬è½½è¯·èç³»ä½è è·å¾ææï¼éåä¸è½¬è½½è¯·æ³¨æåºå¤ã
å¦ä¹ åµå ¥å¼ç³»ç»ï¼é¦å åºè¯¥æç¡®ä»ä¹æ¯åµå ¥å¼ç³»ç»ï¼å¦åè´¹åå»å¦ï¼å´ä¸ç¥æå¦ä¸ºä½ç©ï¼å²ä¸æç¶ï¼åµå ¥å¼ç³»ç»çå®ä¹å¾å¤ï¼è¿ä¹æ¯å°æ°åµå ¥å¼ç³»ç»å¦ä¹ çä¸ä¸ªå ç´ ãç¬è æ ¹æ®èªå·±å¼ååæå¦è¿ç¨ä¸çç解ï¼ä»¥å对åç§åµå ¥å¼ç³»ç»çåºç¨è¿è¡æ»ç»ï¼æåºäºåµå ¥å¼ç³»ç»çç®åå®ä¹ï¼åµå ¥å¼ç³»ç»æ¯åµå ¥å¼è®¡ç®æºç³»ç»çç®ç§°ï¼è¿ä¸ªå®ä¹çªåºåµå ¥å¼è®¡ç®æºç³»ç»åæ®é计ç®æºç³»ç»çå ±æ§ãä¸è¡¨ååºäºåµå ¥å¼ç³»ç»çä¸äºå ¸åçåºç¨ï¼
æºè½æºå¨äººï¼S D R 4ï¼ç«æç»é车ï¼
娱ä¹åæ¶è´¹çµåï¼Gameboy Advanceï¼SonyPSPï¼
ç½ç»é信产åï¼Smartphoneï¼
åç¨è®¾å¤ï¼åç¨PDA ï¼
汽车ï¼è½¦è½½å¯¼èªï¼èªå¨é©¾é©¶ï¼å¨±ä¹ç³»ç»ï¼
æºè½ä»ªå¨ï¼èæ仪å¨ï¼
å®å ¨é²æ¤ï¼é²ç«ï¼é²çï¼
ç¯å¢ä¿æ¤ï¼æ¢ç©ºæ°çï¼
é¶è¡ååä¸æ¶è´¹ï¼ATMï¼
以ç«æç»é车为ä¾æ¥åæä¸ä¸åµå ¥å¼ç³»ç»çå®ä¹ãç«æç»é车è½ç¶å¬èµ·æ¥æè§å¨ææ¯ä¸æäºé«ä¸å¯æµï¼ä½æ¯æ¬è´¨å°±æ¯åµå ¥å¼è®¡ç®æºç³»ç»çåºç¨ï¼å ¶æ ¸å¿å°±æ¯ä¸ä¸ªè®¡ç®æºç³»ç»ï¼èè¿ä¸ªè®¡ç®æºç³»ç»çç»æåä¼ ç»ç计ç®æºç³»ç»å¨æ¬è´¨ä¸æ²¡æä»ä¹å·®å«ã两è çæ¾èä¸åä¹å¤å°±å¨äºï¼ç¨äºç«æç»é车ç计ç®æºç³»ç»è¢«å®è£ å°äºç«æç»é车ä¸ãå½ç¶ï¼ä¸ä¸ªè®¡ç®æºç³»ç»è½å¤è¢«å®è£ å¨ç«æç»é车ä¸ï¼æ¯éè¦è¿è¡å¾å¤ç¹æ®è®¾è®¡çãä½æ¯ä»æ¬è´¨ä¸è®²ï¼åµå ¥å¼ç³»ç»çæ ¸å¿æ¦å¿µè¿å¨è®¡ç®æºç³»ç»ãåµå ¥å¼ç³»ç»å¦ä¹ çéç¹ä¹å¨è®¡ç®æºç³»ç»ä¸ãä¸æ¹é¢ï¼å¦ä¹ è éè¦ç¢åºææ¡è®¡ç®æºç³»ç»æ¬èº«çæ¦å¿µï¼æ´éè¦çæ¯å¦ä¹ åµå ¥ç³»ç»çå¼åè¿ç¨åä¼ ç»è®¡ç®æºç³»ç»å¼åè¿ç¨çå·®å«ãè¿ééè¦æåºçæ¯ï¼å¾å¤å¦ä¹ è æ¬æ¥å°±æ²¡æä»äºè¿å®æ´è®¡ç®æºç³»ç»çå¼åï¼é«æ ¡çæå¦æ¯ä»¥ç¨åºè®¾è®¡ä¸ºä¸å¿çï¼è®¡ç®æºç³»ç»çææï¼æä½ç³»ç»çåçï¼ç¼ç¨è¯è¨ç课ç¨é½æ¯ä¸ºäºè½å¤è®©å¦çæ´å¥½ç使ç¨è®¡ç®æºç³»ç»è¿è¡ç¨åºè®¾è®¡ï¼å¨ç°æç计ç®å¹³å°ä¸æ¥è®¾è®¡å®ç°åç§åºç¨ï¼å¦çä¸è¬æ²¡ææºä¼å¦ä¹ ä¸ä¸ªå®æ´ç计ç®æºç³»ç»æ¯å¦ä½æ建ï¼å¹¶äº²èº«åä¸å°æ建çæ¯ä¸ä¸ªè¿ç¨ãè对äºåµå ¥å¼ç³»ç»èè¨ï¼ä»äºå¹³å°å¼åç人就æ¯è¦äº²èªå»å¼ååºä¸ä¸ªå®æ´ç计ç®æºç³»ç»ï¼è¿ä¸ªè¿ç¨å æ¬
1. éæ±åæ
2 硬件设计
3 驱å¨ç¨åº
4 Bootloader & BSP ï¼æ¿çº§æ¯æå ï¼
5 æä½ç³»ç»ç移æ¤
6 åºç¨ç¨åºçå¼å
7 æ§è½æ£æ¥
åµå ¥å¼ç³»ç»æå¦çç®çå°±æ¯æä¼å¦çå¦ä½æ ¹æ®éæ±å»å»ºç«æ»¡è¶³æç§ç¹æ®è¡ä¸éæ±çåµå ¥å¼è®¡ç®æºç³»ç»ã让å¦çå¦ä¼å¦ä½æ件硬件平å°ï¼è¿è¡ç¡¬ä»¶è®¾è®¡ï¼éæ©è½å¤æ»¡è¶³åºç¨è¦æ±çæä½³çåµå ¥å¼æä½ç³»ç»ï¼å¹¶å®æBootloaderï¼BSPå驱å¨ç¨åºçç¼åï¼ç§»æ¤ï¼è°è¯çè¿ç¨ã为äºæ»¡è¶³è¡ä¸éæ±ï¼æç»è¦å¨æ建ç«çç³»ç»ä¸ç¼åè°è¯ç¸åºçåºç¨ç¨åºï¼å¹¶è¿è¡æ§è½çæµè¯åæ£æ¥ã
ä½ æ¯è°,ä½ éè¦å¦ä¹ åªäºä¸è¥¿ï¼
å¦æä½ çå·¥ä½åªæ¯éè¦å¨PC æºä¸ç¼åä¸ä¸ªå¾çæµè§ç¨åºï¼é£ä¹ä½ 就没æå¿ è¦å»äºè§£å½ç³»ç»æ¶å°ä¸ä¸ªARP请æ±å ååºè¯¥å¦ä½ååºãåæ ·çéçï¼åµå ¥å¼ç³»ç»çå¦ä¹ ä¹æ¯æå¾å¤æ¹é¢çãå°±åµå ¥å¼ç³»ç»ç设计åå®ç°èè¨ï¼åºæ¬ä¸éè¦åç§ä¸åçå·¥ä½ï¼ç³»ç»è®¾è®¡å·¥ä½ï¼ç¡¬ä»¶è®¾è®¡å·¥ä½ï¼é©±å¨ç¨åºåæä½ç³»ç»ç§»æ¤å·¥ä½ååºç¨ç¨åºè®¾è®¡å¼åå·¥ä½ã
1.ç³»ç»è®¾è®¡å·¥ä½
å¨ç³»ç»ç设计é¶æ®µï¼ç³»ç»åæå¸å°æ ¹æ®éæ±ç¡®å®ç³»ç»ç硬件çåºæ¬ææï¼æ ¹æ®ç³»ç»çéæ±éæ©ä½¿ç¨é£ç§å¤çå¨ï¼ä½¿ç¨åªç§æä½ç³»ç»ï¼ä½¿ç¨é£äºè½¯ä»¶å¼åå·¥å ·ãç³»ç»åæå¸å¾å¾æ¯è¾ä¸ºå®æ´çåä¸è¿åµå ¥å¼ç³»ç»è®¾è®¡çå ¨è¿ç¨ï¼å¯¹äºç³»ç»åºç¨çè¡ä¸è¾ä¸ºäºè§£ï¼å¯¹äºåµå ¥å¼ç³»ç»æ¬èº«çå¼åæµç¨ååæ¸ æ¥ç人ã
2.硬件设计工ä½
ç³»ç»ç¡¬ä»¶è®¾è®¡äººåéè¦æ ¹æ®ç³»ç»åæå¸ç设计ç»æï¼è¿è¡ç¡¬ä»¶åçå¾ç设计ãé常éè¦ç¡¬ä»¶è®¾è®¡äººåçæåµå ¥å¼ç³»ç»ç硬件ææã硬件设计人åéè¦äºè§£å¸¸ç¨çåµå ¥å¼ç³»ç»å¤çå¨ï¼åå¨å¨ï¼Flashï¼SDRAMï¼ï¼ä»¥å¤ªç½MACè¯çï¼é³é¢/è§é¢ç¼è§£ç è¯çï¼çµæºç®¡çè¯çï¼æ»çº¿æ¥å£çµè·¯ (USB,PCI)ï¼æ¶²æ¶æ¾ç¤ºæ¨¡åï¼å¯ç¼ç¨é»è¾å¨ä»¶(FPGA/CPLD)ï¼æ 线ç½ç»é信模å(Bluetooth,WLAN,GPRS)ç硬件çµè·¯ææå ç´ çåºæ¬å·¥ä½åçï¼è¿æ¥ä½¿ç¨æ¹æ³ï¼ä½¿ç¨æ³¨æäºé¡¹ï¼åºæ¬è°è¯æ¹æ³çå 容ãå¨ç½ç»ä¸è½æ¾å°å¾å¤å ¬å¸çè¯ä¼°æ¿çåçå¾ï¼å¯¹äºè¿äºåçå¾è¦ä»ç»ç 究ï¼æ¸æ¸ å¤çå¨ååå¨å¨ï¼ç½å¡ï¼æ¶²æ¶æ¨¡åçå¨ä»¶çè¿æ¥æ¹æ³ååå ãéè¿å¯¹è¿äºçµè·¯çç 究ï¼è½å¤è¾å¿«å°äºè§£æ´ä¸ªåµå ¥å¼ç³»ç»çææï¼è¿äºçµè·¯åå®é 产åä¸ççµè·¯è½æä¸å®å·®å«çï¼ç¹å«æ¯å¯¹äºææ设å¤ï¼ä½è¿äºå·®å«ä¸å½±ååå¦è å¦ä¹ åµå ¥å¼ç³»ç»ç硬件设计åºæ¬ææã
以ä¸è¿äºç¥è¯ï¼å¾å¾éè¦è¾é¿æ¶é´çå¦ä¹ å积累ï¼éè¦äº²èªåä¸å®è·µçæºä¼ã对äºååæ¥è§¦åµå ¥å¼ç³»ç»ç¡¬ä»¶å¼åçå¦çæ¥è®²ï¼ä¸è¬ä¸å¯è½å ¨é¨äºè§£è¿äºç¥è¯ï¼ä½ä¹ä¸ä¼æ¯ééä¸æ æç¥ãç¬è ç»åèªå·±å¼ååæå¦çç»éªè®¤ä¸ºï¼é¦å åºè¯¥éå®ä¸æ¬¾ä¸»æµä¸è¾ä¸ºç®åçåµå ¥å¼ç³»ç»å¤çå¨ï¼æ¯å¦åºäºARM7TDMI å æ ¸çATM,S3CB0 çåµå ¥å¼ç³»ç»å¤çå¨ï¼å¦ä¹ ä½RISCå¤çå¨çç¼ç¨æ¨¡åï¼æ令éãé«æ ¡æå¦ä¸ï¼åç计ç®æºè¯¾ç¨ä¸è¬ä»¥ç³»ååçä¸ºæ ¸å¿è®²è§£ï¼ç±äºç°ä»£ä½å¤çå¨çç»æåå¼åæ¹å¼å8ä½åçæºæçè¾å¤§çå·®å«ï¼å¦ä¹ è è¿æ¯éè¦è±ä¸ç¹åæ°æ¥ç 究以ä¸ä½å¤çå¨çã以ARMå¤çå¨ä¸ºä¾ï¼å¦ä¹ è å°±éè¦ç解å¤çå¨çå¤ç§å·¥ä½æ¨¡å¼ï¼å¤ä»½å¯åå¨ï¼RISC æ令éçç¹ç¹ï¼MMU åèæå°åï¼ä¸æå¤çè¿ç¨çå 容ãå¨å¦ä¹ æ令éçè¿ç¨ä¸ï¼æ好è½å¤æ¯å¦ä¹ å æ¡æ令ï¼å°±ä½¿ç¨è¿å æ¡æ令å¨æ¨¡æå¨ä¸å®éªä»¥ä¸ï¼è§å¯å¤çå¨æ§è¡çç»æãè¿ä¸ªè¿ç¨ä¸æ¹é¢æ¯å¦ä¹ è 对äºæ令æ¬èº«çå¦ä¹ è½å¤åå¾ä¸ä¸ªæ¯è¾å¥½çææï¼å¦å¤ä¹æ¯å¯¹å¼åå·¥å ·æ¬èº«çä¸ç§å¦ä¹ ãæ¥çï¼å°±å¯ä»¥å¼å§å¦ä¹ çä¸èµæºç使ç¨åé ç½®æ¹æ³ãè¿æ¶å°±éè¦ä¸ä¸ªæ¹ä¾¿ä½¿ç¨çå¼åæ¿ï¼å¦ä¹ è è½å¤éè¿JTAG仿çå¨å°å¼åæ¿åè°è¯PCæºç¸è¿ï¼è¿è¡ç¨åºçä¸è½½ï¼è°è¯ãç¹å«æ¯è¦ä»ç»ç 究系ç»çåå§åè¿ç¨åä¸æå¤ççè¿ç¨ãå¨å¼åè¿ç¨ä¸å¦æéå°é®é¢ï¼åºèªå·±åæé®é¢äº§ççåå ï¼éè¿åæ缩å°é®é¢å¯è½äº§ççèå´ï¼æç»æ¾å°é®é¢çæå¨ãæéè¦çå°±æ¯è¦ä¿æä¸ç§è§£å³é®é¢çä¿¡å¿ï¼é¢å¯¹å°é¾å¦ä½å¤çï¼å¾å¾è½å¤å³å®æç»ç³»ç»æ¯å¦è½å¤è°è¯æåãç¶åï¼å¦ä¹ è å¯ä»¥å¼å§ä»ç»å¦ä¹ å¤çå¨ååå¨å¨çè¿æ¥ï¼åå¨ç©ºé´çé ç½®ï¼åç§å¤æ©å¨ä»¶ï¼å¦ç½å¡ï¼AC声å¡çå·¥ä½åçå使ç¨æ¹æ³ãåµå ¥å¼ç³»ç»ç¡¬ä»¶è®¾è®¡ä¸å¾å¾éè¦ä½¿ç¨å¯ç¼ç¨å¨ä»¶ï¼å¦ä¹ è è¿éè¦ä¸å®çæ¶é´æ¥å¦ä¹ 使ç¨å¸¸ç¨çå¯ç¼ç¨å¨ä»¶ï¼CP L D / F P G Aï¼ï¼å¸¸ç¨çæXilinxåAlteraå ¬å¸ç产åãè¿è¡ç³»ç»ç¡¬ä»¶åçå¾è®¾è®¡ï¼å°±éè¦ä½¿ç¨åçå¾è®¾è®¡çEDAå·¥å ·ï¼å¸¸ç¨çEDA åçå¾è®¾è®¡å·¥å ·ä¸»è¦å æ¬Cadenceå ¬å¸çCaptureï¼Protelå ¬å¸çProtelSEçãæ¥ä¸æ¥å°±å¯ä»¥åç §è¯ä¼°æ¿ççµè·¯å¾ï¼æ ¹æ®ç³»ç»ç设计è¦æ±ï¼å¼å§è¿è¡åçå¾çç»å¶äºãå¨åçå¾ç»å¶è¿ç¨ä¸ï¼ä¸å®è¦ææ¸ è¯ä¼°æ¿çµè·¯è¿æ¥çåå ï¼å¯¹äºä¸æ¶æ²¡æææ¸ æ¥çé®é¢åä¸å¯èæ··è¿å ³ãä¾å¦ï¼æäºå¤çå¨çå°å线æ¯ä»¥åèä½åä½çï¼èå¦ä¸äºå¤çå¨çå°å线åæ¯ä»¥ä¸¤ä¸ªåè为åä½çï¼å½è¿æ¥ä½çåå¨å¨çæ¶åï¼åä¸å¯æ³å½ç¶çæå¤çå¨çA 0 ç´æ¥è¿æ¥å°åå¨å¨çA 0 ä¸é¢ãå¦å¤ï¼å¦çè¿åºå ·æä¸å®çPCBæ¿å¾ç»å¶è½åï¼å 为å¨ç°é¶æ®µï¼å¾å¤å ¬å¸è¿ä¸è½å®å ¨æåçå¾ç设计工ä½åPCB çç»å¶å·¥ä½åå¼ï¼å¾å¾è¦æ±ç¡¬ä»¶è®¾è®¡äººåæ¢è½è¿è¡åçå¾è®¾è®¡åè½è¿è¡æ¿å¾è®¾è®¡ãå³ä½¿æ¯PCB设计ååçå¾è®¾è®¡åå¼çå ¬å¸ï¼ä¹éè¦åçå¾è®¾è®¡è è½ä¸ºPCB ç设计è 对äºä¸åçä¿¡å·æåºå¸æ¿è¦æ±ã
3.驱å¨ç¨åºåæä½ç³»ç»ç§»æ¤å·¥ä½
ç°ä»£åµå ¥å¼ç³»ç»çå¼ååä¼ ç»8ä½åçæºç³»ç»çå¼åç¸æ¯ï¼ä¸ä¸ªæ¾èçåºå«å°±æ¯åµå ¥å¼æä½ç³»ç»ç广æ³ä½¿ç¨ãå¨æ¿å°çæ¥å®æ¯ççµè·¯æ¿ï¼å¹¶è¿è¡åºæ¬çæµè¯åï¼å°±è¦è¿è¡é©±å¨ç¨åºåæä½ç³»ç»ç移æ¤å·¥ä½äºãé¦å è¦è¿è¡çBootloaderçç¼åå移æ¤å·¥ä½ãBootloaderç¸å½äºPCç³»ç»çBIOSã对äºæäºåµå ¥å¼æä½ç³»ç»ï¼å¦uc/OSII没æbootloaderåæ ·å¯ä»¥å¼åè°è¯ãä½æ¯å¯¹äºWindowsCEååµå ¥å¼linuxç³»ç»èè¨Bootloaderå°±æ¯å¿ é¡»çäºãæ¬æ以Windows CE 为ä¾ï¼åä¸ä¸ªç®è¦ç说æã
Windows CE ç³»ç»ç移æ¤å·¥ä½ä¸»è¦å°±æ¯BSPï¼æ¿çº§æ¯æå ï¼çå¼åè¿ç¨ãBSPå°å ·ä½ç硬件差å¼åæä½ç³»ç»çæ ¸å¿é离å¼æ¥ï¼ä¸»è¦ç±Bootloaer ï¼OALï¼OEMAbstraction Layerï¼å设å¤é©±å¨ç¨åºä¸é¨åç»æãWindowsCEç³»ç»ä¸Bootloaderå«åEbootãEboot被åå ¥ç³»ç»çå¼å¯¼Flashãç³»ç»å¯å¨æ¶è¿è¡Ebootï¼å®æéè¿ç½å¡å°è°è¯PC æºä¸WindowsCE æä½ç³»ç»æ åä¸è½½å°ç®æ ç³»ç»çSDRAMä¸å¹¶å¼å§æ§è¡çåè½ã对äºä¸ä¸ªç³»ç»ç§»æ¤äººåï¼é¦å éè¦é 读ææ¡£ï¼äºè§£WindowsCEç³»ç»BootloaderåBSPçåºæ¬æ¦å¿µåå¼åè¿ç¨ãï¼åµï¼è¿è¦åè¿å·¥ä½åï¼æè¿æ²¡æ³å°ï¼åå¦^_^ï¼ï¼Windows CEçå¼åç³»ç»Platform Builderæä¾äºè¯¦ç»çææ¡£åä¾ç¨ï¼å¼å人åéè¦ä»ç»çé 读ææ¡£åä¾ç¨ãææ¸ æ¥å个å½æ°ä¹é´çè°ç¨å ³ç³»ãå¨å¼åè¿ç¨ä¸çä¸ä¸ªéè¦çæ¥éª¤å°±æ¯æé串å£ï¼ä½¿å¾ç®æ æ¿è½å¤éè¿PCæºä¸²å£åè°è¯PC æºåéæ°æ®ãç±äºARMç³»ç»ç仿çå¨æ¯è¾æè´µï¼èä¸æä½ç³»ç»çè°è¯å¾å¾ä¸ä½¿ç¨JTAGè°è¯å¨è¿è¡åæ¥è°è¯ãæ以è½ä»ä¸²å£è§å¯ç¨åºçæ§è¡è¿ç¨åç»æ对äºè°è¯å°±æ¾å¾ååéè¦äºã串å£æéä¹åä¸ä¸ªæ¯è¾æ£æçé®é¢å°±æ¯ç½å¡è¯ççè°è¯ãååæ¥è§¦åµå ¥å¼ç³»ç»å¼åç人å¾å¾æ²¡æç´æ¥å¨å¯åå¨çº§ä¸ä½¿ç¨ç½å¡è¯ççç»éªï¼èç½å¡è¯çç说æä¸è¬é½è¾ä¸ºç®çï¼è¿å°±è¦æ±å¼åè å¦ä¹ ä¸äºä»¥å¤ªç½çåºç¡ç¥è¯ï¼å¯¹ä»¥å¤ªç½çMAC å±æä¸ä¸ªåºæ¬ç认è¯ãå¦å¤ï¼åç§ç½ç»è°è¯ï¼æå ï¼å·¥å ·ç使ç¨ä¹è½å¤§å¤§éä½ç³»ç»è°è¯çé¾åº¦ãç³»ç»çOALéè¦æ ¹æ®å ·ä½ç¡¬ä»¶çä¸åååºç¸åºçä¿®æ¹ï¼è¿ä¸ªé¨åå¯åç §ææ¡£è¿è¡ï¼å¨è°è¯è¿ç¨ä¸æ ¹æ®ä¸²å£çä¿¡æ¯åæåºéçå°æ¹ãè¦å ååæ¥è·¨æ件å符串æç´¢å·¥å ·çåè½ï¼å¨æµ©å¦çæµ·çæºæ件ä¸æ¾å°åºéçä½ç½®ãå½ç¶ï¼éçå¼åè 对系ç»æ件ç®å½ç»æççæåäºè§£ï¼é误å®ä½çé度ä¼ä¸æå å¿«ãWindowsCE ç驱å¨ç¨åºç¸å¯¹èè¨æ¯æ¯è¾å¥½åçã
4.åºç¨ç¨åºçå¼å
åµå ¥å¼ç³»ç»çåºç¨ç¨åºå¼ååå¨PC æºä¸å¼ååºç¨ç¨åºçåºå«ä¸æ¯å¾å¤§ã对äºWindows CEç³»ç»èè¨ï¼Microsoftå·²ç»æä¾äºè¾ä¸ºå®åçå¼åå·¥å ·ãç¹å«æ¯.NET Compact workç使ç¨ï¼ä½¿å¾åºäºWindows CE.NETCompactworkçåºç¨ç¨åºæäºè·¨å¹³å°æ§ãå¼å人åå¯ä»¥ä½¿ç¨Windows çC# è¯è¨ç´æ¥å¨PC ä¸è¿è¡http://CE.NETåºç¨ç¨åºçå¼åå模æè°è¯ï¼ä¹å¯å°ç®æ ç³»ç»åPC æºç¸è¿ï¼è¿è¡èæºè°è¯ãç°å¨æå¾å¤ç³»ç»æ¯æJ2ME(JAVAçåµå ¥å¼ç³»ç»çæ¬) ï¼è¿ä½¿å¾JAVA å¨åµå ¥å¼ç³»ç»åºç¨å¼åä¸å æè¾å¤§çä¼å¿ãå¦å¤ï¼ä½ä¸ºä¸ä¸çåµå ¥å¼ç³»ç»è½¯ä»¶å¼å人åï¼è¿éè¦å åäºè§£é¢å对象ææ¯å设计模å¼çæ¹é¢çç¥è¯ï¼å½ç¶ä½ä¸ºåå¦è å¯ä»¥å ä¸æ·±å ¥ç 究è¿æ¹é¢çå 容ã
常ç¨åµå ¥å¼ç³»ç»å¤çå¨åæä½ç³»ç»
å¤çå¨
常ç¨åµå ¥å¼ç³»ç»å¤çå¨ä¸»è¦å æ¬ARM å¤çå¨ï¼Power PC å¤çå¨ï¼åºäºMIPS å æ ¸çåµå ¥å¼å¤çå¨ï¼è½¯æ ¸å¤çå¨ï¼å¦Altera çNiosåXilinxçMicroBlazeçï¼åDSPï¼æ°åä¿¡å·å¤çå¨ï¼çã
ARM å¤çå¨ç主è¦ç¹ç¹æ¯å ·æè¾é«çæ§è½åèæ¯ãARMå¤çå¨è¢«å¹¿æ³çåºç¨å¨ææºï¼PDAçé¢åï¼å ¶ä¸è¾ä¸ºèåçæIntel å ¬å¸ç产çåºäºARM å æ ¸çXScaleç³»åå¤çå¨ãç±äºææå ¬å¸ç产çåºäºARMå æ ¸çå¤çå¨å ·æç¸åçç¼ç¨æ¨¡åï¼å¨ææåçµæ± ä¾çµçç³»ç»ä¸ï¼åºäºARMçåµå ¥å¼ç³»ç»å¤çå¨å¾å¾è¢«é¦å éç¨ãPowerPCï¼ç®ç§°PPCï¼å¤çå¨å ·æè¾å¼ºçè¿ç®æ§è½åæ°æ®ååè½åï¼å¨ç½ç»åæ°æ®éä¿¡é¢ååºäºPPCçåµå ¥å¼ç³»ç»å¤çå¨æç广æ³çåºç¨ãå ¶ä¸Motorolaå ¬å¸ç产çMPC/MPC被大éå°åºç¨å¨åµå ¥å¼ç½ç»äº§åä¸ãMIPS å¤çå¨çç¹ç¹è¡¨ç°å¨åå强大çå¤çè½åä¸ãä½ä¸ºé«æ§è½å¤çå¨ï¼MIPSå¤çå¨éç¨äºç½ç»ãä¼ä¸åé«çº§æ¶è´¹ç±»çµååºç¨ï¼ç¹å«æ¯å¨æºé¡¶çç³»ç»ä¸ï¼MIPSå¤çå¨å ·æè¾é«çå¸åºå æçãéçå¯ç¼ç¨å¨ä»¶çè§æ¨¡ä¸ææ©å¤§ï¼ä½¿å¾äººä»¬è½å¤æ ¹æ®éè¦å®å¶å¤çå¨ï¼å¹¶æ¹ä¾¿çå°é对æç§ç¹æ®åºç¨å®å¶çå¤çå¨æ¹ä¾¿çå¨å¯ç¼ç¨å¨ä»¶å é¨å®ç°ãé¤äºå¤çå¨å¤ï¼è®¡ç®æºç³»ç»è¿éè¦è®¸å¤å ¶ä»ææé¨åï¼æ¯å¦å¨å¤ééåªä½æ°æ®å¤çç³»ç»ä¸ï¼ç»å¸¸éè¦ä½¿ç¨å¯ç¼ç¨å¨ä»¶æ¥å®ç°é«éçæ°æ®å¤çåè½ï¼ä½¿ç¨è½¯æ ¸DSPæ¥å®ç°å¤æçæ°åä¿¡å·å¤çç®æ³ï¼åæ¶è¿éè¦å¤çå¨è¿è¡äºå¡å¤çï¼è½¯æ ¸å¤çå¨å°å¯ç¼ç¨å¨ä»¶ï¼DSPåå¤çå¨ç»åå¨ä¸èµ·ï¼ä¸ºç³»ç»çº§è®¾è®¡æä¾äºæ大ççµæ´»æ§ãDSPï¼æ°åä¿¡å·å¤çå¨ï¼æå«äºéç¨å¤çå¨ï¼éä¸è¡¨ç°å¨å ¶å¼ºå¤§çæ°åä¿¡å·å¤çè½åä¸ãå¨DSP å é¨æä¾äºç¡¬ä»¶ä¹ç´¯å å¨ï¼å¤çå¨å¨è®¾è®¡ä¸å¯¹äºç¹æ®ç寻åæ¹å¼åäºä¼åï¼ä¸äºDSP è¿æ¯æé¶è循ç¯ï¼Zero OverheadLoopï¼ã为äºæ¹ä¾¿åµå ¥å¼ç³»ç»è®¾è®¡ï¼ä¸»æµDSP ä¸è¬ä¹é½æä¾äºä¸°å¯çå¤è®¾ãç¹å«å¼å¾ä¸æçæ¯ADI å ¬å¸çBlackfin ç³»åDSPåTI å ¬å¸çDMXç³»åDSPï¼ä¸¤ç§å¤çå¨é½æä¾äºä¸°å¯ççä¸å¤è®¾ï¼é常éç¨åµå ¥å¼ç³»ç»åºç¨ã
æä½ç³»ç»
http://WindowCE.NET/5.0
ä½ä¸ºMicrosoftç产åï¼WindowCE.NE/5.0æä¾äºåè½å®å¤çå¹³å°å¼åå·¥å ·Platform Builderååºç¨å¼åå·¥å ·Embedded Visual C++/Visual Studio ãWindowsCEç±äºæ¥æ广大使ç¨è æçæçwindowsçé¢ï¼ç³»ç»æä¾äºä¼å¤é©±å¨ç¨åºï¼å¹¶ä¸æå®å¤çææ¡£æ¯æã对äºåºç¨å¼åèè¨ï¼çæWindowsç³»ç»å¼åçç¨åºåå¾å®¹æ转å°WindowsCE åºç¨ç¨åºçå¼åãWindows CEå°ä¼æ¯ä¸ä¸ªé常æåéçåµå ¥å¼æä½ç³»ç»ã
VxWorks
VxWorksæ¯ç±Windriverï¼é£æ²³ï¼å ¬å¸åºåçåµå ¥å¼å®æ¶æä½ç³»ç»ï¼å¤§åé¼é¼çç«æç»é车就æ¯ä½¿ç¨äºVxWorksãWindriver为VxWorksæä¾äºéæå¼åç¯å¢tornadoã
Ï C/OSII
Ï C/OSæ¯ç±Jean Labrosse设计ç¼åçå¼æ¾æºä»£ç çåµå ¥å¼å®æ¶æä½ç³»ç»ï¼ç¬è ææ©æ¥è§¦çåµå ¥å¼æä½ç³»ç»å°±æ¯å®ãé è¯»å¹¶æ·±å ¥çè§£Ï C/OSçæºä»£ç 对äºç解å®æ¶ç³»ç»æ¯å¤§æ裨ççã
ARM Linux
ARM linuxæ¯ç±Russell Kingåå ¶ä»å¼åè å¼å移æ¤çç¨äºARM å¤çå¨çlinuxæä½ç³»ç»ãARM Linuxç³»ç»å¨GNU GPLä¸åå¸ã
Ï CLinux
Ï Clinux æ¯éç¨äºæ²¡æMMU çåµå ¥å¼å¤ççLinuxOS çæ¬ãÏ Clinux åæ ·å¨GNU GPLåå¸ã
åµå ¥å¼ç³»ç»å¼åè¿ç¨ä¸ç常è§é®é¢å解å³æ¹æ³
Bootloaderå¦ä½åå ¥Flash ï¼
åå¦è ä¸è¬é½ä¼éå°å¦ä½å°ç¨åºåå ¥å¤çå¨çé®é¢ã对äºä¸åçå¤çå¨ï¼å¯ä»¥éç¨ä¸åçæ¹æ³ãä¾å¦IntelçXscaleå¤çå¨å¯ä»¥ä½¿ç¨Intelå ¬å¸æä¾çJFlashå·¥å ·ç§åã对äºå ·æJTAGè°è¯å·¥å ·è½¯ä»¶çå¤çå¨ï¼å¯ä»¥ä½¿ç¨å¦ä¸æè·¯ï¼ç¼åä¸æ®µç¨åºï¼è¿æ®µç¨åºè½å°ä½äºSDRAM/SRAM åºå®å°åä¸çæ°æ®åå ¥Flashä¸ãç§åæ¶ï¼é¦å ï¼å°è¿æ®µè½¯ä»¶ä¸è½½å°SDRAM ä¸ï¼ç¶åéè¿è°è¯è½¯ä»¶å°è¦åå ¥Flashçæ°æ®ä¸è½½å°SDRAM/SRAMçæ个åºå®å°åå¼å§çç¼å²åºï¼ç¶åéè¿è°è¯å¨å¼å§æ§è¡ç¨åºï¼å°æ°æ®åå ¥Flashãé¤æ¤ä»¥å¤ï¼ç½ç»ä¸è¿æä¾äºå¾å¤ä¸ç¨çåFlashçå·¥å ·ï¼å¼åè å¯ä»¥æ ¹æ®èªå·±çéè¦éç¨ã(ç°å¨æç½äºæå¨å¦çé£ä¸ªBF为ä»ä¹å ä¸ä¸ªflashProgramer.dxeå äº)
ä»ä¹æ¯arm-elf-gccï¼
arm-elf-gccæ¯ä¸ä¸ªäº¤åCè¯è¨ç¼è¯å¨ãæ们å¨PCå¹³å°ä¸ç¼è¯ç¨åºï¼ç¼è¯å¨è¿è¡çå¤çå¨åçæç代ç å°è¦è¿è¡çå¤çå¨ç¸åãä½æ¯ï¼å¨PC
æºä¸ç¼è¯ARMç¨åºæ¶ï¼ç¼è¯å¨è¿è¡çå¤çå¨åçæç代ç è¿è¡çå¤çå¨ä¸åï¼è¿ç§ç¼è¯å¨å«å交åç¼è¯å¨ãå ¶ä¸çelfæ¯æç¼è¯å¨çæçç®æ æä»¶æ ¼å¼ã(å ¶å®æ们平æ¶ç¨çåçæºç¼è¯å¨å¦GCCâAVRçå·²æ¯äº¤åç¼è¯å¨äºï¼æå°ç°å¨æå¼æ¸ æ¥ä»ä¹æ¯äº¤åç¼è¯å¨)
èµ°äºåªæ¡ç¼è¯è·¯å¾ï¼
ç³»ç»ç¨åºå驱å¨ç¨åºå¾å¾å å«å¾å¤çç¼è¯é项ï¼å¾å¤é项é½æ¯å¨ç¼è¯æ¶éè¿å½ä»¤è¡å®ä¹çï¼å¦ææ³ç¥éç¼è¯çæ¯é£ä¸æ®µç¨åºå¯ä»¥ä½¿ç¨å¦ä¸çæ¹æ³ï¼
#ifdef PLAT_AAA
#error Code for Platform AAA
#else
#error Code NOT for Platform AAA
#endif
è¿æ ·å¨ç¼è¯çæ¶åå°±ç¥éï¼ç¼è¯çæ¯åªä¸æ¡è·¯ç»äºã对äºæ¯æ#pragma message( âI am hereâ)çç¼è¯å¨ä¹å¯ä½¿ç¨#pragma messageé¢ç¼è¯æ令ã
ææä¹ç¥éé£æ®µä»£ç å¨é£ä¸ªæ件ä¸ï¼
ç³»ç»ç¼ç¨ä¸ç»å¸¸éè¦ä½¿ç¨å¨å¤ä¸ªæ件ä¸æç´¢å符串ï¼å¨windowså¹³å°ä¸å¯ä»¥ä½¿ç¨å¹³å°æä¾çå¤æ件å符串æç´¢å·¥å ·ãå¨linuxå¹³å°ä¸ï¼å¯ä»¥ä½¿ç¨grepæ¥æç´¢å符串ãGrepçæç´¢åè½åå强大ï¼æ¯ææ£å表达å¼æç´¢ï¼çç»ä½¿ç¨grep对äºé 读系ç»å驱å¨ç¨åºä»£ç æ¯å¾æ帮å©çã
ç³»ç»æ¯ä»é£ä¸ªæ件å¼å§è¿è¡çï¼
对äºWindows CEç³»ç»ï¼ä¸è¬ä»WINCE\PLATFORM\YourPlatform\KERNEL\HALç®å½çæ个æ±ç¼æ件ä¸ã对äºLinuxç³»ç»çæ¬ä¸åä¼åå¨ä¸å®å·®å¼ï¼ä»¥armå¤çå¨ä¸ºä¾ï¼ä¸è¬ä¼å¨linux2.4.x\arch\arm\kernelçhead-armv.Sä¸ã
ç¨åºæ§è¡å°äºé£éï¼
å¯ä»¥å¨ç¨åºä¸æå ¥å¦ä¸ä»£ç æ¥å®ç°
printf( âI am here %s, %d\nâ,__FILE__,__LINE__);
代ç å°æåºprintfè¯å¥æå¨çæ件ååè¡å·ã
æ¨è书ç®
Jean J.Labrosse MicroC/OS-II The Real-TimeKernel,Second Editionè¿æ¬ä¹¦æ¯ç¬è æ¥è§¦åµå ¥å¼å®æ¶ç³»ç»çå ¥é¨ä¹¦ï¼å¨å½å è½å¤ä¹°å°ä¸æçãè¿æ¬ä¹¦è¾ä¸ºæ¸ æ¥å°è®²è¿°äºå®æ¶ç³»ç»çæ¦å¿µï¼å个ç»æé¨åçå·¥ä½åçï¼ç¹å«æ¯å ¬å¼äºå®æ¶ç³»ç»å æ ¸çæºä»£ç ï¼ä»ç»ç 究å®ä¼åçåªæµ ãæ个å°çæ示ï¼å¯¹äºåå¦è ï¼è¿æ¬ä¹¦å¯ä»¥å ä¸ç第ä¸ç« ï¼ç´æ¥ä»ç¬¬äºç« çèµ·ã
Abraham Silberschatz, Peter Baer Galvin,GregGagne Operating System Conceptsç¬è å¨æå¦è¿ç¨ä¸åç°ï¼æ 论æ¯è®¡ç®æºè¿æ¯çµåå·¥ç¨ä¸ä¸é½æå¾å¤å¦ç对äºæä½ç³»ç»çåºæ¬æ¦å¿µé½æ²¡æææ¸ ï¼å¾å°æå¦çæå®æ´çç³»ç»ç¼ç¨ç»éªãOperating System Conceptsè¿æ¬ä¹¦å¯¹æä½ç³»ç»çæ¦å¿µè®²è¿°åªè½ç¨ç»å ¸æ¥å½¢å®¹ã对äºåµå ¥å¼ç³»ç»æå ´è¶£æ·±å ¥ç 究çåå¦ï¼é¦å è¦æåºç¡æ好ï¼è¿æ¬ä¹¦å°±æäºå¿ 读ä¹ç©äºã
Andrew S. Tanenbaum Computer Networks æèµ·Andrew S. Tanenbaum å¦ä¹ 计ç®æºçåå¦ä¸å®é½ç¥éOPERATINGSYSTEMs:Designand
Implementationè¿æ¬ä¹¦ï¼ç¬è 对äºTanenbaumè¿æ ·çææç±è¡·ä½©æãç½ç»åè®®æ æ¯åµå ¥å¼ç³»ç»ä¸çæ¯æ±æ§ç»æé¨åãæ¿æè´åäºç½ç»æ·±å±ææ¯ç 究çåå¦ï¼è¿æ¬ä¹¦å°ä¸ºä½ 们建ç«ä¸ä¸ªåå®çç½ç»åºç¡ã
Karim Yaghmour Building Embedded Linux Systemsæ¬ä¹¦è¯¦å°½çä»ç»äºåµå ¥å¼linuxç³»ç»çç»æï¼åºæ¬æ¦å¿µåå¦ä½å»å»ºç«å个é¨åãå ¨ä¹¦ç¯å¹ è¾å°ï¼å¯è°çå°ç²¾æãå³å¯ä»¥ä½ä¸ºåµå ¥å¼linuxç³»ç»çå ¥é¨è¯»ç©ï¼åæ¯å¼åè¿ç¨å个é¨åçæåã
Advanced RISC Machines Ltd (ARM) ARM7 TDMI DataSheet Advanced RISC Machines Ltd (ARM) ARMTTechnical Reference Manualå¦ä¹ åµå ¥å¼ç³»ç»ä¸äºè§£å½ååºç¨æ广æ³çåµå ¥å¼å¤çå¨æä¹è¡ï¼ARM7 TDMI ç data sheetæ¯å¦ä¹ ARMç¼ç¨æ¨¡åï¼æ令éç好ä¸è¥¿ãå¨åµå ¥å¼ç³»ç»ä¸ï¼MMUï¼å å管çåå ï¼æ¯å¾éè¦çé¨åï¼åæ¯è¾é¾ç解åææ¡çé¨åãARMTTechnical Reference Manual æ£å¥½å¯ä»¥å¸®ä½ 讲解è¿æ¹é¢çå 容ã
Perter Van Der LinDen Expert C Programmingåµå ¥å¼ç³»ç»çº§ç¼ç¨æ常ç¨çè¯è¨è¿æ¯C ãå¾å¤åå¦é½èªè®¤ä¸ºèªå·±çCè¯è¨å¦çå¾å¥½ï¼é£å¥½ï¼å°±ççè¿æ¬ä¹¦å§ï¼æ¾æ¾èªå·±åExpertså·®è·ã
åµå ¥å¼å¼åä¸æ¡é¢å¼åæ¢æä¸åï¼åæé常大çèç³»ï¼èä¸åå注éå®é æä½è½åãææ¡é¢å¼åç人å¨ä¸å¼å§æ¥è§¦åµå ¥å¼çæ¶åï¼é常转æ¢ä¸è¿æ¥ï¼è¿ä¸»è¦ä½ç°å¨å®ä½ä¸ãå¦æä¸æ说ï¼ä½ æ¯è°ï¼ä½ è¦åä»ä¹ï¼æ对硬件çäºè§£ä» éäºç¼ç¨é¢åï¼PCB设计ä¸çªä¸éï¼ä½å¹¶ä¸è½è¯´ä½ ä¸æ硬件就ä¸è½ä»äºåµå ¥å¼å¼åãä¸ä¸ªç³»ç»çå¼å设计æ¹æ¹é¢é¢ï¼å¨èªå·±æå ´è¶£åçæçé¢åååºèªå·±çè´¡ç®ææ¯æ主è¦çã
1ã硬件设计: éè¦æ硬件设计çç»éªï¼å¯¹åç§åµå ¥å¼å¨ä»¶æå¾å¥½çäºè§£ã
2ãç³»ç»ç§»æ¤ï¼éè¦æ±ç¼ç»éªï¼æä½ç³»ç»åç以ååºå±é©±å¨çäºè§£
3ãåºç¨ç¨åºï¼éè¦æ¡é¢ç¼ç¨ç»éª
Ariane处理器源码剖析(五)续:MMU
虚拟存储器概念
在没有使用虚拟地址的系统中,处理器输出的地址直接送到物理存储器。而使用虚拟地址时,处理器输出的地址为虚拟地址,不会直接送到物理存储器,需要先进行地址转换。负责转换的部件称为MMU。
使用虚拟存储器不仅可以减少物理存储器容量需求,还有保护和共享等好处。虚拟地址通过页表(PT)映射到物理地址。页表存储虚拟地址到物理地址(***到PFN)的对应关系,表格大小取决于系统可用内存。页表结构不同于Cache,直接使用***寻址,vuejs砸金蛋源码无需Tag。
访问虚拟地址时,可能需要两次物理内存访问:先访问页表获取物理地址,再使用物理地址访问内存。现实中,处理器使用TLB和Cache加速过程。多级页表减少页表占用空间,TLB负责快速查找。缺页(Page Fault)发生时,从下级存储取页并更新页表。
操作系统使用页表控制每个页的访问权限,实现程序权限管理。写通(Write Through)方式在某些Cache间使用,写回(Write Back)类型Cache中,指令执行时仅更新D-Cache,物理内存更新可能延迟。
TLB(Translation Lookaside Buffer)作为页表缓存,提高访问速度。现代处理器采用两级TLB,容量和替换策略影响性能。TLB缺失可能由软件或硬件触发,随机替换算法适用于TLB。TLB写入确保页不被替换。控制TLB和Cache需管理进程ID等信息。
虚拟Cache通过虚拟地址寻址,与物理Cache不同,仍需TLB加速访问。虚拟Cache引入同义和同名问题,通过进程ID解决。控制Cache包括写操作、寻址策略等。将TLB和Cache放入流水线优化性能,限制了Cache大小。使用Virtually-Indexed, Virtually-Tagged方式,虚拟Cache与物理Cache结合解决重名问题。
MMU模块、TLB、虚拟内存系统、PTW等组件实现虚拟存储器功能。通过不同策略优化访问速度和内存使用。
linux内核$(kallsyms.o)详解续篇 --- 内核符号表的生成和查找过程
在内核中,维护着一张符号表,记录着内核中的所有符号,包括函数与全局变量的地址与名称。这张表嵌入在内核镜像中,供内核运行时随时查找符号名。通过调用__print_symbol,内核代码能打印出符号名。 接下来,我们将详细解析内核符号表的生成与查找过程。系统映像文件与/proc/kallsyms的区别与联系
系统映像文件(System.map)在编译内核时生成,记录了内核中的所有符号及其在内存中的虚拟地址。文件由scripts/mksysmap脚本生成,依赖于nm命令。系统映像文件的每条记录包括地址、符号类型与符号名。符号类型包括函数、全局变量等。 而/proc/kallsyms文件是在内核启动后自动生成,位于/proc目录下,其代码实现于kernel/kallsyms.c。区别在于它包含了内核模块的符号列表,并且允许用户态访问,非内核常规操作。通常,我们只需关注_stext ~ _etext 和 _sinittext ~ _einittext之间的符号。内核符号表的生成与查找
内核在运行过程中可能需要查找地址对应的函数名,如Oops或调试信息输出。但内核并未依赖System.map或/proc/kallsyms文件,而是通过vmlinux中的符号表(.tmp_vmlinux2.o)实现快速查找。内核符号表结构
内嵌符号表通过scripts/kallsyms工具生成,源码位于kallsyms.c。该表包含6个全局变量:kallsyms_addresses、kallsyms_num_syms、kallsyms_names、kallsyms_token_table、kallsyms_token_index与kallsyms_markers。其中,kallsyms_addresses记录所有符号地址,kallsyms_num_syms统计符号数量,kallsyms_names存放符号名,kallsyms_token_table与kallsyms_token_index用于压缩存储高频率字符串。压缩算法与优化
内核使用压缩算法减少存储开销,将高频率字符串表示为token,并通过kallsyms_token_table与kallsyms_token_index实现压缩与解压。kallsyms_markers将符号每个分组,加速查找过程。查找过程实例与源码分析
举例说明查找地址0xc对应的符号名。首先在System.map中定位到该地址位于__create_page_tables与__enable_mmu之间。在.tmp_kallsyms2.S文件中,利用二分查找定位符号地址,然后通过kallsyms_names与kallsyms_markers加速查找过程。最后解析压缩的符号名,得到结果为__enable_mmu。内核模块符号查找
内核模块在启动时动态加载,其符号表存储在struct module结构中,所有已加载模块的struct module结构构成全局链表。查找内核模块中的符号时,调用kallsyms_lookup()函数,模块符号查找由get_ksymbol()函数完成。MappedByteBuffer VS FileChannel å°å¼ºå°å¼±ï¼
Java å¨ JDK 1.4 å¼å ¥äº ByteBuffer ç NIO ç¸å ³çç±»ï¼ä½¿å¾ Java ç¨åºåå¯ä»¥æå¼åºäº Stream ï¼ä»è使ç¨åºäº Block çæ¹å¼è¯»åæ件ï¼å¦å¤ï¼JDK è¿å¼å ¥äº IO æ§è½ä¼åä¹çââ é¶æ·è´ sendFile å mmapãä½ä»ä»¬çæ§è½ç©¶ç«æä¹æ ·ï¼ å RandomAccessFile æ¯èµ·æ¥ï¼å¿«å¤å°ï¼ ä»ä¹æ åµä¸å¿«ï¼å°åºæ¯ FileChannel å¿«è¿æ¯ MappedByteBuffer å¿«......(é¶æ·è´åè Zero Copy I: User-Mode Perspective )
天åï¼é®é¢å¤ªå¤äºï¼ï¼ï¼ï¼ï¼ï¼
让æä»¬æ ¢æ ¢åæã
æ们ç¥éï¼Java ä¸çæå¾å¤ MQï¼ActiveMQï¼kafkaï¼RocketMQï¼å»åªå¿ MQï¼èä»ä»¬åæ¯ Java ä¸çä½¿ç¨ NIO é¶æ·è´ç大æ·ã
ç¶èï¼ä»ä»¬çæ§è½å´å¤§ç¸åï¼æå¼å ¶ä»çå ç´ ï¼ä¾å¦ç½ç»ä¼ è¾æ¹å¼ï¼æ°æ®ç»æ设计ï¼æ件åå¨æ¹å¼ï¼æä»¬ä» ä» è®¨è®º Broker 端对æ件ç读åï¼ççä»ä»¬æä»ä¹ä¸åã
ä¸å¾æ¯æ¥¼ä¸»æ¥çæºç æ»ç»çå个 MQ 使ç¨çæ件读åæ¹å¼ã
é£ä¹ï¼å°åºæ¯ MMAP 强ï¼è¿æ¯ FileChannel 强ï¼
MMAP ä¼æå¨ç¥ï¼åºäº OS ç mmap çå åæ å°ææ¯ï¼éè¿ MMU æ å°æ件ï¼ä½¿éæºè¯»åæ件å读åå åç¸ä¼¼çé度ã
é£ FileChannel å¢ï¼æ¯é¶æ·è´åï¼å¾éæ¾ï¼ä¸æ¯ãFileChannel å¿«ï¼åªæ¯å 为ä»æ¯åºäº block çã
æ¥ä¸æ¥ï¼benchmark everything ââ å¾å¦.
å¦ä½ Benchmarkï¼ Benchmark åªäºï¼
æ¢ç¶æ¯è¯»åæ件ï¼èªç¶å°±è¦ç读åæ§è½ï¼è¿æ¯æåºæ¬çãä½ï¼æ³¨æï¼é常 MQ ä¼ä½¿ç¨å®æ¶å·çï¼é²æ¢æ°æ®ä¸¢å¤±ï¼MMAP å FileChannel é½æ force æ¹æ³ï¼ç¨äºå° pageCache çæ°æ®å·å°ç¡¬çä¸ãforce ä¼å½±åæ§è½åï¼ çæ¡æ¯ä¼ãå½±åå°ä»ä¹ç¨åº¦å¢ï¼ ä¸ç¥éãæ¯æ¬¡åå ¥çæ°æ®å¤§å°ä¼å½±åæ§è½åï¼æ¯«æ çé®ä¼ï¼ä½è§åæ¯ä»ä¹å¢ï¼FileOutputStream ççä¸æ æ¯å¤åï¼çæ¡æ¯ä¸ä¸å®ã
ä¸ç´ä»¥æ¥ï¼æ件è°ä¼é½æ¯èºæ¯ï¼å 为影åæ§è½çå ç´ å¤ªå¤ï¼é¦å ï¼SSD çåºç°ï¼å·²ç»è®©ä¼ ç»åºäº B+ tree çæ å½¢ç»æ产çäºèªæçé®ï¼ç¬¬äºï¼æ¯ä¸ªæ件系ç»çæ§è½ä¸åï¼Linux ext3 å ext4 æ§è½å¤©å£¤ä¹å«ï¼å é¤æ件çæ§è½å·®è·å¨ åå·¦å³ï¼ãè Max OS ç HFS+ ç³»ç»è¢« Linus 称ä¹ä¸ºâæå²ä»¥æ¥æåå¾çæ件系ç»âï¼å¹¸è¿çæ¯ï¼è¹æç»äºå¨ å¹´æ¨éäº macOS High Sierra å iOS .3 ç³»ç»ï¼è¿ä¸ªä¸¤ä¸ªç³»ç»é½æå¼äº HFS+ï¼æ¢æäºæ§è½æ´é«ç APFSãèæ¯ä¸ªæ件系ç»åå¯ä»¥è®¾ç½®ä¸åçè°åº¦ç®æ³ï¼å¦å¤ï¼è¿æèæå å缺页ä¸æ带æ¥çæ§è½æ¯åº.......
ï¼tipsï¼è¯å¿ç RocketMQ æä¾äº Linux IO è°ä¼çèæ¬ï¼è¿ç¹åçä¸é ï¼ï¼
è·é¢äºã
楼主åäºä¸ä¸ªå°é¡¹ç®ï¼ç¨äºæµè¯ Java MappedByteBuffer & FileChannel & RandomAccessFile & FileXXXputStream ç读åæ§è½ã大家ä¹å¯ä»¥å¨èªå·±çæºå¨ä¸è·è·çã
CPUï¼intel i7 4æ ¸8çº¿ç¨ 4.2GHz
å åï¼GB DDR4
ç£çï¼SSD 读å 2GB/s å·¦å³
JDK1.8
OSï¼Mac OS ..6
èæå åï¼ æªå ³éï¼å¤§å° 9GB
æµè¯æ³¨æç¹ï¼
1GB æ件ï¼
æµè¯ MappedByteBuffer & FileChannel & RandomAccessFile & FileInputStream.
ä»è¿å¼ å¾éï¼æ们çå°ï¼mmap æ§è½å®èï¼ç¹å«æ¯å¨å°æ°æ®éçæ åµä¸ãå ¶ä»çæµï¼åªæå¨4kb çæ åµä¸ï¼æå¼å§åæ mmapãå æ¤ï¼è¯» 4kb 以ä¸çæ°æ®ï¼è¯·ä½¿ç¨ mmapã
åæ¾å¤§çç mmap å FileChannel çæ¯è¾ï¼
æ ¹æ®ä¸å¾ï¼æ们çå°ï¼å¨åå ¥æ°æ®å å¤§äº 4kb 以ä¸çæ åµä¸ï¼FileChannel çä¸ä¼éé¶æ·è´ï¼åºæ¬å®è mmapï¼é¤äºé£ä¸ªä¸æ¬¡è¯» 1G æ件ç BT æµè¯ã
å æ¤ï¼å¦æä½ çæ°æ®å å¤§äº 4kbï¼è¯·ä½¿ç¨ FileChannelã
1GB æ件ï¼
æµè¯ MappedByteBuffer & FileChannel & RandomAccessFile & FileInputStream.
ä»ä¸å¾ï¼æ们å¯ä»¥çåºï¼mmap æ§è½è¿æ¯ä¸æ ·ç稳å®ãFileChannel ä¹ä¸å·®ï¼ä½æ¯å¨ åèæ°æ®éçæ åµä¸ï¼è¿å·®ç¹ææã
åç缩ç¥å¾ï¼
æ们çå°ï¼åè æ¯ FileChannel å mmap æ§è½çåæ°´å²ï¼ä» åèå¼å§ï¼FileChannel ä¸è·¯åæï¼ç´å° BT 1GB æ件ç¨ç¨è¾äºä¸ä¸¢ä¸¢ã
å æ¤ï¼æ们建议ï¼å¦æä½ çæ°æ®å 大å°å¨ åè以ä¸ï¼è¯·ä½¿ç¨ FileChannel åå ¥ã
æ们ç¥éï¼RocketMQ 使ç¨å¼æ¥å·çï¼é£ä¹å¼æ¥ force 对æ§è½æ没æå½±åå¢ï¼benchmark everythingãæ们使ç¨å¼æ¥çº¿ç¨ï¼æ¯ kb å·çä¸æ¬¡ï¼ççæ§è½å¦ä½ã
mmap ä¸ç´è½åï¼ä¸æ§è½å¾å·®ï¼é¤äºå¨ åèé£éæä¸ç¹ç¹æå¨ï¼åºæ¬ç»´æ å¨ å·¦å³ï¼è没æ force çæ åµä¸ï¼åå¨ å·¦å³ãè FileChannel åå®å ¨ä¸å force çå½±åãå¨æçæµè¯ä¸ï¼1GB çæ件ï¼ä¸æ¬¡ force éè¦ æ¯«ç§å·¦å³ãbuffer è¶å¤§ï¼æ¶é´è¶å¤ï¼åä¹åè¶å°ã
说个é¢å¤è¯ï¼Kafka ä¸ç´ä¸å»ºè®®ä½¿ç¨ forceï¼å¤§æ¦ä¹æè¿ä¸ªåå ãå½ç¶ï¼Kafka è¿æèªå·±çå¤å¯æ¬çç¥ä¿è¯æ°æ®å®å ¨ã
è¿éï¼æ们å¾åºç»è®ºï¼å¦æä½ éè¦ç»å¸¸æ§è¡ forceï¼å³ä½¿æ¯å¼æ¥çï¼ä¹è¯·ä¸å®ä¸è¦ä½¿ç¨ mmapï¼è¯·ä½¿ç¨ FileChannelã
åºäºä»¥ä¸æµè¯ï¼æ们å¾åºä¸å¼ å¾è¡¨ï¼
å设ï¼æ们çç³»ç»çæ°æ®å å¨ - å·¦å³ï¼æ们åºè¯¥ä½¿ç¨ä»ä¹çç¥ï¼
çï¼è¯»ä½¿ç¨ mmapï¼ä» ä» åä½¿ç¨ FileChannelã
ååè¿å¤´çç MQ çå®ç°è 们ï¼ä¼¼ä¹åªæ QMQ æ¯ è¿ä¹åçãå½ç¶ï¼RocketMQ ä¹æä¾äº FileChannel çåé项ãä½é»è®¤ mmap åå å¼æ¥å·çï¼åºè¯¥æ¯ broker busy çå å¶å§ã
è Kafkaï¼å 为é»è®¤ä¸ forceï¼ä¹æ¯ä½¿ç¨ FileChannel è¿è¡åå ¥çï¼ä¸ºä»ä¹ä½¿ç¨ FileChannel 读å¢ï¼å¤§æ¦æ¯å 为æ¶æ¯ç大å°å¨ 4kb 以ä¸å§ã
è¿æ ·ä¸æ£æµï¼è¿äº MQ ç设计似ä¹é½é常åçã
æåï¼è½ä¸ç¨ force å°±å«ç¨ forceãå¦æè¦ç¨ force ï¼å°±è¯·ä½¿ç¨ FileChannelã