[問題] flash 問題

看板LinuxDev作者 (消失)時間13年前 (2011/04/19 23:17), 編輯推噓18(18046)
留言64則, 5人參與, 最新討論串1/1
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

04/20 17:31, , 1F
請用MTD
04/20 17:31, 1F

04/21 21:14, , 2F
一般來說roofs不會複製到Ram上,但kernel有開initramfs的話
04/21 21:14, 2F

04/21 21:15, , 3F
則rootfs會被壓縮然後包進去zImage裡,所以自然kernel自解
04/21 21:15, 3F

04/21 21:16, , 4F
壓縮的時候也會把rootfs解到Ram上,一般都是你的rootfs很小
04/21 21:16, 4F

04/21 21:16, , 5F
的時候比較有用,不然很大的rootfs不僅解壓縮慢,你的RAM搞
04/21 21:16, 5F

04/21 21:17, , 6F
不好也沒有多空間可以擺~~
04/21 21:17, 6F

04/21 21:18, , 7F
至於FW版號的問題那是大哉問,大家的作法都不同,原po可以試
04/21 21:18, 7F

04/21 21:19, , 8F
試在你的FW前面再帶一個結構來描述,結構裡面可以放版號,
04/21 21:19, 8F

04/21 21:20, , 9F
供認證的簽名,是否允強迫update之類的種種資訊...
04/21 21:20, 9F

04/22 00:32, , 10F
kernel是不是一定要解到ram呢
04/22 00:32, 10F

04/22 00:33, , 11F
如果把rootfs只解到nand flash不知道flash會不會很容掛?
04/22 00:33, 11F

04/22 00:33, , 12F
印象中flash不是讀寫次數是有壽命的...
04/22 00:33, 12F

04/22 00:46, , 13F
所以會有特定的file system 諸如yaffs2,jffs2出現,他們
04/22 00:46, 13F

04/22 00:47, , 14F
做wear leveling,來延長使用壽命;我建議原PO參考相關書籍
04/22 00:47, 14F

04/22 00:49, , 15F
個人推薦這本 http://0rz.tw/pXmus
04/22 00:49, 15F

04/22 01:02, , 16F
kernel可以直接跑在nor flash上,可以google XIP相關資料
04/22 01:02, 16F

04/22 01:03, , 17F
在linux base的平台上沒用過XD,因為ram都還蠻大的;到是一
04/22 01:03, 17F

04/22 01:04, , 18F
些ram只有4K,8K的arm7 MCU,code不跑在flash上是不行的...
04/22 01:04, 18F

04/22 01:08, , 19F
其原理也很簡單,就是利用linking script把RO擺在flash,
04/22 01:08, 19F

04/22 01:09, , 20F
RW,zi等不同的段放在ram上就可以了...
04/22 01:09, 20F

04/24 00:42, , 21F
之前有遇到app crash的bugs會導致系統重開機
04/24 00:42, 21F

04/24 00:43, , 22F
多出來的flash我就拿來擺app的coredump files
04/24 00:43, 22F

04/24 00:45, , 23F
再抓回來餵給GDB來除錯 多的flash用來蒐集log等資訊來debug
04/24 00:45, 23F

04/26 01:28, , 24F
是把多的flash多切一個掛載點?
04/26 01:28, 24F

04/26 01:28, , 25F
要怎麼讓會出錯的app產生coredump files呢
04/26 01:28, 25F

04/26 01:29, , 26F
板子上好像沒有GDB可以用
04/26 01:29, 26F

04/26 01:30, , 27F
看起來使用jffs2撐個三年應該沒問題吧
04/26 01:30, 27F

04/27 01:48, , 28F
1.嗯嗯 假設flash切成 u-boot/kernel/rootfs/config/extra
04/27 01:48, 28F

04/27 01:55, , 29F
用"cat /proc/mtd"察看假設extra(多的flash名字)對應到mtd4
04/27 01:55, 29F

