2011年9月30日 星期五

tool的重要性

如果不懂shell script之類的工具,很多事會變得很耗時
例如,要跑四種configuration,外加10個trace,一共40種組合… 你只有四個core?
how to do it ?

有了script,你可以丟了就去睡,他會幫你一次丟四個上去,直到全部跑完
你只要三不五時去看一下機器有沒有當g,或爆炸之類的。

除此還有什麼"tool"?
shell command (sed, awk....)
regular expression
source insight
pietty

etc...

決對有價值!

eval

eval命令将会首先扫描命令行进行所有的替换

2011年9月29日 星期四

以下的技巧獻給像我一樣在windows平台下,鍾愛vim,同時又在Source Insight的朋友
不可否認,Source Insight看代碼時比較方便,而且它的代碼自動完成功能比vim+ctags+cscope好用的多,可是我認為寫代碼時,Source Insight的功能卻比不上vim。所以我經常需要在vim和Source Insight之間切換。可是為什麼不能把兩者結合起來用呢? 我的設定是:在Source Insight中按F12調用gvim,打開對應文件,跳轉到對應的行。 以下是實現步驟: 1.Source Insight中,Options->Custom Commands...->Add...,New Command name隨便寫,我的是"Edit with Vim" 2.Run中寫入: "C: \Program Files\Vim\vim63\gvim.exe" --remote-silent +%l %f 意思是在當前已經打開的gvim窗口裡面打開當前的文件,並且跳轉到指定行 %l為當前的行號,%f為文件名 ​​使用--remote-silent的作用是,如果已經打開了對應文件,就不會打開第二次,而是在已經打開的文件裡跳轉到對應行 3.還是同一個對話框裡面,選擇Keys->Assign New Key...->按F12,如果你已經將F12設置給其他命令,選擇其他的按鍵就行了 4.設置完畢
報怨就輸了   認真就輸了

要報怨就報怨自己不夠努力

要認真就認真在自己身上

用script "同時" 丟多個程式到多個core去run


> 實驗室有一台雙cpu雙核心電腦,我想要讓4個core同時工作。
> 如果寫script:
> 
> #!/bin/sh
> /ProgramA
> /ProgramB
> /ProgramC
> /ProgramD
> 
> 會變成A執行完才換B...,請問有方法利用shell script同時執行多個程式嗎?
> 還是有更好的方法。請教各位先進,謝謝大家。
> 

試試看:

#!/bin/sh
/ProgramA &
/ProgramB &
/ProgramC &
/ProgramD &
wait

起床氣  上班氣  上課氣  

好多可以氣的喔   哈  哈
SSD interleaving

分成
1. chip level  : 當chips有共用1 bus時。受限於bus bandwidth
2  bus level   : 當有多條bus時

2011年9月28日 星期三

int a();

a = 777

&a 也是 777 !!

2011年9月21日 星期三

HBO剛演完一部愛情片

2011年9月20日 星期二

壞心情的時候,我可以選擇不去學校,因為沒有老闆會扣我錢
但是上班的人卻無法和我一樣,他們必需強掩自己鬱悶
不僅僅是因為薪水問題,更因為和所謂的"同事"根本少有真情感的交流
我已慢慢走出天真的世界
就算我還不算正式蹋入,但我身旁早有很多"導師"不停的灌輸給我訊息

對冤獄的電影有感覺
無法想像如果也發生在自己身上
我可以撐多久?
我會不會自爆自棄?
20年…真的很長…  我目前30也才渡過一個20年…

在苦痛時,如果發現有人比你更苦痛,常常會覺得自己的還不算什麼

2011年8月4日 星期四

idea: content-aware buffer manager

