推 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: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:最陽春的方式是在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: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