flash 挂载用户分区

本文详细介绍了如何通过命令查看Linux分区,并配置文件系统挂载。包括使用cat /proc/partitions和cat /proc/mtd命令获取分区信息,设置启动参数以指定文件系统的分配和挂载,以及解决分区识别问题。同时,文章还提供了Linux当前支持的文件系统列表和系统中已启用的文件系统列表,帮助读者了解Linux文件系统管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过以下命令查看分区:

# cat /proc/partitions 
major minor  #blocks  name

  31        0        256 mtdblock0
  31        1       1280 mtdblock1
  31        2       2496 mtdblock2
  31        3       4160 mtdblock3
 240        0        256 romblock0
 240        1       1280 romblock1
 240        2       2496 romblock2
 240        3       4160 romblock3
# cat /proc/mtd        
dev:    size   erasesize  name
mtd0: 00040000 00010000 "boot"
mtd1: 00140000 00010000 "kernel"
mtd2: 00270000 00010000 "rootfs"
mtd3: 00410000 00010000 "user"


 

可以看到,mtdblockx对应mtdx,name是通过启动参数传进去的

setenv bootargs 'mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=squashfs mtdparts=hi_sfc:256K(boot),1280K(kernel),2496K(rootfs),4160K(user)'


 

因为flash一共8M,所以剩余4160K给user。

mtd的name就是根据这里来的,可以换做其他名称。

系统起来以后,通过这个命令 挂载user分区到home,jffs2必须是内核支持的

# mount -t jffs2 /dev/mtdblock3 /home
 
 


 刚开始找不到user分区,查找半天才找到原因:是user 大小搞成4190K了,flash是8M的,超过了最大值

这个是识别出user的:

SPI FLASH start_up_mode is 3 Bytes
Spi(cs1):
Block:64KB
Chip:8MB
Name:"W25Q64FV"
spi size: 8MB
chip num: 1
4 cmdlinepart partitions found on MTD device hi_sfc
Creating 4 MTD partitions on "hi_sfc":
0x000000000000-0x000000040000 : "boot"
0x000000040000-0x000000180000 : "kernel"
0x000000180000-0x0000003f0000 : "rootfs"
0x0000003f0000-0x000000800000 : "user"
Fixed MDIO Bus: probed

 

这个没有识别user

Block:64KB
Chip:8MB
Name:"W25Q64FV"
spi size: 8MB
chip num: 1
mtd: hi_sfc: partitioning exceeds flash size, truncating
3 cmdlinepart partitions found on MTD device hi_sfc
Creating 3 MTD partitions on "hi_sfc":
0x000000000000-0x000000040000 : "boot"
0x000000040000-0x000000180000 : "kernel"
0x000000180000-0x0000003f0000 : "rootfs"
Fixed MDIO Bus: probed
himii: probed

 

 

以下转载自 http://blog.chinaunix.net/uid-23835539-id-401937.html

 linux的mount支持的文件系统:
adfs, affs, autofs,  cifs,  coda,  coherent,
cramfs,  debugfs,  devpts,  efs,  ext, ext2, ext3, hfs, hpfs, iso9660, jfs, minix, msdos,
ncpfs, nfs, nfs4, ntfs, proc, qnx4, ramfs, reiserfs, romfs, smbfs, sysv, tmpfs, udf, ufs,
umsdos,  usbfs,  vfat, xenix, xfs, xiafs.

note:man 8 mount
查看Linux当前支持的文件系统:cat /proc/filesystems
[root@fedora7 proc]# cat filesystems
nodev   sysfs
nodev   rootfs
nodev   bdev
nodev   proc
nodev   cpuset
nodev   binfmt_misc
nodev   debugfs
nodev   securityfs
nodev   sockfs
nodev   usbfs
nodev   pipefs
nodev   futexfs
nodev   tmpfs
nodev   inotifyfs
nodev   eventpollfs
nodev   devpts
nodev   ramfs
        iso9660
nodev   mqueue
        ext3
nodev   rpc_pipefs
nodev   autofs
nodev   nfsd
[root@fedora7 proc]#

