|
貼文很久了/ ~# Q! w8 j6 a- C# S+ ]
現在回不知道回了作者看不看得到 ; k G5 X% ? {+ I$ z" ~
8 ]7 e+ C4 m' I' g! h7 p7 Q$ X" L
假如想走底層一點的工作 Y1 d' w# O9 t( e4 n4 ~, o
對於計算機架構可能要深入了解$ j9 E% C! j7 V! z5 S0 S
建議先對某個特定平台熟悉 例如ARM+Linux or ARM+WinCE6 D# _; P) m5 O" `0 d$ w
x86也可,不過x86指令和暫存器比較多
8 I2 J; A6 s2 U: M8 e: `8 h要多花一些時間閱讀
& V) [2 q4 H4 u3 Z' o7 L/ l: B7 D) P/ n- f& V; y3 r
1. 從instruction set開始研讀
) D# ~5 } e+ J* B* h. ?然後試著找一些assembly code trace看看
4 K/ T% c. U8 d( j! _+ a: ?% [0 k0 ~現在有蠻多書對於控制ARM的各種模式都有程式碼可以參考: V! t! d: _6 }, D3 }; i
像是interrupt處理 context switch等等都有assembly code
/ s. x. m9 x$ L3 E看完之後應該對CPU有初步的了解
9 ~- M `' B3 _4 |8 r' i
$ t: d; v' J6 G2. 接著把MMU的觀念加入閱讀+ [( \9 d( P& Z ?, y
MMU是個很重要的元件,理解之後對於深入系統操作有蠻大的幫助。
; O8 c; D% ]1 U$ x- A& q
/ U3 z F7 A" b; Q* u8 F3. 找一些device driver study,目的在於熟悉irq handler, DMA control等
% f. f( O L, [% m) R# X3 c3 s等技巧,有助於建立整個系統的感覺。9 B% Y) R( b W' W. A
8 k& I, w. a$ ]以上會了之後,混口飯應該不難。要變成超級工程師的話,就得
+ y1 M+ |6 u& r& Ja. 熟悉CPU進階功能 (通常是慢慢演進,port OS需要懂這部分)
8 {, k. L+ }) F3 c {0 Z: `b. 熟悉硬體介面和特性 (規畫系統非常需要具備,也可以因應不同架構修改自己的driver)
5 K4 L! m' }7 L, y# T: E2 C# H# ?5 d2 V+ h' \
因為CPU現在趨於複雜化,通常都帶有一些特殊功能,像是cache, write buffer的
$ R7 y9 D C: Q: G, F' O機制等等。而熟悉硬體介面和特性的好處是,有時候因為硬體平台整體規劃不良,存在
4 f& {9 X7 Z3 h+ G一些bottleneck,最常見就是某段memory bandwidth不夠,這些對device driver0 K% X% ~! Q8 ]; @( o
效能有很大的影響,如果只是單純懂寫driver的技巧,有時候雖然寫出很精簡的driver,
@: f8 F( D1 k' u" v$ Dperformance卻出不來,要適時地修改driver架構或使用其他讀寫方式才能讓系統表現更好。 |
評分
-
查看全部評分
|