以下稱  content LRU  為 CLRU,也就是  list 上只串著 FingerPrint (FP)  ,search 時只比對 content。和傳統的LRU比較(i.e., ALRU ,也就是 list 上只串著address和content,search 時只比對 address
有DEDUP功能的系統,buffer中會有   CLRU 和 ALRU

----------------------------
idea 1
    hot-content first LRU :
    rationale : CLRU中的某 content 很 hot ,那ALRU中可以不必放此content了,因為有高機會會被de  掉。

idea 2
    RAM放FP較好,還是放content較好?    → 分析這一刀該切在那
    maybe,也可以adaptive調整。

2011年7月31日 星期日

EXlru

http://home.ustc.edu.cn/~shil0704/conf/PDF_EMSOFT_11_1.pdf
motivation : lack of page-level access information in the block based WBC
----------------------
點出  以block-level為 LRU排序的單位 的壞處。

    (a) Slow retirement of large cold blocks
         只因少數page更新,而讓整個blk(連同cold pages)都搬到MRU去


    (b) Early eviction of small hot blocks
         ex. 假設 block A有31個pages ,每個page都只被update 1 次
                     block B有3  個pages ,每個page都被update 10 次 
               誰該留在buffer中久一點??   應該要是 B

-----------solution-----
add page-level access information (VPN, Data, Hit_count, Request_number)
  自己推出一套計算權重的方法來決定 eviction order            

2011年7月18日 星期一

temp

Understanding Performance Interference of I/O Workload  in Virtualized  Cloud Environments

Easy and Efficient Disk I/O Workload Characterization in VMware

http://blogs.oracle.com/henk/entry/swat_a_disk_and_tape   swat workload analyzer

Libtrace: A Trace Capture and Processing Library

2011年7月16日 星期六

指標...

1.  int *a[10]
2.  int (*a)[10]

自己理出的規則如下:  
array前面是array的名子

int *a[10] ,a是array的名子,然後這個array放的是 int *
int (*a)[10],(*a)是array的名子,然後array裡面放的是 int 



沒人看

也許這是一個沒人看的blog
也許這正合我意,我該不斷的學會alone
我不擅獨,所以我要練習。

2011年7月11日 星期一

disksim SSD容量 與 "Max Addressable LBA in SSD Trace File"

SSD容量的算法,如下:
---
Pages Per Block         = 64
Blocks Per Plane        = 2048
Planes Per Element      = 8
Page Size               = 8 sectors = 4 KB
----
Pages Per Single Element 
= 1 (Element) * 8 (planes) * 2048 (Blocks) *64 (Pages) = 1048576 Pages
那,trace裡面的 Block number 最大可以定址到多少?
先換算成sector(file system block)
1048576* 8 = 8388608
the MAX Addressable Sector = 0 .. 8388607 Sectors

disksim 中 "I/O trace time scale" 參數

disksim在parv檔提供這個參數,讓user可以調整trace的特徵(如 arrival time, request size, location etc.)
但是網友發現 在disksim source中根本就把 IO trace time scale寫死,程式碼如下:


在 disksim/src/disksim_iosim.c下:

void iosim_initialize_iosim_info ()
{
    disksim->iosim_info = DISKSIM_malloc (sizeof(iosim_info_t));
    bzero ((char *)disksim->iosim_info, sizeof(iosim_info_t));

    /* initializations that get remapped into iosim_info */
    ioscale = 1.0;    /**************LOOK HERE************/
    last_request_arrive = 0.0;
    constintarrtime = 0.0;
}
也就是說,想改變request的arrival time,只能在上面code中改。

原文:https://sos.ece.cmu.edu/pipermail/disksim-users/2007-August/000184.html

2011年7月7日 星期四

C語言 練習 bit 操作

/*C不像verilog可以對指定位元做操作,所以都用mask的方式
*/

#include<stdio.h>
#include <stdbool.h>
#define if_power_of_2(n) (n != 0 && ((n & (n -1)) == 0))

int main()
{
  int x,i;
  x=(7&6);      
 
  int bit=1;
  bit=bit<<7; //這樣才能從左印到右
  for(i=0;i<8;i++)
  {
   if((bit&x)==0) // 要刮號,因為 == priority 大於 &    
   {          
      printf("0");  
      bit=bit>>1;
   }
   else
      {printf("1");  
      bit=bit>>1;
      }
  }
  printf("\n");
  printf("if_power_of_2(7)=%d\n",if_power_of_2(7));
  printf("if_power_of_2(4)=%d\n",if_power_of_2(4));
 
  system("pause");

   return 0;

}

2011年6月20日 星期一

Linux Driver 思考 轉from http://dicky-chiang.blogspot.com/2011/03/linux-driver.html

Linux Driver 思考

剛突然找一篇很不錯的文章,雖然字數很少,但裡面的內容讓我有種被啟發的感覺...

====================

傳統意義上的Linux Driver僅僅是設備驅動,簡言之,和設備有關,如LCD,Camera等等。 但是, 筆者認為,Linux Driver的作用不僅僅侷限於此,從廣義上講, Linux Driver提供了一種User Space訪問 Kernel中特定Function的通用編程模型,即,平民(User Space中的Application, Process, Lib等)通向皇宮(Kernel)的大道。

如果一個模塊提供的Function必須運行於Kernel Space中(可能是設備相關的Function,從而需要訪問特權指令或者特權地址空間; 抑或者Function本身是設備無關的,但是訪問到了其他的一些運行於Kernel的Function; 甚至於吃飽了沒事幹,就喜歡把原本可以在User Space中運行的API實現在Kernel中,就是喜歡,你管的著嗎?!)。 同時,又希望User Space中的Client能訪問使用這些Function, 那麼, 將其Adapt成Driver是再合理不過的解決方案了。 這是為什麼那??

因為,從理論上來說,Kernel中的API,User Space中的Client是無法直接訪問的,只能利用系統調用陷入到內核態後調用。 Linux的系統調用非常多,均已經固定, 如何支持新的Kernel Function的調用那? 有兩種方式:

1。 在Kernel中實現一個新的系統調用(添加新的系統調用號),用來支持你實現的新功能。 這真是殺雞用牛刀的幹活,吃力不討好。 你需要全全負責User Space到Kernel Space的切換,系統調用號的傳遞,系統調用上下文的保存, 調用後的系統上下文的恢復,Kernel Space向User Space的切換。

2。 復用一個現有的系統函數/調用,來支持你的新功能。 具有抽象意義的系統調用莫過於read,write,open這些為Driver定製的API了。 所以,我們可以簡單的將我們的Function Wrapper成Driver需要的open,read,write等,然後,再按照Driver的要求,將我們的Module Wrapper成一個Driver的設備文件並註冊到系統中。 這樣,User Space中的Client,可以採用傳統的Driver的模式來間接訪問到我們新加的這些Function,並且,可能這些Function根本和實際的設備沒有任何聯繫。

所以,我們不應該把Linux的Driver狹義的理解為設備驅動, 其實,它是一種通用的User Space訪問Kernel Space Function的編程模式。 只要你有這種需求,你就可以實現為Driver,而不需要關心和實現複雜的系統調用過程。 比如Android中的Binder Driver, 根本不是真正的和物理設備打交道, 而僅僅是一個運行於Kernel的Binder Function,但是適配成了Driver,方便User Space中的Client調用。

2011年6月6日 星期一

*p++ ++*p (*p)++

*p++ 會對p加1. 因為unary operators相同優先權的運算子結合性由右至左。
如果要對p所指的內容加1, 請用++*p, 或 (*p)++ 。

2011年5月19日 星期四

embedded linux pirmer 2nd edition 研讀 chapter 10.1 MTD

10.1 MTD overview
1.MTD不是一個blk device
2.blk device有 read/write, 而MTD有read/write/erase
3.CF card, SD card, USB flash 都不是MTD device,它們都有FTL(它們看起來就像是blk device)
4.Translation mechanisms can make MTD look like a character or block device

2011年5月2日 星期一

MTD , flash , 觀念修正

1.所謂的 nand flash controller ...裡面好像沒有 micro-processor ?

2.what is the relation between  NFC, MTD ?

3.----轉---
假設你有flash(在embedded system幾乎都有)首先, 先K一下flash的spec. 看看read/write/erase的command sequence(每一家的flash都不一樣). 再來看看你的flash是要用8-bit or 16-bit的bus-width, 其command sequence也不一樣. 接下來, 看看linux的MTD chip driver有沒有支援, 若有支援確無法work, 八成是bus-width的設定問題. 另外也要看看你的flash是support CFI or JEDEC or non-CFI interface. 不同的類型也使用不同的chip driver. 
最後, 規劃自己的mapping driver(也就是flash上的partition table, 因為flash不像硬碟會存partition table) 這要自己來, 否則linux怎麼知道你要如何規劃flash? linux是依賴註冊mapping driver來得知partition table information的. 

大約就是如此, 前陣子改了AMD的flash chip driver來支援. 所以才有一點小小的心得. 跟大家分享

-------------


4.http://translate.google.com.tw/translate?hl=zh-TW&sl=zh-CN&u=http://www.cnblogs.com/jinmu190/&ei=uDC_TePMGIW8vgOEg-y6BQ&sa=X&oi=translate&ct=result&resnum=4&ved=0CDwQ7gEwAw&prev=/search%3Fq%3Dftl%2Bblock%2Bdevice%26hl%3Dzh-TW%26rlz%3D1C1CHNY_zh-TWTW376TW376%26prmd%3Divns
必看網址


5, MTD 裡面有 simple FTL (mdtblock),應該是block mapped的FTL。

6. CF card , SD card , USB flash這些東西…雖然也常被叫作 "flash" ,但它們不是 MTD,因為他們有FTL,可直接視作block device,才不會和MTD搞混

2011年4月25日 星期一

SSDAlloc: Hybrid RAM/SSD Memory Allocation Made EasyTC present

motivation :
                         ram不夠大,又貴

soluation   :     add SSD to main memory


1.原本管理memory是用page(未滿1k也會給一個 4k page),太浪費空了 → 改成用object (例:1k object ,目的是省空間)

2.memory中分成兩區 (1) buffer page區 ,這跟原本的設計一樣,(2) ram object cache區,例:將4個object給compact起來成一個page(so need extra mapping table)


3.buffer page中找不到→ 找ram object cache ,if 還是找不到→ 就去SSD中找~

-----

後記:  很像 tri-fs   

2011年4月21日 星期四

performance isolation , SSD

3個vm : A  B  C

依據付費來決定使用io的priority,假設是    5:3:2

假設B用完credit ,那麼…手上還有credit的人都可以preempt B的 io request

----------
note 1. 越會影嚮整個系統或別人的io reqest ,就要付出越多的credit
             例如:   erase > write > read
                         讀五個page > 讀4個page
                         讓3個channel busy > 讓2個channel busy
                         etc...

2011年4月18日 星期一

轉文_ 心靈與程式碼的協奏曲

原文來自 http://www.codemud.net/~thinker/GinGin_CGI.py/show_id_doc/445

功力很弱的我,認為這篇對我有幫助,請作者見諒

----------------------------------------------------------------------------
你是怎麼寫程式的? 特別是,你怎麼寫一個 function? 我相信大部分人和我過去一樣,從 function 的第一行,一直寫到最後一行 return。 在寫 function 的第一步時,或許你會先想一下 function 要 return 什麼樣的值, 接著開始在腦海裡規劃該怎麼進行,以達到要求的功能。 待規劃到一個程度之後,你會開始寫第一行程式,然後慢慢的寫到最後一行 return。 或許你也注意到了,雖然大體上是從第一行寫到最後一行,但過程中你是修修改改, 不斷的回頭去修改之前寫下的程式碼,來來去去的。 為何無法很順暢的一路寫到尾? 或許你可能搞錯寫程式的方法。
我們先將問題限制在一個會 return 資料 function 類別上。 回想一下,當你在規劃一個 function 時,你一定先想到 function 的輸出應該 是什麼。 接著你會開始想,要做什麼事才能合成該輸出? 於是你規劃出,要做 A 、 B 、 C 三個動作,才能合成正確的輸出。 而 A 、 B 、 C 又有一些細節,你繼規劃這些細節,直到一定的程度。 接下來開始從頭到尾,一行接著一行寫下來。 但大腦通常沒那麼厲害,寫的過程會發覺一些細節沒考慮清楚,或者不正確。 於是寫到一半又要回頭在前面補齊或修改所需的資料。 個過程是不順利的,因為大腦運作的方向是和程式的順序相反的。 何以見得?
如前面所說的,你是先想到 function 的結果,接著想該完成的步驟,然後再細節。 而程式碼的排列的方式,卻是先寫下細節,由細接組成主要步驟的輸出, 最後再由主要步驟的輸出組合成最後的結果,然後 return 結果。 於是,和大腦思考的方向剛相反。 這可能是造成如此混亂的原因。 你必需先憑空的從結果一直規劃到細節,然後再從細節寫回到結果,這對大腦是一大考 驗,除非你有超強的記憶力。 我沒有。
何不試試從最後一行回頭寫到第一行,完全反過來? 按照前面所說的,這樣應該和大腦運作的順序一致。 如果我們真的這樣作,情況又會如何? 會比較順利嗎? 不如寫個程式來試試。
假設問題是, function 接受一字串,裡面的每一行有兩個欄位,皆是整數。 欄位以一個空白相隔。 function 必把每一行的兩個欄位的數字相乘,然後再將每一行的結果加總。 反方向的方法寫大概會是如此。第一步,先定義 function 的 prototype。
001 def mul_n_sum(data):
002     return result
我們先不管 result 怎麼達成,總之我們必需想辨法產生 result。 接下來, result 應該是每一個相乘的結果的加總。
001 def mul_n_sum(data):
002     result = sum(value_of_lines)
003     return result
一樣,我先不管 value_of_lines 是怎麼來的,總之我們會想出辨法算出每一行的值。 接著,我們每一行值應該是由每一行的兩個欄位相乘的結果。
001 def mul_n_sum(data):
002     value_of_lines = [filed1 * field2
003                       for field1, field2 in field_lines]
004     result = sum(value_of_lines)
005     return result
一樣的,我們先不管 field_liens 是怎麼來的,總之我們會想出辨法。 field_lines 是每一行的兩個欄位,因此我們必需從每一行的兩個文字欄文,轉成整數。
001 def mul_n_sum(data):
002     field_lines = [int(txt_field1), int(txt_field2)
003                    for txt_field1, txt_field2 in txt_field_lines]
004     value_of_lines = [filed1 * field2
005                       for field1, field2 in field_lines]
006     result = sum(value_of_lines)
007     return result
同樣的,txt_field_lines 是每一行的兩個文字欄位,因此我們必需從每一行, 把兩個文字欄位個別分開、最出。
001 def mul_n_sum(data):
002     txt_field_lines = [line.split() for line in lines]
003     field_lines = [int(txt_field1), int(txt_field2)
004                    for txt_field1, txt_field2 in txt_field_lines]
005     value_of_lines = [filed1 * field2
006                       for field1, field2 in field_lines]
007     result = sum(value_of_lines)
008     return result
最後,我們再定義 lines,從輸入的 data 分割成每一行文字。
001 def mul_n_sum(data):
002     lines = data.strip().split('\n')
003     txt_field_lines = [line.split() for line in lines]
004     field_lines = [int(txt_field1), int(txt_field2)
005                    for txt_field1, txt_field2 in txt_field_lines]
006     value_of_lines = [filed1 * field2
007                       for field1, field2 in field_lines]
008     result = sum(value_of_lines)
009     return result
完成了。 反方向寫似乎是比較順利。 或許你會質疑,這只是個簡單的例子,複雜的 function 呢? 根據我的實驗,似乎同樣適用。
雖然這樣的寫法比較符合大腦的運作方式,但還是需要一些練習才能習慣。 不過,練習的時間不需很長,很快就能適應這種新的寫法。 這種寫法,讓大腦規劃的過程,按照思考的順序,一步一步寫下來。 因此不需把所有的東西都塞在腦子裡,把空間騰出來,用於思考。 因此思考能更順暢。
練習時要特別注意! 我發覺剛開始試用這種方法的人,可能習慣性進行跳躍式的思考。 例如,一想到 result 是每一行的兩個欄位的相乘結果的加總, 就想在下一步,直接把欄位 parse 和加總的動作都一次完成。 於是就回到原本從頭寫到尾的老方法。 這要特別注意。
另外,用這個寫法有一個特色。 loop 的使用減少了,幾乎都是 list comprehension。 你可能認為,這個例子是特例。 但實驗的結果,發覺這是常態。 以這個例子,如果以傳統的寫法可能會變成
001 def mul_n_sum(data):
002     result = 0
003     for line in data.strip().split('\n'):
004         field1, field2 = line.split()
005         v1 = int(field1)
006         v2 = int(field2)
007         result = result + v1 * v2
008     return result
你會發覺 loop 跑出來了。 而且 "result = 0" 這一行,可能是寫到 "result = result + v1 * v2" 這一行時, 才回頭補寫的。
這是我最近自我觀察時,所發現的一個方法。 我不知是否有其它人提出相同的作法,但我覺的還蠻不錯的。 或許你會質疑,用那麼多 list comprehension 會降低效率。 但,大部分時侯,效能可能不是這麼重要。 另一方面,或許未來會有一個程式語言,或是 compiler 特別支援這樣的寫法, 自動展開這些 list comprehension。 屆時,這些效能問題也就解決了。

2011年4月17日 星期日

續上篇 How Storage I/O Control Works

1.VMware的 sioc 是如格偵測 IO congestion ?
→ latency 超過threshold 時 (default : 30ms)


2. 『This is to ensure that low-priority workloads do not monopolize
or reduce I/O bandwidth for high-priority workloads』中的high low priority怎分???


3.soic怎麼應對low-priotiry workloads ?
減少 他的 io queue slot 

續上篇_ The Challenge of Shared Resources

Controlling the dynamic allocation of resources in distributed systems has been a long-standing challenge. Virtualized environments introduce further challenges because of the inherent sharing of physical resources by many virtual machines.
『動態resource分配』在分散式系統中原本就是個挑戰,然而,此挑戰在VM的環境更明顯(天生需要共用physical resource)
VMware has provided ways to manage shared physical resources, such as CPU and memory, and to prioritize their use among all the virtual machines in the environment. CPU and memory controls have worked well since memory and CPU resources are shared only at a local-host level, for virtual machines residing within a single ESX® server.
The task of regulating shared resources that span multiple ESX hosts, such as shared datastores, presents new challenges, because
these resources are accessed in a distributed manner by multiple ESX hosts. Previous disk shares did not address this challenge, as the shares and limits were enforced only at a single ESX host level, and were only enforced in response to host-side HBA bottlenecks,
which occur rarely. This approach had the problem of potentially allowing lower-priority virtual machines greater access to storage resources based on their placement across different ESX hosts, as well as neglecting to provide benefits in the case that the datastore
is congested but the host-side queue is not. An ideal I/O resource-management solution should provide the allocation of I/O resources independent of the placement of virtual machines and with consideration of the priorities of all virtual machines accessing the shared datastore. It should also be able to detect and control all instances of congestion happening at the shared resource

應該考慮到VMs的"priority" 來決定IO resource 的分配。

2011年4月16日 星期六

翻譯 『Storage I/O Control Technical Overview and Considerations for Deployment』 第一段

Storage I/O Control (SIOC) 讓VM可以達到performance isolation,它讓VM中著名的noisy neighbor的問題大大降低。更棒的是…他可以暫時提高"critical"的VM的IO resource allocation。



SIOC improves upon the previous host-level I/O scheduler by detecting and responding to congestion occurring at the array
經過host-level IO scheduler的最佳化後,SIOC緊接著派上用場(它會偵測並回應storage的congestion的情形)



With SIOC, vSphere administrators can mitigate the performance loss of critical workloads due to high congestion and storage latency during peak load periods





Benefits of leveraging SIOC:
• Provides performance protection by enforcing proportional fairness of access to shared storage
• Detects and manages bottlenecks at the array 
• Maximizes your storage investments by enabling higher levels of virtual-machine consolidation across your shared datastores
The purpose of this paper is to explain the basic mechanics of how SIOC, a new feature in vSphere 4.1, works and to discuss 
considerations for deploying it in your VMware virtualized environments

SIOC的好處:
1.達成"比例上的公平"→ 越多io的VM給越多io resource (?)
2.偵測,管理 array上的bottlenecks
3.善用virtual storage 





2011年3月24日 星期四

porting OS 之前要知道…

※ 引述《green0924 (hmm...)》之銘言:
:  不好意思,因為在別的板問不到,所以轉貼在這裡,要是有違板規
: 的話,小的會自d,感謝~:)
: 請問..
: 1. OS Porting 的工作內容是做些什麼?(Linux)
a. 取得cpu 廠商的sample code來更改
b. 針對自家SOC所擁有的特性抽離出 方便IC改朝換代後更改
c. 自家IC的kernel mode driver是否也要抽離出