<think>嗯,用户遇到了在挂载jffs2文件系统时出现“Device or resource busy”的错误,需要解决这个问题。首先,我需要回忆一下可能导致这个问题的原因。根据之前看到的引用资料,比如引用[1]提到的挂载失败是因为设备正忙,引用[3]则提到可能需要检查镜像是否开启了TF卡读写功能,或者设备树配置的问题。 首先,可能的原因之一是目标挂载点已经被其他进程占用。用户应该检查是否有进程正在使用/mnt/mmcblk0p1这个目录,或者该目录下的文件正在被访问。这时候需要运行`fuser`或者`lsof`命令来确认是否有进程占用。比如`fuser -vm /dev/mtdblock3`可以查看哪个进程在使用设备。 其次,可能设备已经被挂载到了其他地方。用户需要检查`mount`命令的输出,确认/dev/mtdblock3是否已经被挂载。如果已经挂载,可能需要先卸载,或者选择另一个挂载点。 另外,设备树配置是否正确也是一个关键因素。引用[3]指出,如果镜像没有开启TF卡的读写功能,可能需要修改board.dts并重新编译。所以用户需要检查设备树中关于MTD分区和jffs2的配置是否正确,确保相关分区支持jffs2文件系统。 还有可能是文件系统本身的问题,比如损坏。用户应该尝试使用`fsck.jffs2`来检查和修复文件系统,不过需要注意这个工具可能不适用于所有情况。 内核模块的支持也不可忽视。确认内核是否启用了jffs2模块,使用`lsmod | grep jffs2`查看,如果没有加载,可能需要加载模块或者重新配置内核。 硬件问题虽然可能性较低,但也不能排除。检查硬件连接和MTD设备是否存在,比如确认/dev/mtdblock3设备节点是否存在,权限是否正确。 处理步骤的话,建议用户按照以下顺序排查: 1. 检查挂载点是否被占用,使用`fuser`或`lsof`。 2. 确认设备是否已挂载,使用`mount`命令。 3. 检查设备树配置,确保分区和文件系统支持正确。 4. 验证文件系统完整性。 5. 检查内核模块支持。 6. 排除硬件问题。 如果用户按照这些步骤逐步排查,应该能找到问题所在。比如,如果发现设备已经被挂载,就先卸载;如果设备树配置错误,就需要重新编译;或者镜像没有开启必要功能,需要修改配置。此外,引用[2]提到的设备文件问题虽然和console相关,但提醒了检查设备节点的重要性,用户应确保/dev/mtdblock3存在且权限正确。</think>### 分步解决方案 #### 一、检查资源占用状态 1. **确认挂载点是否被占用** 使用命令检查`/dev/mtdblock3`是否已被其他进程锁定: ```bash fuser -vm /dev/mtdblock3 # 查看占用进程 lsof /dev/mtdblock3 # 列出相关进程 ``` 若发现占用进程(如系统服务或内核模块),需先终止相关进程或调整服务配置[^1][^3]。 2. **验证设备是否已挂载** 运行`mount | grep mtdblock3`,若设备已挂载到其他路径(如`/proc`或临时目录),需先卸载: ```bash umount /dev/mtdblock3 ``` --- #### 二、排查文件系统配置问题 1. **检查设备树配置** 通过`dmesg`查看内核日志,确认MTD分区是否正常注册: ```bash dmesg | grep -i mtdblock3 ``` 若设备树中未正确配置`jffs2`支持,需修改`board.dts`文件,确保分区属性包含`compatible = "jffs2";`并重新编译烧录镜像[^3]。 2. **验证文件系统完整性** 若怀疑文件系统损坏,尝试强制挂载并修复: ```bash mount -t jffs2 -o rw,sync,force /dev/mtdblock3 /mnt/target ``` 若仍失败,可能需要重新擦写分区: ```bash flash_eraseall -j /dev/mtd3 # 注意:会清空分区数据 ``` --- #### 三、内核与硬件层检查 1. **内核模块支持** 确认内核已启用`CONFIG_JFFS2_FS`选项: ```bash zcat /proc/config.gz | grep JFFS2 # 查看编译配置 lsmod | grep jffs2 # 检查模块加载状态 ``` 若未启用,需重新配置内核并编译[^2]。 2. **硬件排查** 检查硬件连接是否正常(如SPI NOR Flash焊点),通过`mtdinfo`验证分区信息: ```bash mtdinfo /dev/mtdblock3 ``` 若输出中显示`Type: nand`但实际硬件为NOR Flash,需修正设备树配置。 --- #### 四、替代方案 若问题仍存在,可尝试以下方法: 1. 使用`ramfs`临时挂载测试: ```bash mkdir /tmp/jffs2_test mount -t jffs2 /dev/mtdblock3 /tmp/jffs2_test -o noatime,nodiratime ``` 2. 更换挂载路径测试权限问题。 --- ### 关键操作总结 | 步骤 | 操作 | 命令示例 | |------|------|----------| | 1 | 终止占用进程 | `kill -9 $(fuser -m /dev/mtdblock3)` | | 2 | 强制卸载设备 | `umount -f /dev/mtdblock3` | | 3 | 擦除分区 | `flash_eraseall /dev/mtd3` |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值