之前用的文件系统是initramfs的,这种文件系统是编译进内核里的,而开机之后内核是写在内存中的,所以每次掉电之后写进文件系统中的东西都会丢失。所以决定换成ubifs的文件系统。这种文件系统是跟内核分开烧录的,开机之后由内核自动挂载。文件系统在nandflash中,掉电之后不会丢失。因为内核跟文件系统是分开的,每次开机的时候u-boot就要告诉内核文件系统在哪个位置。并且,在写文件系统的时候一定要写对位置。

我在烧录文件系统的时候遇到了一个问题困扰了我很久:每次烧录完内核烧录完文件系统之后要进入内核就会死在一个找不到文件系统的地方,报错如下:

ip_set: protocol 6
IPVS: Registered protocols (TCP, UDP, AH, ESP)
IPVS: Connection hash table configured (size=4096, memory=32Kbytes)
IPVS: Creating netns size=1008 id=0
IPVS: ipvs loaded.
IPVS: [rr] scheduler registered.
IPVS: [wrr] scheduler registered.
IPVS: [lc] scheduler registered.
IPVS: [wlc] scheduler registered.
IPVS: [lblc] scheduler registered.
IPVS: [lblcr] scheduler registered.
IPVS: [dh] scheduler registered.
IPVS: [sh] scheduler registered.
IPVS: [sed] scheduler registered.
IPVS: [nq] scheduler registered.
ip_tables: (C) 2000-2006 Netfilter Core Team
ipt_CLUSTERIP: ClusterIP Version 0.8 loaded successfully
arp_tables: (C) 2002 David S. Miller
TCP cubic registered
NET: Registered protocol family 17
lib80211: common routines for IEEE802.11 drivers
Registering the dns_resolver key type
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
UBIFS error (pid 1): check_lpt_type: invalid type (15) in LPT node type 2
List of all partitions:
1f00 1024 mtdblock0 (driver?)
1f01 15360 mtdblock1 (driver?)
1f02 65536 mtdblock2 (driver?)
1f03 81920 mtdblock3 (driver?)
1f04 49152 mtdblock4 (driver?)
1f05 262144 mtdblock5 (driver?)
No filesystem could mount root, tried: ubifs
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
Backtrace:
[<c003b2cc>] (dump_backtrace+0x0/0x110) from [<c04151c0>] (dump_stack+0x18/0x1c)
r6:00008000 r5:c38a5006 r4:c05a7480 r3:c057e274
[<c04151a8>] (dump_stack+0x0/0x1c) from [<c0415220>] (panic+0x5c/0x17c)
[<c04151c4>] (panic+0x0/0x17c) from [<c0008de0>] (mount_block_root+0x1c8/0x208)
r3:c3819f54 r2:80000000 r1:c3819f78 r0:c04fc2c7
r7:c002677c
[<c0008c18>] (mount_block_root+0x0/0x208) from [<c0009080>] (prepare_namespace+0x94/0x1b4)
[<c0008fec>] (prepare_namespace+0x0/0x1b4) from [<c00089d4>] (kernel_init+0xe4/0x118)
r5:c0025f50 r4:c05a6d60
[<c00088f0>] (kernel_init+0x0/0x118) from [<c004d8ac>] (do_exit+0x0/0x624)

很明显是内核找不到文件系统,于是我去检查了我的内核分区表如下:

 static struct mtd_partition smdk_default_nand_part[] = {
[] = {
.name = "u-boot",
.size = SZ_1M,
.offset = ,
},
[] = {
.name = "kernel",
.offset = MTDPART_OFS_NXTBLK,
.size = SZ_1M*,
},
[] = {
.name = "rootfs",
.offset = MTDPART_OFS_NXTBLK,
.size = SZ_1M*,
},
[] = {
.name = "apps",
.offset = MTDPART_OFS_NXTBLK,
.size = SZ_1M*,
},
[] = {
.name = "data",
.offset = MTDPART_OFS_NXTBLK,
.size = SZ_1M*,
},
[] = {
.name = "info",
.size = SZ_1M * ,
.size = MTDPART_OFS_NXTBLK,
},
};

而我的bootargs跟分区表也是对应的:

bootargs_ubifs  console=ttyS0,115200 mem=64M ubi.mtd=2 root=ubi0:rootfs rootwait rootfstype=ubifs rw

那么内核为什么找不到文件系统呢。最后突然想到会不会是写的时候出错导致文件系统没有写对,于是去检查了写的命令,果然发现是写的地方出错了。

我在内核中给文件系统的分区在2分区,分区大小为64M,从16M——80M。所以写的过程应该是这样的:tftp到30008000的位置,然后将16M——80M即1000000——6000000的位置擦除,然后将30008000位置的东西写到1000000的地方,写1000000的大小。

tftp 30008000 rootfs-ubifs.bin;nand erase 1000000 6000000;nand write 30008000 1000000 1000000

写完之后boot进入内核成功!

在烧录文件系统的时候要注意几个地方:

(1)烧录文件系统之前一定要把要写入的分区整个分区给擦除掉。

(2)bootargs要指定对正确的分区。

(3)nand write写的时候要写对位置。

