410 likes | 635 Views
嵌入式文件系统. 陈文智 wzchen@cad.zju.edu.cn 浙江大学计算机学院 2005 年 4 月. 提纲. 1 、嵌入式 Linux 文件系统简介 2 、 Linux 文件系统框架和特性 3 、嵌入式文件系统实验 实验一:建立文件系统 实验二: NFS 文件系统实验 实验三: Samba 介绍与应用. 1. 嵌入式 Linux 文件系统简介. 嵌入式文件系统与桌面文件系统有较大区别 : 嵌入式文件系统要为嵌入式系统的设计目的服务,不同用途的嵌入式操作系统下的文件系统在许多方面各不相同。
E N D
嵌入式文件系统 陈文智 wzchen@cad.zju.edu.cn 浙江大学计算机学院 2005年4月
提纲 • 1、嵌入式Linux文件系统简介 • 2、Linux文件系统框架和特性 • 3、嵌入式文件系统实验 • 实验一:建立文件系统 • 实验二:NFS文件系统实验 • 实验三:Samba介绍与应用
1. 嵌入式Linux文件系统简介 • 嵌入式文件系统与桌面文件系统有较大区别 :嵌入式文件系统要为嵌入式系统的设计目的服务,不同用途的嵌入式操作系统下的文件系统在许多方面各不相同。 • 嵌入式Linux常用文件系统:第二版扩展文件系统(Ext2fs)、JFFS和YAFFS
1.1嵌入式文件系统的设计目标 • 嵌入式文件系统的设计目标包括: • 使用简单方便 • 安全可靠 • 实时响应 • 接口标注的开放性和可移植性 • 可伸缩性和可配置性 • 开放的体系结构 • 资源有效性 • 功能完整性 • 热插拔 • 支持多种文件类型
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等
第二版扩展文件系统(Ext2fs)的优点 • Ext2fs支持达4 TB的内存(Ext是2G)。 • Ext2fs文件名称最长可以到1012个字符。 • 当创建文件系统时,管理员可以选择逻辑块的大小(通常大小可选择 1024、2048和4096字节)。 • Ext2fs实现快速符号链接:不需要为此目的而分配数据块,并且将目标名称直接存储在索引节点表中,这使性能有所提高,特别是在速度上。
JFFS和YAFFS • JFFS文件系统主要针对NOR FLASH设计,是一种基于Flash的日志文件系统。 • JFFS2的底层驱动主要完成文件系统对Flash芯片的访问控制,如读、写、擦除操作。 • YAFFS主要针对NAND FLASH设计,和JFFS相比它减少了一些功能。自带NAND芯片驱动,并且为嵌入式系统提供了直接访问文件系统的API。 • YAFFS2是YAFFS的改进版本。
2. Linux文件系统框架和特性 • 现代操作系统都提供多种访问存储设备的方法 • Linux文件系统有两条独立控制设备驱动的途径 : • 通过设备驱动的接口 • 通过文件管理器接口
3. 文件系统实验 • 实验一 建立文件系统 • 建立JFFS2文件系统 • 建立RAMFS文件系统 • 实验二 NFS文件系统实验 • 实验三 Samba介绍与应用
实验一:建立文件系统JFFS2(1) • JFFS2在Linux中有两种使用方式 : • 作为根文件系统 • 作为普通文件系统在系统启动后被挂载 • 目录采用Ramfs,当系统断电后,该目录所有的数据都会丢失。 • Linux下常用文件系统结构 :
实验一:建立文件系统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
实验一:建立文件系统JFFS2(3) • 2)JFFS2映像生成 • Jffs2 image通过 mkfs.jffs2 工具创建成 image • mkfs.jffs2 用法:-e 选项确定闪存的擦除扇区大小(通常是64K)。-p 选项用来在映像的剩余空间用零填充。-o 选项用于输出文件,这里是rootfs.img • 利用bootloader将生成的 rootfs.img下载后写入flash • 再次重起开发板,内核就能加载JFFS2作为根文件系统
实验一:建立文件系统RAMFS(1) • RAMFS是内存文件系统,它工作于虚拟文件系统(VFS)层 • RAMFS是一个非常巧妙的,利用VFS自身结构而形成的内存文件系统
实验一:建立文件系统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可用作根文件系统。
实验一:建立文件系统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”。用于重新引导系统。
实验二 NFS文件系统实验 (1) • NFS是用于在不同机器,不同操作系统之间通过网络互相分享文件 的 • 建立NFS开发环境的工作分为两个方面:配置NFS服务器和配置客户端 • 基本的命令格式 • Mount的基本命令格式如下: • Umount的基本命令格式:
实验二 NFS文件系统实验 (2) • 配置NFS服务端 • 在 Host PC上打开 /etc/exports 文件,并进行如下设置 : • 把/mnt/nfs设置完成后重新开始NFS deamon
实验二 NFS文件系统实验(3) • 配置NFS客户端 • NFS客户端是开发板,所以要让开发板上的内核支持NFS,必须重新配置内核生成zImage镜像文件,并下载到板子上。 • 通过 make menuconfig 指令在kernel设置窗进行NFS设置 • menuconfig 窗口打开后,确认NFS设置是否被选上 • 重新编译内核,新的内核下就可以使用nfs命令了
实验二 NFS文件系统实验(4) • 挂载NFS文件系统 • 开发板上进行mount操作,把PC上的某个目录挂载上来: 把Host PC的/mnt/nfs目录mount到开发板的/mnt目录下使用。Ip 192.168.1.1是PC的ip。 • 接下来就可以在新mount上来的目录下做各种操作,挂载工作完成
实验二 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服务
实验二 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,生成新的镜像
2)配置服务端PC • /tftpboot目录下新增子目录pxa255,用作新的根文件系统 • 把原文件系统下的文件拷贝到/tftpboot/pxa255中 • 重新编辑/etc/exports文件如下: • 重新启动NFS服务
3)重起开发板,使用tftp协议加载新的内核镜像, 系统启动后,使用boot命令直接引导 • 4)确认新的根目录是否是PC端的/tftpboot/pxa255目录
实验三 Samba介绍与应用 • Samba介绍 • Samba是一组软件包,使Linux支持SMB(服务消息块)协议,该协议由TCP/IP实现,它是windows网络文件和打印共享基础 • samba的核心是两个守护进程smbd和nmbd程序,在服务器启动到停止期间持续运行。Smbd进程的作用是处理到来的SMB软件包,为使用该软件包的资源与Linux进行协商,nmbd进程使其它主机(或工作站)能浏览Linux服务器。 • 一个完整的smb.conf一般由Global settings和share Definitions两部分组成
思考:使用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默认的编译配置以移除不想使用的命令的支持。
samba的启动与停止 • 在缺省情况下,Red Hat Linux的samba在启动时就已投入运行 • 也可利用系统脚本来手工启动和停止samba • # /etc/rc.d/init.d/smb start (启动samba) • # /etc/rc.d/init.d/smb stop (停止samba)
定制samba(1) • 定制samba • 用户通过对smb.conf文件进行vi编辑,可以添加、删除及修改smba提供的多种服务。 • 向用户开放 Linux文件资源,只有读权限。 • [public] • comment=public stuff • path = / • public = yes • writable = no • printale = no • write list = @staff
定制samba(2) • 共享CD-ROM • 修改smb.conf之前,先安装光驱,可执行下列命令: • # mount - t iso9660 /dev/cdrom /mnt/cdrom • 然后定制samba,内容如下: • [cdrom] • path = /mnt/cdrom • ready only = yes • public= yes
定制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 (允许打印)
定制samba(4) • 向用户开放/dev目录,浏览设备类型。 • [dev] • comment = open and browse the /dev directory • path = /dev (路径为/dev) • ready only = yes (只读) • public = yes (共享)
Samba实验(1) • 编译Samba • 解压samba-3.0.0.tar.gz压缩包 • 设置环境变量:
Samba实验(2) • 运行configure • 修改include/config.h文件,添加 • #define HAVE_GETTIMEOFDAY_TZ 1 • 运行make生成可执行文件
Samba实验(3) • 将Samba应用到开发板 • 在将要烧到flash的文件系统下创建以下目录: • /usr/local/samba • /usr/local/samba/bin • /usr/local/samba/var • /usr/local/samba/private • /usr/local/samba/lib
Samba实验(4) • 将编译后的samba源码目录下的bin/子目录里的内容拷贝到/usr/local/samba/bin • 配置smb.conf ,添加、删除及修改smba提供的多种服务 • 用smbpasswd -a username 添加一个samba用户,并生成samba密码文件smbpasswd • 运行samba守护进程