04/27 01:56, , 30F
如果我想把在掛載在/mnt/extra (先"mkdir -p /mnt/extra)
04/27 01:56, 30F

04/27 01:59, , 31F
用"mount -tjffs2 mtd4 /mnt/extra" 就掛起來囉 掛成jffs2
04/27 01:59, 31F

04/27 02:03, , 32F
或"mount -tjffs2 mtd:extra /mnt/extra" 用名字的方式
04/27 02:03, 32F

04/27 02:04, , 33F
或"mount -tjffs2 /dev/mtdblock4 /mnt/extra" 可能得mknod
04/27 02:04, 33F

04/27 02:09, , 34F
我也推薦ask兄說的那本書 對1F說的的MTD用了一整個章節介紹
04/27 02:09, 34F

04/27 02:11, , 35F
原文書出到第二版 原文書作者的寫作技巧很好很容易閱讀
04/27 02:11, 35F

04/27 02:13, , 36F
不會特意使用艱澀困難的字彙 對理解flash、MTD很有幫住
04/27 02:13, 36F

04/27 02:22, , 37F
http://ppt.cc/nGyq 推薦這部落客的文章
04/27 02:22, 37F

04/27 02:27, , 38F
2. http://linux.die.net/man/5/core 如何產生core file
04/27 02:27, 38F

04/27 02:28, , 39F
http://linux.die.net/man/7/signal 哪些signal會dump core
04/27 02:28, 39F

04/27 02:29, , 40F
最陽春的方式是在app裡面呼叫abort()就會產生core file囉
04/27 02:29, 40F

04/27 02:32, , 41F
若不會產生 用"ulimit -a"(bash)檢查stack size是否被限制
04/27 02:32, 41F

04/27 02:35, , 42F
用"ulimit -c 5566"或"ulimit -c unlimited"給予stack size
04/27 02:35, 42F

04/27 02:36, , 43F
stack size可能要取決於版子上有多少資源可供揮霍囉
04/27 02:36, 43F

04/27 02:40, , 44F
再來決定一下core file產生的位置 要集中擺在哪一個目錄下
04/27 02:40, 44F

04/27 02:41, , 45F
用"sysctl -a 2>/dev/null | grep core" 察看相關的參數
04/27 02:41, 45F

04/27 02:42, , 46F
假設我想放在剛剛說的/mnt/extra目錄下 檔名是core_blabla
04/27 02:42, 46F

04/27 02:45, , 47F
sysctl -w kernel.core_pattern = "core_%e_%s.%p"
04/27 02:45, 47F

04/27 02:48, , 48F
或 echo "core_%e_%s.%p" > /proc/sys/kernel/core_pattern
04/27 02:48, 48F

04/27 02:58, , 49F
棍上面兩行打錯了 應該是下面這樣
04/27 02:58, 49F

04/27 03:00, , 50F
sysctl -w kernel.core_pattern = "/mnt/extra/core_%e_%s.
04/27 03:00, 50F

04/27 03:00, , 51F
%p"
04/27 03:00, 51F

04/27 03:00, , 52F
或是
04/27 03:00, 52F

04/27 03:01, , 53F
echo "/mnt/extra/core_%e_%s.%p" > /proc/sys/kernel/core
04/27 03:01, 53F

04/27 03:01, , 54F
_pattern
04/27 03:01, 54F

04/27 03:05, , 55F
若嫌core file太肥也可以透過pipe導給gzip幫忙壓縮
04/27 03:05, 55F

04/27 03:06, , 56F
http://ppt.cc/Pg(8 參考看看 kernel 2.6.19 後就有支援
04/27 03:06, 56F

04/27 03:09, , 57F
3. 我是把cross-gdb放在host(build code的地方)
04/27 03:09, 57F

04/27 03:10, , 58F
版子上(target)也沒有放gdb 不過有放gdb-server
04/27 03:10, 58F

04/27 03:15, , 59F
最後 就像p兄你說的 因為寫入壽命的關係
04/27 03:15, 59F

04/27 03:18, , 60F
我是因為遇到會重開機的問題 所以把core file導入像flash
04/27 03:18, 60F

04/27 03:19, , 61F
這樣的非揮發性記憶體中 這樣重開機才會看得到
04/27 03:19, 61F

04/27 03:19, , 62F
如果沒有重開機的疑慮的話 導到tmpfs/ramfs也不錯
04/27 03:19, 62F

04/27 03:21, , 63F
再用ftp/tftp/nfs等方式把core file下載回來host上
04/27 03:21, 63F

04/27 09:37, , 64F
樓上可以直接回文了...XDD
04/27 09:37, 64F
文章代碼(AID): #1DhQTtuc (LinuxDev)
文章代碼(AID): #1DhQTtuc (LinuxDev)