d. 瞭解整個開機的過程
e. 瞭解linux scheduler <純嘴砲 當年我也沒去看>
f. 記憶體使用規劃檔案 避免重新build kernel
h. driver model, library 的使用
:  2. 須要事先學習的東西又有哪些?
cpu spec
soc datasheet
周邊相關的事物
scope, LA, PC tool's waveform analysis..
make file 修改, link scripts 與開機的sections, scripts的修改
performance tuning...
: 3. 使用的程式語言又是..?
一般是C, 但出問題時會用到 asm, 而且asm 與CPU架構有關
最好瞭解 方便知道怎麼操控以及瞭解CPU的狀態
:  4. 軟體出身的去做會很辛苦嗎?還是說硬體出身的來做好些?
這本來就是軟體的工作
: 5. 這工作以後的發展..?
其實都可以 既然懂了OS運作原理
那要懂ap frameworks 或者一些standards 並非太難的

:  小的之前做的是 driver porting 的工作,最近收到這樣的職
: 缺信件,感覺比寫 driver 又再更深入了..不知道會不會差很
: 大?

為什麼embedded system中的uboot比 pc上的bootloader(grub or lilo) 還要複雜

所謂的Boot Loader,也有人稱之為Boot Code或Boot Monitor,即是在系統電源打開後最早執行的一小段程式。以執行Linux系統的PC為例,存在於硬碟MBR (Master Boot Record)中的Lilo或Grub程式,就是一種常見的Boot Loader。在PC中,當BIOS做完系統各種初始化後,便會執行MBR中的Boot Loader,接著Boot Loader提供必要的系統資訊給作業系統核心並啟動作業系統。

