openwrt支持usb自动mount的功能

嵌入式操作系统

57人已加入

描述

  mount概要

  mount是Linux下的一个命令,它可以将分区挂接到Linux的一个文件夹下,从而将分区和该目录联系起来,因此我们只要访问这个文件夹,就相当于访问该分区了。 目前mount已经不仅仅局限于Linux了。在Windows系统下的应用也越来越广了,多用在虚拟光驱类软件上,比如Clone CD,Daemon tool,WinMount等。

  mount格式使用

  以下格式均可以mount到虚拟盘中使用

  1.光盘镜像ISO/IMG/VCD/nrg/mdf及mds/FCD/LCD/bin等

  支持软件:Alcohol, Clone, Daemon, UtraISO, WinISO, Virtual disk, WinMount

  2.音频镜像FLAC/APE/WV/WAVE

  支持软件:WinMount

  3.虚拟机硬盘镜像VHD/VMDK/VDI

  支持软件:Virtual disk, VMware, Virtual box, WinMount

  4.压缩格式RAR/ZIP/MOU

  支持软件:WinMount

  mount的作用

  用户在UNIX的机器上打开一个文件以前,包含该文件的文件系统必须先进行挂载的动作,此时用户要对该文件系统下mount的指令以进行挂载。通常是使用在USB或其他可移除存储设备上,而根目录则保持挂载的状态。但Unix文件系统可以对应一个文件而不一定要是硬件设备。

  Unix命令行的mount指令是告诉操作系统,对应的文件系统已经准备好,可以使用了,而该文件系统会对应到一个特定的点(称为挂载点)。挂载好的文件、目录、设备以及特殊文件即可提供用户使用。除了操作系统调用的mount指令外,mount_root()会优先挂载(或称根目录) 。在这个情况下,操作系统会在调用setup前,先调用mount。

  它的对应指令,umount,则是告诉操作系统,断开与该文件系统的连接,使其脱离挂载点。

  文件系统条目 http://zh.wikipedia.org/wiki/%E6%AA%94%E6%A1%88%E7%B3%BB%E7%B5%B1

  计算机的文件系统是一种存储和组织计算机数据的方法,它使得对其存取和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数据实际保存在硬盘(或者光盘)的地址为多少的数据块上,只需要记住这个文件的所属目录和文件名。在写入新数据之前,用户不必关心硬盘上的那个块地址没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系统自动完成,用户只需要记住数据被写入到了哪个文件中。

  文件系统通常使用硬盘和光盘这样的存储设备,并维护文件在设备中的物理位置。但是,实际上文件系统也可能仅仅是一种存取資料的界面而已,实际的数据是通过网络协议(如NFS、SMB、9P等)提供的或者内存上,甚至可能根本沒有对应的文件(如proc文件系统)。

  严格地说, 文件系统是一套实现了数据的存储、分级组织、存取和获取等操作的抽象数据类型(Abstract data type)。

  那么在此,mount的作用是,以特定选项(rw)重新挂载文件系统到挂载点/system。

  目的只是有权限读写/system下的文件,为什么不chmod呢

  # pwd

  /

  # chmod 777 system

  Unable to chmod system: Read-only file system

  因为根目录下的system目录是system文件系统中的一个目录。

  编译openwrt支持USB自动mount功能

  make menuconfig

  1)添加USB相关支持

  Kernel modules —》 USB Support —》 《*》 kmod-usb-core. ##默认已经选了

  Kernel modules —》 USB Support —》 《*》 kmod-usb-ohci. ##默认已选 old usb1.0

  Kernel modules —》 USB Support —》 《*》 kmod-usb-uhci. ## usb1.1

  Kernel modules —》 USB Support —》 《*》 kmod-usb-storage.

  Kernel modules —》 USB Support —》 《*》 kmod-usb-storage-extras.

  Kernel modules —》 USB Support —》 《*》 kmod-usb2. ##默认已经选了 usb2.0

  2)添加SCSI支持

  Kernel modules —》 Block Devices —》 《*》kmod-scsi-core ##默认已经选了 usb3.0 ??

  3)添加USB挂载

  Base system —》 《*》block-mount

  4)添加自动挂载工具

  Utilities —》 Filesystem —》 《*》 badblocks

  5)添加文件系统支持

  Kernel modules —》 Filesystems —》 《*》 kmod-fs-ext4 (移动硬盘EXT4格式选择)

  Kernel modules —》 Filesystems —》 《*》 kmod-fs-vfat(FAT16 / FAT32 格式 选择)

  Kernel modules —》 Filesystems —》 《*》 kmod-fs-ntfs (NTFS 格式 选择)

  6)添加UTF8编码,CP437编码,ISO8859-1编码

  Kernel modules —》 Native Language Support —》 《*》 kmod-nls-cp437

  Kernel modules —》 Native Language Support —》 《*》 kmod-nls-iso8859-1

  Kernel modules —》 Native Language Support —》 《*》 kmod-nls-utf8

  Utilities ---》 disc ---》 《*》 fdisk.。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 manipulate disk partition table

  Utilities ---》 《*》 usbutils.。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 USB devices listing utilities

  退出保存

  7)支持nls-cp936

  make kernel_menuconfig

  File systems ---》 《M》 Native language support ---》

  《M》 Codepage 437 (United States, Canada)

  《M》 Simplified Chinese charset (CP936, GB2312)

  保存退出

  // build_dir/target-mips_r2_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.7.9/.config 》 target/linux/ar71xx/config-3.7

  ---------------------------------- end ----------------------------------------------------

  make V=99

  ls -lh linux-3.7.9/fs/nls/nls_cp936.ko ##上面选择编译的 cp936内核模块

  web界面上升级 bin/ar71xx/openwrt-ar71xx-generic-tl-wdr4310-v1-squashfs-sysupgrade.bin

  然后登录web界面到 系统--》挂载点 上配置并启用, 注意“高级设置”里的“挂载选项”填 rw,sync,codepage=936,iocharset=cp936 挂载点填 /www/mnt,

  文件系统选 vfat 。

  实际是配置文件:

  cat /etc/config/fstab

  config global ‘automount’

  option from_fstab ‘1’

  option anon_mount ‘1’

  config global ‘autoswap’

  option from_fstab ‘1’

  option anon_swap ‘0’

  config swap

  option device ‘/dev/sda2’

  option enabled ‘0’

  config mount

  option device ‘/dev/sda1’

  option target ‘/www/mnt’

  option enabled_fsck ‘1’

  option enabled ‘1’

  option fstype ‘vfat’

  -------------------------------------------- end ---------------------------------------------------------

  cat /etc/fstab ## 查看是否自动生效了

  mount ## 查看是否mount上

  注意 插入U盘 自

  动挂载时会创建 /www/mnt目录的 (如果该挂载点不存在的话)

  -- 挂载USB盘支持中文

  scp nls_cp936.ko root@192.168.123.1:/lib/modules/3.7.9/ ##

  insmod nls_cp936.ko

  reboot 重启路由

  mount -t vfat -o codepage=936,iocharset=cp936 /dev/sda1 /www/mnt

  vi /etc/modules.d/25-nls-cp437

  ls /etc/modules-boot.d/ ##在系统启动后按序号的顺序来 insmod 这些模块

  因为上面是没有支持内核模块 nls-cp936, see “-- 将nls_cp936添加到 Kernel modules中”, 将它支持进去。

  -- 将nls_cp936添加到 Kernel modules中

  在上文支持文件系统的本地语言中,我们在 make menuconfig 的Kernel modules —》 Native Language Support —》 并没有找到 nls_cp936, 只有nls_cp437,

  而在 make kernel_menuconfig 中的File systems ---》 《M》 Native language support ---》 是有936这个内核模块的, 所以我们怎样把它添加到

  Kernel modules 中呢, 参考 nls.mk 中的 nls-437,

  在nls.mk中增加:

  define KernelPackage/nls-cp936

  SUBMENU:=Native Language Support

  TITLE:=Simplified Chinese charset (CP936, GB2312)

  KCONFIG:=CONFIG_NLS_CODEPAGE_936

  FILES:=$(LINUX_DIR)/fs/nls/nls_cp936.ko

  AUTOLOAD:=$(call AutoLoad,25,nls_cp936)

  $(call AddDepends/nls)

  endef

  define KernelPackage/nls-cp936/description

  Kernel module for NLS Codepage 936 (CP936, GB2312)

  endef

  $(eval $(call KernelPackage,nls-cp936))

  ----------------------------------------------- end -------------------------------------------------

  退出保存。

  cd ~/work/openwrt/trunk

  make kernel_menuconfig

  File systems ---》 《 》 Native language support ##不选这个 (因为我上面选了它)

  make menuconfig

  Kernel modules ---》 Native Language Support ---》 《*》 kmod-nls-cp936.。。。。。。。。。。。。。。。 Simplified Chinese charset (CP936, GB2312)

  保存退出。

  make V=99

  ls bin/ar71xx/packages/*nls*

  kmod-nls-cp936_3.7.9-1_ar71xx.ipk

  然后web界面上升级 bin/ar71xx/openwrt-ar71xx-generic-tl-wdr4310-v1-squashfs-sysupgrade.bin

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分