作者paulyanzi (消失)
看板LinuxDev
标题[问题] flash 问题
时间Tue Apr 19 23:17:09 2011
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
1F:推 heoris:请用MTD 04/20 17:31
2F:推 askacis:一般来说roofs不会复制到Ram上,但kernel有开initramfs的话 04/21 21:14
3F:→ askacis:则rootfs会被压缩然後包进去zImage里,所以自然kernel自解 04/21 21:15
4F:→ askacis:压缩的时候也会把rootfs解到Ram上,一般都是你的rootfs很小 04/21 21:16
5F:→ askacis:的时候比较有用,不然很大的rootfs不仅解压缩慢,你的RAM搞 04/21 21:16
6F:→ askacis:不好也没有多空间可以摆~~ 04/21 21:17
7F:→ askacis:至於FW版号的问题那是大哉问,大家的作法都不同,原po可以试 04/21 21:18
8F:→ askacis:试在你的FW前面再带一个结构来描述,结构里面可以放版号, 04/21 21:19
9F:→ askacis:供认证的签名,是否允强迫update之类的种种资讯... 04/21 21:20
10F:→ paulyanzi:kernel是不是一定要解到ram呢 04/22 00:32
11F:→ paulyanzi:如果把rootfs只解到nand flash不知道flash会不会很容挂? 04/22 00:33
12F:→ paulyanzi:印象中flash不是读写次数是有寿命的... 04/22 00:33
13F:推 askacis:所以会有特定的file system 诸如yaffs2,jffs2出现,他们 04/22 00:46
14F:→ askacis:做wear leveling,来延长使用寿命;我建议原PO参考相关书籍 04/22 00:47
16F:推 askacis:kernel可以直接跑在nor flash上,可以google XIP相关资料 04/22 01:02
17F:→ askacis:在linux base的平台上没用过XD,因为ram都还蛮大的;到是一 04/22 01:03
18F:→ askacis:些ram只有4K,8K的arm7 MCU,code不跑在flash上是不行的... 04/22 01:04
19F:推 askacis:其原理也很简单,就是利用linking script把RO摆在flash, 04/22 01:08
20F:→ askacis:RW,zi等不同的段放在ram上就可以了... 04/22 01:09
21F:推 yuskeb:之前有遇到app crash的bugs会导致系统重开机 04/24 00:42
22F:→ yuskeb:多出来的flash我就拿来摆app的coredump files 04/24 00:43
23F:→ yuskeb:再抓回来喂给GDB来除错 多的flash用来蒐集log等资讯来debug 04/24 00:45
24F:→ paulyanzi:是把多的flash多切一个挂载点? 04/26 01:28
25F:→ paulyanzi:要怎麽让会出错的app产生coredump files呢 04/26 01:28
26F:→ paulyanzi:板子上好像没有GDB可以用 04/26 01:29
27F:→ paulyanzi:看起来使用jffs2撑个三年应该没问题吧 04/26 01:30
28F:推 yuskeb:1.嗯嗯 假设flash切成 u-boot/kernel/rootfs/config/extra 04/27 01:48
29F:推 yuskeb:用"cat /proc/mtd"察看假设extra(多的flash名字)对应到mtd4 04/27 01:55
30F:→ yuskeb:如果我想把在挂载在/mnt/extra (先"mkdir -p /mnt/extra) 04/27 01:56
31F:→ yuskeb:用"mount -tjffs2 mtd4 /mnt/extra" 就挂起来罗 挂成jffs2 04/27 01:59
32F:→ yuskeb:或"mount -tjffs2 mtd:extra /mnt/extra" 用名字的方式 04/27 02:03
33F:→ yuskeb:或"mount -tjffs2 /dev/mtdblock4 /mnt/extra" 可能得mknod 04/27 02:04
34F:推 yuskeb:我也推荐ask兄说的那本书 对1F说的的MTD用了一整个章节介绍 04/27 02:09
35F:推 yuskeb:原文书出到第二版 原文书作者的写作技巧很好很容易阅读 04/27 02:11
36F:→ yuskeb:不会特意使用艰涩困难的字汇 对理解flash、MTD很有帮住 04/27 02:13
40F:→ yuskeb:最阳春的方式是在app里面呼叫abort()就会产生core file罗 04/27 02:29
41F:→ yuskeb:若不会产生 用"ulimit -a"(bash)检查stack size是否被限制 04/27 02:32
42F:推 yuskeb:用"ulimit -c 5566"或"ulimit -c unlimited"给予stack size 04/27 02:35
43F:→ yuskeb:stack size可能要取决於版子上有多少资源可供挥霍罗 04/27 02:36
44F:→ yuskeb:再来决定一下core file产生的位置 要集中摆在哪一个目录下 04/27 02:40
45F:→ yuskeb:用"sysctl -a 2>/dev/null | grep core" 察看相关的参数 04/27 02:41
46F:→ yuskeb:假设我想放在刚刚说的/mnt/extra目录下 档名是core_blabla 04/27 02:42
47F:→ yuskeb:sysctl -w kernel.core_pattern = "core_%e_%s.%p" 04/27 02:45
48F:→ yuskeb:或 echo "core_%e_%s.%p" > /proc/sys/kernel/core_pattern 04/27 02:48
49F:推 yuskeb:棍上面两行打错了 应该是下面这样 04/27 02:58
50F:→ yuskeb:sysctl -w kernel.core_pattern = "/mnt/extra/core_%e_%s. 04/27 03:00
51F:→ yuskeb:%p" 04/27 03:00
52F:→ yuskeb:或是 04/27 03:00
53F:→ yuskeb:echo "/mnt/extra/core_%e_%s.%p" > /proc/sys/kernel/core 04/27 03:01
54F:→ yuskeb:_pattern 04/27 03:01
55F:推 yuskeb:若嫌core file太肥也可以透过pipe导给gzip帮忙压缩 04/27 03:05
57F:推 yuskeb:3. 我是把cross-gdb放在host(build code的地方) 04/27 03:09
58F:→ yuskeb:版子上(target)也没有放gdb 不过有放gdb-server 04/27 03:10
59F:推 yuskeb:最後 就像p兄你说的 因为写入寿命的关系 04/27 03:15
60F:推 yuskeb:我是因为遇到会重开机的问题 所以把core file导入像flash 04/27 03:18
61F:→ yuskeb:这样的非挥发性记忆体中 这样重开机才会看得到 04/27 03:19
62F:→ yuskeb:如果没有重开机的疑虑的话 导到tmpfs/ramfs也不错 04/27 03:19
63F:→ yuskeb:再用ftp/tftp/nfs等方式把core file下载回来host上 04/27 03:21
64F:→ james732:楼上可以直接回文了...XDD 04/27 09:37