|
貼文很久了
$ A, Q4 |& a& n& f現在回不知道回了作者看不看得到
! ^; d. z8 f* k: J9 e# P+ ~8 P) M* p4 T9 ~4 y& v- a7 A3 V8 s
假如想走底層一點的工作
* @9 i- ]3 ?# c* X對於計算機架構可能要深入了解, w; p( H) u. ]6 S/ S4 ]
建議先對某個特定平台熟悉 例如ARM+Linux or ARM+WinCE
; w, B# Y6 n: t1 I# U8 F9 Tx86也可,不過x86指令和暫存器比較多. v! G* B: [4 S+ J, ?
要多花一些時間閱讀* D, F0 s9 T- ? G$ q% R; ]
/ ?6 @, @3 s9 @2 c& X: K) R
1. 從instruction set開始研讀* i3 ^! B7 H, Q1 |8 j2 N
然後試著找一些assembly code trace看看
( F% F( d) w4 m7 L# v2 }現在有蠻多書對於控制ARM的各種模式都有程式碼可以參考
; q6 ~4 @ Y* |$ }0 l1 J像是interrupt處理 context switch等等都有assembly code v/ E6 v- J; j: S& T' `& u3 S l
看完之後應該對CPU有初步的了解1 t- T, F$ |3 ^5 S Q3 v1 C
. l" g* B$ b8 k) U6 h, Z
2. 接著把MMU的觀念加入閱讀
6 ?, {7 k& R9 y, fMMU是個很重要的元件,理解之後對於深入系統操作有蠻大的幫助。
6 r1 T8 E# F, o2 J1 c# N l2 a5 P% J B5 x5 V& [2 Y3 y3 S
3. 找一些device driver study,目的在於熟悉irq handler, DMA control等
# M" v u" o* A9 i8 }等技巧,有助於建立整個系統的感覺。' w: a" ?" }8 U: n) A
( h+ ^2 }1 G6 T/ U8 O
以上會了之後,混口飯應該不難。要變成超級工程師的話,就得; f* F L4 Q- A) s6 P# L* c1 M
a. 熟悉CPU進階功能 (通常是慢慢演進,port OS需要懂這部分)
/ \4 _) z2 A1 Z2 |: Gb. 熟悉硬體介面和特性 (規畫系統非常需要具備,也可以因應不同架構修改自己的driver)
8 B( r. D6 K8 O$ D
4 i. M) c) {/ C, c7 W因為CPU現在趨於複雜化,通常都帶有一些特殊功能,像是cache, write buffer的% S. B' |1 F9 M {0 X5 K
機制等等。而熟悉硬體介面和特性的好處是,有時候因為硬體平台整體規劃不良,存在
% Y- Q! h2 L( b% p& ]% V3 g一些bottleneck,最常見就是某段memory bandwidth不夠,這些對device driver) W1 l. d* h" P, Q+ e0 O
效能有很大的影響,如果只是單純懂寫driver的技巧,有時候雖然寫出很精簡的driver,
7 x8 b1 `$ g) t+ d; A$ gperformance卻出不來,要適時地修改driver架構或使用其他讀寫方式才能讓系統表現更好。 |
評分
-
查看全部評分
|