1 / 41

嵌入式文件系统

嵌入式文件系统. 陈文智 wzchen@cad.zju.edu.cn 浙江大学计算机学院 2005 年 4 月. 提纲. 1 、嵌入式 Linux 文件系统简介 2 、 Linux 文件系统框架和特性 3 、嵌入式文件系统实验 实验一:建立文件系统 实验二: NFS 文件系统实验 实验三: Samba 介绍与应用. 1. 嵌入式 Linux 文件系统简介. 嵌入式文件系统与桌面文件系统有较大区别 : 嵌入式文件系统要为嵌入式系统的设计目的服务,不同用途的嵌入式操作系统下的文件系统在许多方面各不相同。

niles
Download Presentation

嵌入式文件系统

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 嵌入式文件系统 陈文智 wzchen@cad.zju.edu.cn 浙江大学计算机学院 2005年4月

  2. 提纲 • 1、嵌入式Linux文件系统简介 • 2、Linux文件系统框架和特性 • 3、嵌入式文件系统实验 • 实验一:建立文件系统 • 实验二:NFS文件系统实验 • 实验三:Samba介绍与应用

  3. 1. 嵌入式Linux文件系统简介 • 嵌入式文件系统与桌面文件系统有较大区别 :嵌入式文件系统要为嵌入式系统的设计目的服务,不同用途的嵌入式操作系统下的文件系统在许多方面各不相同。 • 嵌入式Linux常用文件系统:第二版扩展文件系统(Ext2fs)、JFFS和YAFFS

  4. 1.1嵌入式文件系统的设计目标 • 嵌入式文件系统的设计目标包括: • 使用简单方便 • 安全可靠 • 实时响应 • 接口标注的开放性和可移植性 • 可伸缩性和可配置性 • 开放的体系结构 • 资源有效性 • 功能完整性 • 热插拔 • 支持多种文件类型

  5. 1.2 嵌入式Linux常用文件系统 • Flash Memory简介 • Flash Memory上的两种技术 • NAND:串行;顺序读取;适合大容量;通常需MTD • NOR:并行;随机读取;适合数据或程序存储;XIP; • Xsbase开发平台上所使用的闪存 • Intel StrataFlash Memory 28F128J3A • Ext2fs 、JFFS和YAFFS • ext、 ext2、xia、vfat、minix、msdos、umsdos、 proc、smb、ncp、iso9660、sysv、hpfs、affs、ufs、vfs等

  6. 第二版扩展文件系统(Ext2fs)的优点 • Ext2fs支持达4 TB的内存(Ext是2G)。 • Ext2fs文件名称最长可以到1012个字符。 • 当创建文件系统时,管理员可以选择逻辑块的大小(通常大小可选择 1024、2048和4096字节)。 • Ext2fs实现快速符号链接:不需要为此目的而分配数据块,并且将目标名称直接存储在索引节点表中,这使性能有所提高,特别是在速度上。

  7. JFFS和YAFFS • JFFS文件系统主要针对NOR FLASH设计,是一种基于Flash的日志文件系统。 • JFFS2的底层驱动主要完成文件系统对Flash芯片的访问控制,如读、写、擦除操作。 • YAFFS主要针对NAND FLASH设计,和JFFS相比它减少了一些功能。自带NAND芯片驱动,并且为嵌入式系统提供了直接访问文件系统的API。 • YAFFS2是YAFFS的改进版本。

  8. 2. Linux文件系统框架和特性 • 现代操作系统都提供多种访问存储设备的方法 • Linux文件系统有两条独立控制设备驱动的途径 : • 通过设备驱动的接口 • 通过文件管理器接口

  9. Linux文件系统框架

  10. 3. 文件系统实验 • 实验一 建立文件系统 • 建立JFFS2文件系统 • 建立RAMFS文件系统 • 实验二 NFS文件系统实验 • 实验三 Samba介绍与应用

  11. 实验一:建立文件系统JFFS2(1) • JFFS2在Linux中有两种使用方式 : • 作为根文件系统 • 作为普通文件系统在系统启动后被挂载 • 目录采用Ramfs,当系统断电后,该目录所有的数据都会丢失。 • Linux下常用文件系统结构 :

  12. 实验一:建立文件系统JFFS2(2) • 1)内核配置 • General Setup项设成 “root=1f03 rw console=ttyS0,115200 init=/linuxrc” • 通过MTD驱动在menuconfig中调用flash memory设备驱动 • 选择 CFI Flash device mapped on the XSBASE255 PXA255 board

  13. 实验一:建立文件系统JFFS2(3) • 2)JFFS2映像生成 • Jffs2 image通过 mkfs.jffs2 工具创建成 image • mkfs.jffs2 用法:-e 选项确定闪存的擦除扇区大小(通常是64K)。-p 选项用来在映像的剩余空间用零填充。-o 选项用于输出文件,这里是rootfs.img • 利用bootloader将生成的 rootfs.img下载后写入flash • 再次重起开发板,内核就能加载JFFS2作为根文件系统

  14. 实验一:建立文件系统RAMFS(1) • RAMFS是内存文件系统,它工作于虚拟文件系统(VFS)层 • RAMFS是一个非常巧妙的,利用VFS自身结构而形成的内存文件系统

  15. 实验一:建立文件系统RAMFS(2) • 1)使用主机的loopback设备来实现loopback文件系统 • 用dd if=/dev/zero of=ramdisk_img bs=1k count=8192 指令创建一个连续的8M大小的空间 • 将此空间用 mke2fs格式化 • 为了对格式化的空间进行mount, 创建一个目录/tmp • 在tmp目录里复制或创建设置文件, util, library等 • 将工作目录进行umount,再用gzip压缩,则生成 ramdisk_img.gz文件 • 将此加载到 bootloader,则新的ramdisk可用作根文件系统。

  16. 实验一:建立文件系统RAMFS(3) • 修改一些内核配置 • XSBase255中 setup_initrd()的 0xA1000000 成为 SDRAM 的 ramdisk 地址 ,ramdisk 要下载到Bootloader中的这个地址 • CONFIG_BLK_DEV_RAM_SIZE是 menuconfig中设定的 “Default RAM disk size” 大小 • 修改Default Kernel command string为:“root=/dev/ram rw console=ttyS0,115200 init=/linuxrc”。用于重新引导系统。

  17. 实验二 NFS文件系统实验 (1) • NFS是用于在不同机器,不同操作系统之间通过网络互相分享文件 的 • 建立NFS开发环境的工作分为两个方面:配置NFS服务器和配置客户端 • 基本的命令格式 • Mount的基本命令格式如下: • Umount的基本命令格式:

  18. 实验二 NFS文件系统实验 (2) • 配置NFS服务端 • 在 Host PC上打开 /etc/exports 文件,并进行如下设置 : • 把/mnt/nfs设置完成后重新开始NFS deamon

  19. 实验二 NFS文件系统实验(3) • 配置NFS客户端 • NFS客户端是开发板,所以要让开发板上的内核支持NFS,必须重新配置内核生成zImage镜像文件,并下载到板子上。 • 通过 make menuconfig 指令在kernel设置窗进行NFS设置 • menuconfig 窗口打开后,确认NFS设置是否被选上 • 重新编译内核,新的内核下就可以使用nfs命令了

  20. 实验二 NFS文件系统实验(4) • 挂载NFS文件系统 • 开发板上进行mount操作,把PC上的某个目录挂载上来: 把Host PC的/mnt/nfs目录mount到开发板的/mnt目录下使用。Ip 192.168.1.1是PC的ip。 • 接下来就可以在新mount上来的目录下做各种操作,挂载工作完成

  21. 实验二 NFS文件系统实验(5) • 如果出现没法mount上去的情况,可以按照以下步骤进行检查: • 用 rpcinfo -p server_name 去查看此server是否存在 • 用 rpcinfo -u server_name mount 查看mountd daemon 是否有在server上执行 • 假如server 都没问题,检查 server 和 client 之间的网线连接 • 在client上用ps ax 查看portmap和对应的NFS daemons是否运行 • 打开服务端PC上的/var/lib/nfs/rmtab文件,清空内容 • 重起NFS服务

  22. 实验二 NFS文件系统实验(6) • 加载NFS为根文件系统 • 1)重新配置内核 • 在General setup里面重新设置Default kernel command string的值 • 在Network File Systems选项中需要选中“Root file system on NFS” • 在Block devices选项中把“RAM disk support”选项去除,选中“Network block device support” • 配置完内核,重新make zImage,生成新的镜像

  23. 2)配置服务端PC • /tftpboot目录下新增子目录pxa255,用作新的根文件系统 • 把原文件系统下的文件拷贝到/tftpboot/pxa255中 • 重新编辑/etc/exports文件如下: • 重新启动NFS服务

  24. 3)重起开发板,使用tftp协议加载新的内核镜像, 系统启动后,使用boot命令直接引导 • 4)确认新的根目录是否是PC端的/tftpboot/pxa255目录

  25. 实验三 Samba介绍与应用 • Samba介绍 • Samba是一组软件包,使Linux支持SMB(服务消息块)协议,该协议由TCP/IP实现,它是windows网络文件和打印共享基础 • samba的核心是两个守护进程smbd和nmbd程序,在服务器启动到停止期间持续运行。Smbd进程的作用是处理到来的SMB软件包,为使用该软件包的资源与Linux进行协商,nmbd进程使其它主机(或工作站)能浏览Linux服务器。 • 一个完整的smb.conf一般由Global settings和share Definitions两部分组成

  26. 思考:使用BusyBox构建根文件系统 • Busybox 是 Debian GNU/Linux 的大名鼎鼎的 Bruce Perens 首先开发,。后来又有许多 Debian developers 贡献力量,这其中尤推 busybox 目前的维护者 Erik Andersen,他患有癌症,可却是一名优秀的自由软件开发者。Busybox包括一个迷你的 vi 编辑器,系统不可或缺的 /sbin/init 程序,以及其他诸如 sed, ifconfig, halt, reboot, mkdir, mount, ln, ls, echo, cat ... 等等,大小也不过 100K 左右。而且,用户还可以根据自己的需要,决定到底要在 busybox 中编译进哪几个应用程序的功能。busybox 的体积可以进一步缩小。BusyBox支持多种体系结构,可以静态或动态链接glic或者uclibc库,以满足不同的需要,也可以修改BusyBox默认的编译配置以移除不想使用的命令的支持。

  27. samba的启动与停止 • 在缺省情况下,Red Hat Linux的samba在启动时就已投入运行 • 也可利用系统脚本来手工启动和停止samba • # /etc/rc.d/init.d/smb start (启动samba) • # /etc/rc.d/init.d/smb stop (停止samba)

  28. 定制samba(1) • 定制samba • 用户通过对smb.conf文件进行vi编辑,可以添加、删除及修改smba提供的多种服务。 • 向用户开放 Linux文件资源,只有读权限。 • [public] • comment=public stuff • path = / • public = yes • writable = no • printale = no • write list = @staff

  29. 定制samba(2) • 共享CD-ROM • 修改smb.conf之前,先安装光驱,可执行下列命令: • # mount - t iso9660 /dev/cdrom /mnt/cdrom • 然后定制samba,内容如下: • [cdrom] • path = /mnt/cdrom • ready only = yes • public= yes

  30. 定制samba(3) • 为多个用户提供服务 • comment = userl’sstuff,user2’sstuff,user3’sstuff • path = /home/user1 (用户userl的主目录) • valid users = user1 user2 user3 • public = no (除了user1,user2,user3外不向用户开放) • writable = yes (三用户对/home/user1中的文件有写权限) • printable = yes (允许打印)

  31. 定制samba(4) • 向用户开放/dev目录,浏览设备类型。 • [dev] • comment = open and browse the /dev directory • path = /dev (路径为/dev) • ready only = yes (只读) • public = yes (共享)

  32. Samba实验(1) • 编译Samba • 解压samba-3.0.0.tar.gz压缩包 • 设置环境变量:

  33. Samba实验(2) • 运行configure • 修改include/config.h文件,添加 • #define HAVE_GETTIMEOFDAY_TZ 1 • 运行make生成可执行文件

  34. Samba实验(3) • 将Samba应用到开发板 • 在将要烧到flash的文件系统下创建以下目录: • /usr/local/samba • /usr/local/samba/bin • /usr/local/samba/var • /usr/local/samba/private • /usr/local/samba/lib

  35. Samba实验(4) • 将编译后的samba源码目录下的bin/子目录里的内容拷贝到/usr/local/samba/bin • 配置smb.conf ,添加、删除及修改smba提供的多种服务 • 用smbpasswd -a username 添加一个samba用户,并生成samba密码文件smbpasswd • 运行samba守护进程

More Related