然而,在嵌入式系統中的Boot Loader則較為複雜,因為大部分的平台中並沒有BIOS來處理系統初始化的動作,且微處理器、記憶體控制器與其它的特定的硬體,其初始化的方式亦隨著CPU或平台的不同而不同,因此我們並不希望將初始化的動作交付給作業系統,而是由Boot Loader來執行。

靠 這十本都看完,才有辦法下command...

http://people.debian.org.tw/~chihchun/2011/03/17/10-linux-kernel-books/

用usb上傳到nand flash上後,更新檔案無反應


各位前輩好!
: 小弟我昨天將NAND Flash割了一個Potition 給模擬U盤使用.
: 格式為FAT32.
: 上傳下載檔案皆正常運作. 但發現到一個問題!
: 從外部傳送一個檔案到NAND Flash時,假如裡面以經有相同檔名的檔案.
: 執行時發現檔案並沒有被覆蓋更改. 裡面的依然是舊的檔案
: 請問這是啥麼問題呢?
: platform - S3C2440
: Kernel - 2.6.32.2
: rootfs - busybox 1.8
你是用 usb 傳檔上來後,直接在 box 上看嗎 ?

如果是這樣的話,請重新 remount 那個 partition 就可以了

因為你用 usb 傳上來並不會去通知 kernel 去重新 sync fat table 資料

所以你在 box 上看到的東西會是舊的,甚至是錯誤的

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.36.220.106
[1;37m推 [33mDennisT [m [33m:謝謝! 收到了~
重新mount之後得到的就OK了.:) [m 03/22 22:36

2011年3月19日 星期六

天真

無邪

肥手 啊啊 我死定了…小孩肥肥好可愛喔^^


我不是色情狂喔,這是意外

媽媽家教嚴…不管幾歲,犯錯就是伏地挺身


嘿嘿

小小一隻 

擺的pose都不錯

比yeah已經不流行了

cc 她主動給我抱喔 cc 第一次有女生主動要給我抱 。 哈 哈我滿足
Posted by Picasa

喬喬試裝

靈靈在後面真的變靈靈的感覺… 。
妹妹試裝的很開心耶
Posted by Picasa
可愛 可愛…小孩真是隨便穿都可愛…
這是小孩的優勢…,要是大人穿著與自己個性不搭的衣服,人家一定覺得很怪
但是如果是小孩,人家只會覺得他的爸媽很怪… 哈 哈
Posted by Picasa