2012-05-17 200 views
2

我正在開發一個在Linux上運行的嵌入式系統。爲了減少產品的啓動時間(這是一款IP網絡攝像機)我想減小根文件系統的大小。我已經有了一個功能性的根文件系統,目前我正在手動刪除部分文件並查看是否安裝了根文件系統。是否有更合理的方法來減少文件系統大小,而不是使用當前的反覆試驗方法更新了其他詳細信息:目標上使用的原始文件系統是跨組織中多個嵌入式產品使用的通用文件系統。我想剝離文件系統到運行我的特定產品所需的最低限度.i.e IPNetCam。我想知道是否有任何分析方法可以確定啓動和運行特定應用程序所需的確切文件集。優化嵌入式linux系統的根文件系統大小

+2

文件系統大小可能不是啓動時間的主要貢獻者。另外,檢查安裝文件系統的能力幾乎不涉及是否有組件運行系統需要的任何程序。主要的事情是,如果你的發行版包裝了你不需要的重型庫,各種額外的守護進程(你可能有一個你不知道的ssh或web服務器),甚至更糟的是測試/演示程序。像busybox這樣的東西通常具有可以包含/刪除各種功能的配置。 –

+0

@ChrisStratton嵌入式系統是固定的功能(IP網絡攝像頭),所以如果我能夠安裝rfs並運行設備,它應該沒問題。最終用戶在部署後不會修改它。我正在尋找要刪除的東西,就像你提到的那樣。我想知道是否有一種結構化的方式可以選擇根文件系統的最低需求 – Badri

+0

@ChrisStratton文件系統將在NAND中閃存,複製到RAM並安裝到設備中。因此,通過減少總根文件系統的大小,我們可以縮短設備啓動所需的時間(開機時我的意思是內核啓動,應用程序開始運行,IPNetcam已準備好使用) – Badri

回答

1

一種方法是:

  • 打開你的文件系統上的atime標誌(如果尚未設置)
  • 重啓
  • 後你的應用程序已經運行足夠長的時間,使用的atime找出哪些文件已經被上一次的開機後訪問:

# last reboot | head -1 
reboot system boot 2.6.35-30-generi Sun May 20 10:08 - 10:48 (00:40) 
# touch -d "2012-05-20 10:07" /tmp/ref 
# find/-xdev -anewer /tmp/ref > /tmp/usedFiles 

當然,這種方法忽略了在您的樣本運行中未訪問的文件,但在偶發或特殊情況下仍然是必需的。當以只讀模式訪問文件系統時,您還需要在早期階段添加由引導加載程序或操作系統直接讀取的文件。

+0

執行此操作。此外,不需要生成輔助進程(本例中爲'head')。你可以簡單地運行: 'last reboot -1' – teotwaki

+0

'last -1 reboot'仍然會輸出兩條額外的行,所以我更願意保留唯一一個我對'head -1'感興趣的行。 – jlliagre

+0

@JoshSanford感謝您的編輯! – jlliagre

3

如果你還沒有這樣做,你應該使用壓縮文件系統,如SquashFS。這將大大減少啓動映像的佔用空間。列出你的操作系統和應用程序所使用的文件