Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2628736
  • 博文数量: 333
  • 博客积分: 4817
  • 博客等级: 上校
  • 技术积分: 4413
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-28 10:51
文章分类

全部博文(333)

文章存档

2017年(20)

2016年(57)

2015年(27)

2014年(20)

2013年(21)

2012年(164)

2011年(24)

分类: LINUX

2012-04-18 16:41:56

 

因为毕业设计的原因接触到linux usb gadget。需要将开发板(QQ2440)模拟成U盘。下载了s3c2410.udc.c并对代码及Kconfig、Makefile做了一些简单的修改。编译生成s3c2410_udc.ko与g_file_storage.ko
1. 建立fat32映像,大小为2M:
    #dd if=/dev/zero of=fat32.img bs=1k count=2048
    #mkfs.vfat fat32.img
2. 向fat32.img中写入一些文件,以用来测试:
    #mkdir fat32
    #sudo mount -t vfat -o loop fat32.img fat32  
    #cd fat32
    #touch test.txt
    #echo hello,wolrd>test.txt
    #sync
3. 把fat32.img copy到根文件系统中,NFS启动系统(我用的是NFS)。
4. 启动系统后:
    #insmod s3c2410_udc.ko   
    #insmod g_file_storage.ko file=fat32.img  stall=0 removable=1
插上USB线,可见在PC端有类似U盘插入的现象。挂载设备在/media/disk下(我用的UBUNTU8.04)。
    #ls /media/disk
    test.txt
    #cat /media/disk/test.txt
    hello,world
可见,系统可以访问U盘内容。
遇到的问题:
1. 在开发板执行 mount命令挂载fat32.img到/mnt目录时:
    #  mount -o loop -t vfat  fat32.img  /mnt/
    mount: mounting /dev/loop0 on /mnt/ failed: No such device
   问题分析:根据提示这是因为没有/dev/loop0 。于是用mknod /dev/loop0 b 7 0建立loop0设备,但问题还是这样。后来根据网上资料,说是在内核中没有选上Loopback device support这个选项,该选项在Block device下,选上这个选项后,重新编译下载内核后,再执行以上命令,No such device的问题解决,不过又出现一下问题:
    Unable to load NLS charset iso8859-1
    FAT: IO charset iso8859-1 not found
    mount: mounting /dev/loop0 on /mnt/ failed: Invalid argument
  我的busybox是1.10.0版本。这条命令在PC上执行是没问题的。对比别人的操作,将挂载命令改为 mount -o loop fat32.img  /mnt/后解决。
2. 当我在开发板修改fat32.img的内容后,PC端不能得到更新。同样的,在PC端修改内容后,开发板端也不能更新。
在开发板:
    #cd fat32
    #echo i love u>>test.txt
    #sync
    #cat test.txt
    hello,wolrd
    i love u
   
修改文件内容后,执行sync。cat fat32.img的内容可发现fat32.img的内容以更新。在PC上执行cat /dev/sdb(板子设备号),可发现/dev/sdb的内容已更新。
但是/media/disk(/dev/sdb挂摘的目录)中,cat /media/disk/test.txt发现内容并没有得到相应改变。
PC:
    #cat /media/disk/test.txt
    hello,wolrd
可见,PC端看到的与开发板看到的不一致。   
再做如下试验:
主机:
    #mount -o loop fat32.img  /tmp
    #mount -o loop fat32.img /mnt
修改/tmp/test.txt内容后/mnt/test.txt没有改变
进一步发现,当修改/tmp/test.txt文件内容后,只要重新umount,mount一次fat32.img到/mnt就可以看到更新后的文件。这是为什么呢??

阅读(2749) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~