FL2440 ubifs文件系统烧录遇到的问题——内核分区的重要性的更多相关文章

  1. Tiny6410 关于制作ubifs文件系统映像

    Tiny6410的superboot设计使得我不能用yaffs2文件系统,不过也罢,费点事就费点事吧 在这之前要安装mktools系列工具哦~~ 进入工作目录/opt/FriendlyARM/mini ...

  2. UBIFS文件系统简介 与 利用mkfs.ubifs和ubinize两个工具制作UBI镜像 (完整理解版本)

    UBI文件系统简介 在linux-2.6.27以前,谈到Flash文件系统,大家很多时候多会想到cramfs.jffs2.yaffs2等文件系统. 它们也都是基于文件系 统+mtd+flash设备的架 ...

  3. 使用 /proc 文件系统来访问 linux操作系统 内核的内容 && 虚拟文件系统vfs及proc详解

    http://blog.163.com/he_junwei/blog/static/19793764620152743325659/ http://www.01yun.com/other/201304 ...

  4. df看到的文件系统容量跟parted看到的分区容量差别较大的解决方法

    下午同事在自己的开发机上遇到题目说到的问题,它看到挂在到/dev/sda磁盘分区5上的ext4文件系统的容量显著小于该分区的大小 df看到的文件系统容量: #df -h /dev/sda5 Files ...

  5. 让Android系统支持ubifs文件系统

    原文地址:http://www.cnblogs.com/linucos/p/3279381.html 1. ubifs号称性能比yaffs2 好,同时压缩可读写,文件系统image体较小同时可写,相当 ...

  6. EASYARM-IMX283 制作ubifs文件系统

    ubifs主页:http://www.linux-mtd.infradead.org/doc/ubifs.html nandflash上常用的文件系统有jffs2.yaffs和ubifs,其中ubif ...

  7. 如何调试ubifs文件系统

    注意内核版本为4.9 在drivers/mtd/ubi/debug.h中加入DEBUG的定义,如下 #ifndef __UBI_DEBUG_H__#define __UBI_DEBUG_H__#def ...

  8. ubifs文件系统挂载时提示ubi0: MTD device 5 is write-protected, attach in read-only mode

    答:笔者遇到的这种情况是由于分区表未与nor flash的物理擦除块边界对齐而导致的,因此调整分区表即可解决此问题

  9. uboot和内核分区的改动

    随着内核的更新,内核越来越大,uboot给nand的kernel分区默认是2M的 device nand0 <nandflash0>, # parts = 4  #: name       ...

随机推荐

  1. CVE-2016-6662 mysql RCE测试

    参考:http://bobao.360.cn/learning/detail/3027.html ,我尝试第一种方法 1.先修改mysql_hookandroot_lib.c里面的反弹地址和端口: # ...

  2. mongoDB支持的数据类型

    下表为MongoDB中常用的几种数据类型. 数据类型 描述 String 字符串.存储数据常用的数据类型.在 MongoDB 中,UTF-8 编码的字符串才是合法的. Integer 整型数值.用于存 ...

  3. linux下新硬盘的自动检测及格式化--支持硬盘的热插拔处理

    说明 可能存在bug,所以慎用!!! 且只在mbr分区格式下测试过. parted.sh 可以用在系统起来的时候,比如rc.local脚本里面. parted.c 需要parted.sh脚本配合使用, ...

  4. Bean装配之@Autowired注解

    @Required(不常用) @Autowired(常用) 下面用例子解释以上内容: @Autowired注解的三种方式如下,第一种是直接在属性名上加注解,这样就可以不用在写set方法进行注入,这种方 ...

  5. 【bzoj4810】由乃的玉米田

    lxl丧心病狂-- 首先允许离线的区间询问一看就是莫队.那么我们看下怎么莫队? 不会. "由乃题多半是不可做的."于是我看了下题解--好吧果然是bitset 用bitset维护当前 ...

  6. 带你入门代理模式/SpringAop的运行机制

    SpringAop 是spring框架中最重要的一项功能之一,同时也是企业级开发记录事物日志等不可或缺的一部分,如果说你的系统需要记录用户访问接口的操作,那SpringAop是很完美的了,当然,拦截器 ...

  7. 使用WindowManager添加View——悬浮窗口的基本原理

    Android系统中的“窗口”类型虽然很多,但只有两大类是经常使用的:一是由系统进程管理的,称之为“系统窗口”:第二个就是由应用程序产生的,用于显示UI界面的“应用窗口”.如果大家熟悉WindowMa ...

  8. quote(),unquote(),urlencode()编码解码

    quote(),unquote(),quote_plus(),unquote_plus(),urlencode() ,pathname2url(),url2pathname() urllib中还提供了 ...

  9. 安卓长按交互onCreateContextMenu的简单 用法

    1.可在activity和fragment中使用. 2.使用方法 (1)注册 registerForContextMenu(btn);//btn是要实现交互的控件 (2)重写onCreateConte ...

  10. php(间接)调用nmap命令时的选项特殊点

    使用php调用pythn-nmap时,发现无法正常执行扫描动作 将nmap命令直接写入php,由后者调用,发现仍然无法执行,提示需要添加“-Pn”选项 原来是: 正常情况下:nmap -n host ...