|
貼文很久了
2 |& l3 |. Y& I0 i. w: Q$ i現在回不知道回了作者看不看得到
: } D% ^% r; R- a# d
0 {& I& d* ^9 \; g; m假如想走底層一點的工作( f8 @- T/ _! l6 z5 _
對於計算機架構可能要深入了解
: D; G( K7 Y* K0 d' M7 T- c建議先對某個特定平台熟悉 例如ARM+Linux or ARM+WinCE
! [1 m2 u, c5 g8 w3 Ex86也可,不過x86指令和暫存器比較多
' j9 h5 `) D4 r要多花一些時間閱讀
`0 }! U( y w. `
. A3 N/ _6 q$ q/ t! L1. 從instruction set開始研讀- [& b8 }4 M* m
然後試著找一些assembly code trace看看
% b4 x% h8 H- j; w7 H; Z2 Q \現在有蠻多書對於控制ARM的各種模式都有程式碼可以參考
# C6 O/ x% S w0 v$ k像是interrupt處理 context switch等等都有assembly code
2 s2 N2 K) a/ [8 a( S: C+ |看完之後應該對CPU有初步的了解+ T3 X7 |' a: r# Y+ L+ E g Z
& Y0 I5 k4 z: Z' [& b' D2. 接著把MMU的觀念加入閱讀$ g- h: N( l4 d% S$ n
MMU是個很重要的元件,理解之後對於深入系統操作有蠻大的幫助。) E0 ?+ \4 h4 b. j" S+ D7 v" J# P
7 {( `" b1 D) ?% {# i
3. 找一些device driver study,目的在於熟悉irq handler, DMA control等
3 h+ y2 @& {+ M/ l2 k( _等技巧,有助於建立整個系統的感覺。
7 |( j! `, X8 t' ~/ c9 k& G5 B" ]( ~% j, o$ `: H; p4 E
以上會了之後,混口飯應該不難。要變成超級工程師的話,就得
' {5 s/ ^( f- D+ e4 @& a; p3 Ba. 熟悉CPU進階功能 (通常是慢慢演進,port OS需要懂這部分)
$ n8 D/ k* O. |. u2 |b. 熟悉硬體介面和特性 (規畫系統非常需要具備,也可以因應不同架構修改自己的driver)7 R3 Y& K) S; X% N
5 d# a0 C. U, K因為CPU現在趨於複雜化,通常都帶有一些特殊功能,像是cache, write buffer的1 ~' p6 O9 q( G/ R& C% J
機制等等。而熟悉硬體介面和特性的好處是,有時候因為硬體平台整體規劃不良,存在( {" Q$ \+ s1 z: F3 g
一些bottleneck,最常見就是某段memory bandwidth不夠,這些對device driver2 Z2 J4 @; q! J
效能有很大的影響,如果只是單純懂寫driver的技巧,有時候雖然寫出很精簡的driver,' t0 k# P5 E* y i+ K
performance卻出不來,要適時地修改driver架構或使用其他讀寫方式才能讓系統表現更好。 |
評分
-
查看全部評分
|