看板 LinuxDev 關於我們 聯絡資訊
Flash 問題 想請問關於 embedded 的 flash 部分,第一次接觸有很多不熟悉 1. 不知道各位關於嵌入式系統上的 flash 都會怎麼去做切割? 目前我考慮的方式是切成 boot/kernel/foot file system/設定檔 2. 對於一個系統如果是需要去升級裡面的應用程式的 會怎麼去切割或者是更新比較好呢? 原本想說把設定檔的部分不要update, 而整個rootfs重新update,因此才會把設定檔另外切一塊出來 3. 版號機制 我看很多都會去防止使用者去更新成以前的版本 不知道說這個要怎麼做到呢? 就是在更新rootfs之前就要去判斷版號了 然後又不被一般使用者容易竄改那個機制的版號 4. rootfs 是不是也應該要開機的時候複製到ram呢? 因為看板子預設的kernel是有做這樣的動作 5. 多出來的 flash 空間可以做什麼應用或是改善系統效能嗎? 請多多給意見供學習,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 223.139.96.183
heoris:請用MTD 04/20 17:31
askacis:一般來說roofs不會複製到Ram上,但kernel有開initramfs的話 04/21 21:14
askacis:則rootfs會被壓縮然後包進去zImage裡,所以自然kernel自解 04/21 21:15
askacis:壓縮的時候也會把rootfs解到Ram上,一般都是你的rootfs很小 04/21 21:16
askacis:的時候比較有用,不然很大的rootfs不僅解壓縮慢,你的RAM搞 04/21 21:16
askacis:不好也沒有多空間可以擺~~ 04/21 21:17
askacis:至於FW版號的問題那是大哉問,大家的作法都不同,原po可以試 04/21 21:18
askacis:試在你的FW前面再帶一個結構來描述,結構裡面可以放版號, 04/21 21:19
askacis:供認證的簽名,是否允強迫update之類的種種資訊... 04/21 21:20
paulyanzi:kernel是不是一定要解到ram呢 04/22 00:32
paulyanzi:如果把rootfs只解到nand flash不知道flash會不會很容掛? 04/22 00:33
paulyanzi:印象中flash不是讀寫次數是有壽命的... 04/22 00:33
askacis:所以會有特定的file system 諸如yaffs2,jffs2出現,他們 04/22 00:46
askacis:做wear leveling,來延長使用壽命;我建議原PO參考相關書籍 04/22 00:47
askacis:個人推薦這本 http://0rz.tw/pXmus 04/22 00:49
askacis:kernel可以直接跑在nor flash上,可以google XIP相關資料 04/22 01:02
askacis:在linux base的平台上沒用過XD,因為ram都還蠻大的;到是一 04/22 01:03
askacis:些ram只有4K,8K的arm7 MCU,code不跑在flash上是不行的... 04/22 01:04
askacis:其原理也很簡單,就是利用linking script把RO擺在flash, 04/22 01:08
askacis:RW,zi等不同的段放在ram上就可以了... 04/22 01:09
yuskeb:之前有遇到app crash的bugs會導致系統重開機 04/24 00:42
yuskeb:多出來的flash我就拿來擺app的coredump files 04/24 00:43
yuskeb:再抓回來餵給GDB來除錯 多的flash用來蒐集log等資訊來debug 04/24 00:45
paulyanzi:是把多的flash多切一個掛載點? 04/26 01:28
paulyanzi:要怎麼讓會出錯的app產生coredump files呢 04/26 01:28
paulyanzi:板子上好像沒有GDB可以用 04/26 01:29
paulyanzi:看起來使用jffs2撐個三年應該沒問題吧 04/26 01:30
yuskeb:1.嗯嗯 假設flash切成 u-boot/kernel/rootfs/config/extra 04/27 01:48
yuskeb:用"cat /proc/mtd"察看假設extra(多的flash名字)對應到mtd4 04/27 01:55
yuskeb:如果我想把在掛載在/mnt/extra (先"mkdir -p /mnt/extra) 04/27 01:56
yuskeb:用"mount -tjffs2 mtd4 /mnt/extra" 就掛起來囉 掛成jffs2 04/27 01:59
yuskeb:或"mount -tjffs2 mtd:extra /mnt/extra" 用名字的方式 04/27 02:03
yuskeb:或"mount -tjffs2 /dev/mtdblock4 /mnt/extra" 可能得mknod 04/27 02:04
yuskeb:我也推薦ask兄說的那本書 對1F說的的MTD用了一整個章節介紹 04/27 02:09
yuskeb:原文書出到第二版 原文書作者的寫作技巧很好很容易閱讀 04/27 02:11
yuskeb:不會特意使用艱澀困難的字彙 對理解flash、MTD很有幫住 04/27 02:13
yuskeb:http://ppt.cc/nGyq 推薦這部落客的文章 04/27 02:22
yuskeb:2. http://linux.die.net/man/5/core 如何產生core file 04/27 02:27
yuskeb:http://linux.die.net/man/7/signal 哪些signal會dump core 04/27 02:28
yuskeb:最陽春的方式是在app裡面呼叫abort()就會產生core file囉 04/27 02:29
yuskeb:若不會產生 用"ulimit -a"(bash)檢查stack size是否被限制 04/27 02:32
yuskeb:用"ulimit -c 5566"或"ulimit -c unlimited"給予stack size 04/27 02:35
yuskeb:stack size可能要取決於版子上有多少資源可供揮霍囉 04/27 02:36
yuskeb:再來決定一下core file產生的位置 要集中擺在哪一個目錄下 04/27 02:40
yuskeb:用"sysctl -a 2>/dev/null | grep core" 察看相關的參數 04/27 02:41
yuskeb:假設我想放在剛剛說的/mnt/extra目錄下 檔名是core_blabla 04/27 02:42
yuskeb:sysctl -w kernel.core_pattern = "core_%e_%s.%p" 04/27 02:45
yuskeb:或 echo "core_%e_%s.%p" > /proc/sys/kernel/core_pattern 04/27 02:48
yuskeb:棍上面兩行打錯了 應該是下面這樣 04/27 02:58
yuskeb:sysctl -w kernel.core_pattern = "/mnt/extra/core_%e_%s. 04/27 03:00
yuskeb:%p" 04/27 03:00
yuskeb:或是 04/27 03:00
yuskeb:echo "/mnt/extra/core_%e_%s.%p" > /proc/sys/kernel/core 04/27 03:01
yuskeb:_pattern 04/27 03:01
yuskeb:若嫌core file太肥也可以透過pipe導給gzip幫忙壓縮 04/27 03:05
yuskeb:http://ppt.cc/Pg(8 參考看看 kernel 2.6.19 後就有支援 04/27 03:06
yuskeb:3. 我是把cross-gdb放在host(build code的地方) 04/27 03:09
yuskeb:版子上(target)也沒有放gdb 不過有放gdb-server 04/27 03:10
yuskeb:最後 就像p兄你說的 因為寫入壽命的關係 04/27 03:15
yuskeb:我是因為遇到會重開機的問題 所以把core file導入像flash 04/27 03:18
yuskeb:這樣的非揮發性記憶體中 這樣重開機才會看得到 04/27 03:19
yuskeb:如果沒有重開機的疑慮的話 導到tmpfs/ramfs也不錯 04/27 03:19
yuskeb:再用ftp/tftp/nfs等方式把core file下載回來host上 04/27 03:21
james732:樓上可以直接回文了...XDD 04/27 09:37