Platform: S3C2416 + Linux-2.6.21
如何修改SD卡的卷标?
本来想通过 e2lable或mlabel等工具来修改的,但是这些工具并不合适, e2lable只是针对 ext2, ext3这两种文件系统的, mlabel是针对 FAT 格式的文件系统, 但在SDK上无法使用。所以放弃使用第3方软件来修改卷标。
分析 linux USB驱动的代码,在USB枚举的过程中并没有发现有读取卷标的配置,故可以判定,卷标是保存在SD卡的某个位置上的,所以找了一些资料分析SD卡的结构。
通过分析得知,对于FAT16格式的SD卡,其文件系统的格式是保存在 0扇区的 0x36的位置(lba=0),卷标是保存在480扇区(lba=480),所以将新的卷标名写到 lba=480的位置就可以了。
对于FAT32格式的SD卡,其文件系统的格式是保存在 0扇区的 0x52的位置(lba=0),卷标是保存在7528扇区(lba=7528),所以将新的卷标名写到 lba=7528的位置就可以了。
以下是实现重命名的部分代码:
/* Perform the read */ file_offset_tmp = file_offset; nread = vfs_read(curlun->filp, (char __user *) bh->buf, amount, &file_offset_tmp); VLDBG(curlun, "file read %u @ %llu -> %d\n", amount, (unsigned long long) file_offset, (int) nread);
// Check FATx Format?
if(lba==0) { char *p=NULL; p = (char *)bh->buf;
// FAT16 ? Sector[0] 0x36 save FATx format
if(p[57]==0x31) { FATx = 0; VLDBG(curlun, "The Card Format is: FAT16\n"); } // FAT32 ? Sector[0] 0x32 save FATx format
if(p[85]==0x33) { FATx = 1; VLDBG(curlun, "The Card Format is: FAT32\n"); } } // FAT16: Modify SD Card Volume -> AAA BBB
// FAT16: Volume Name save as sector[480]
if(lba==480 && !FATx) { char *p=NULL; p = (char *)bh->buf; p[0] = 0x41; p[1] = 0x41; p[2] = 0x41; p[3] = 0x20; p[4] = 0x42; p[5] = 0x42; p[6] = 0x42; } // FAT32: Modify SD Card Volume -> RCA eRdR
// FAT32: Volume Name save as sector[7528]
if(lba==7528 && FATx) { char *p=NULL; p = (char *)bh->buf; p[0] = 0x41; p[1] = 0x41; p[2] = 0x41; p[3] = 0x20; p[4] = 0x42; p[5] = 0x42; p[6] = 0x42; }
|
貌似盘符的问题解决了,但仔细测试后,发现如果盘符之前是没有的,也就是在电脑上显示[可移动磁盘]的,对于这样的SD卡还是无法重命名,以上的改动只是针对之前盘符有重名的,所以还得另想办法。
没办法,还是觉得 mlabel 比较简单,所以下载了
mtools_3.9.11.orig.tar.gz,然后编译成 arm 版本的,
./configure --prefix=$PWD/_install --disable-floppyd --host=arm CC=/usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-gcc-4.2.2
make
将生成的 mtools 放到SDK的文件系统 /bin 中,mtools是包括很多个命令的,如 mcd, mlabel ,我这里只用到了 mlabel, 所以在 /bin新建一个链接
ln -s mtools mlabel
在运行这个命令之前,还须在 ~(主目录)创建 .mtoolsrc 文件,包括以下内容:
[root /]$ vi .mtoolsrc
drive f: file="/dev/mmcblk0p1"
mtools_skip_check=1
有这个文件之后就可以使用 mlabel 这个工具修改盘符了。
[root /]$ mlabel f:AAA\ BBB
阅读(4557) | 评论(0) | 转发(0) |