|
貼文很久了
. G6 C$ [, C, ~3 U! `3 O6 J. J現在回不知道回了作者看不看得到 ![](static/image/smiley/default/smile.gif)
- m% G- u; v( S* X( J: D6 e3 i0 {
5 }3 D; \- x. m; R" R+ e假如想走底層一點的工作2 X( U# k' z, G5 {' u5 U: H d3 p
對於計算機架構可能要深入了解
0 R1 M, n. d# c! e; K# L, J! l2 z建議先對某個特定平台熟悉 例如ARM+Linux or ARM+WinCE
- Z8 @; `) v6 Y) Ax86也可,不過x86指令和暫存器比較多( o/ W4 J1 ^) |6 V3 e' `
要多花一些時間閱讀* b, R# R$ f% h; L! ~6 j; `8 \0 j1 @
6 F" f: c( y5 O$ K1. 從instruction set開始研讀( n9 z6 K* C( M) Y& V8 h# t
然後試著找一些assembly code trace看看
, a+ y) m1 X. L現在有蠻多書對於控制ARM的各種模式都有程式碼可以參考
2 X' A3 F* P. f像是interrupt處理 context switch等等都有assembly code
1 V0 S1 p; i( y+ O看完之後應該對CPU有初步的了解' o. p t( h# I2 u& ]
, D, a: q9 ^4 J2 ]6 \9 Q2. 接著把MMU的觀念加入閱讀: I4 Z/ U+ M& @. V" w( Z
MMU是個很重要的元件,理解之後對於深入系統操作有蠻大的幫助。& F# w3 f- n7 Z* S5 ?9 O. k
2 g% V H1 D5 u' T
3. 找一些device driver study,目的在於熟悉irq handler, DMA control等( }$ }; i% u; a9 P$ R) \
等技巧,有助於建立整個系統的感覺。
& O: l& J( M# J% [
2 b* P4 n' u8 Z. D: w4 S以上會了之後,混口飯應該不難。要變成超級工程師的話,就得/ q% q. H( P( S9 C9 g2 y! P0 m& E
a. 熟悉CPU進階功能 (通常是慢慢演進,port OS需要懂這部分)0 K$ V8 D7 A( l* W9 y4 B' [
b. 熟悉硬體介面和特性 (規畫系統非常需要具備,也可以因應不同架構修改自己的driver); P0 c' }4 e/ x$ m9 g. l/ j8 j
% J6 R7 N) P9 m. t4 n. m
因為CPU現在趨於複雜化,通常都帶有一些特殊功能,像是cache, write buffer的
% ?4 c& T! a& i0 ~: ?1 L機制等等。而熟悉硬體介面和特性的好處是,有時候因為硬體平台整體規劃不良,存在
" ]) y& e( L! n5 W, m t& A2 G一些bottleneck,最常見就是某段memory bandwidth不夠,這些對device driver' b K$ a0 j+ Q. J# E' g* u6 r; b! F
效能有很大的影響,如果只是單純懂寫driver的技巧,有時候雖然寫出很精簡的driver,
. ?0 T& B" ]+ r+ o1 A/ c, q# G$ f6 wperformance卻出不來,要適時地修改driver架構或使用其他讀寫方式才能讓系統表現更好。 |
評分
-
查看全部評分
|