null第三部分 Linux文件系统第三部分 Linux文件系统第一章 Linux文件系统简介第一章 Linux文件系统简介基本概念基本概念文件系统建立在块设备之上
一个物理存储设备可以划分为一个或多个分区
每个分区可以包含一个完整的文件系统
fdisk分区程序文件系统格式化和挂载文件系统格式化和挂载以ext2文件系统为例:
格式化命令mke2fs
如
mke2fs /dev/sda1
挂载命令mount
如
mount -t ext2 /dev/sda1 /mnt 主要的文件系统类型(1)-ext3主要的文件系统类型(1)-ext3对ext2的扩展,主要增加了日志功能
日志是对文件系统变化的记录
在系统意外关闭时,可以从日志记录恢复文件系统
避免耗时的文件系统连续性检查
兼容ext2主要的文件系统类型(2)-ReiserFS主要的文件系统类型(2)-ReiserFS与ext3类似,都是日志型的文件系统
提供API,实现高性能的原子文件系统操作
Reiser4主要的文件系统类型(3)-JFFS2主要的文件系统类型(3)-JFFS2主要用于NOR Flash
Flash的特性
-Flash擦写效率低(需要整块擦除),且掉电时容易造成数据损坏
-Flash有预定的擦写寿命(10万次),多次擦写同一位置容易过早使Flash失效
JFFS2针对Flash的实现
-日志型文件系统
-采取损耗平衡技术,每次写入时都会尽量使写入的位置均匀分布
制作工具mkfs.jffs2
内核需要支持JFFS2
主要的文件系统类型(4)-cramfs主要的文件系统类型(4)-cramfs用于ROM的文件系统,只读
压缩存储
制作工具mkcramfs
挂载
如
mount -o loop cramfs.image /mnt主要的文件系统类型(5)-NFS主要的文件系统类型(5)-NFS文件系统目录存在于NFS服务器上,客户端将该文件系统挂载到本地的目录上
挂载
mount -t nfs 192.168.10.9:/home/user /mnt
适合于嵌入式程序的开发和调试
将NFS作为根文件系统
-内核配置项
NFS file system support
Root file system on NFS
通过Bootloader传递内核参数
主要的文件系统类型(6)-procfs主要的文件系统类型(6)-procfs提供正在运行的系统信息、内核信息等
挂载
mount -t proc none /proc
每个运行的进程都有对应的以PID命名的目录项,目录中包含cmdline(命令行),maps(内存映射)等进程运行时信息
一些系统工具从proc文件系统中读取信息,如ps,top,free,uptime,monut等
主要的文件系统类型(7)-sysfs主要的文件系统类型(7)-sysfs包含系统中的设备和驱动程序的信息
挂载
mount -t sysfs none /sys
systool工具(将sysfs下的设备信息以可读性较好的方式显示)主要的文件系统类型(8)-ramfs,tmpfs主要的文件系统类型(8)-ramfs,tmpfs内存中的文件系统,数据在掉电或重启后丢失
可以根据需要改变大小
挂载
mount -t tmpfs none /tmp
可用于保存系统运行时的临时数据文件等,重启后自动清空
主要的文件系统类型(9)-YAFFS主要的文件系统类型(9)-YAFFS主要用于NAND Flash
YFFS2针对Flash的实现
-日志型文件系统
-采取损耗平衡技术,每次写入时都会尽量使写入的位置均匀分布
制作工具mkyaffsimage
需要内核支持
第二章 MTD子系统第二章 MTD子系统什么是MTD什么是MTD内存技术设备(Memory Technology Device)
将底层设备的复杂性同上层数据的组织和存储分离
启用MTD启用MTD内核配置选项
CONFIG_MTD
CONFIG_MTD_CHAR
CONFIG_MTD_BLOCK
CONFIG_MTD_MTDRAM
CONFIG_MTD_TOTAL_SIZE
CONFIG_MTD_ERASE_SIZEMTD设备使用 MTD设备使用 MTD RAM驱动加载
insmod MTDblock
insmod MTDram
JFFS2文件系统的烧写和加载
insmod jffs2
dd if=jffs2.bin of=/dev/MTDblock0
mkdir /mnt/flash
mount -t jffs2 /dev/MTDblock0 /mnt/flash
ls -l /mnt/flash
保存修改
dd if=/dev/MTDblock0 of=./new_jffs2.binMTD的配置(1)MTD的配置(1)设备板flash配置MTD步骤
-指定分区
-指定flash的类型和位置
-配置flash驱动
-配置内核驱动MTD的配置(2)MTD的配置(2)指定flash分区
内核配置选项
-MTD partitioning support
传递分区信息给内核的三种方式
-Redboot分区
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
解析
-内核命令行参数传递
mtdparts=MainFlash:384K(Redboot),4K(config),128K(FIS),-(unused)
-映射驱动程序
drivers/MTD/maps/
显示分区信息
cat /proc/mtd
MTD的配置(3)MTD的配置(3)flash驱动程序
-CFI(通用闪存接口,Common Flash Interface)或JEDEC接口标准,可以检测制造商、类型、容量、块大小等flash信息
-内核配置选项
RAM/ROM/Flash chip drivers
-flash驱动目录drivers/MTD/chips/MTD的配置(4)MTD的配置(4)flash的初始化
主要数据结构:
struct platform_device
struct resource
struct platform_data
flash设备注册
platform_add_devices()第三章 Busybox第三章 BusyboxBusybox简介Busybox简介提供命令行程序,“嵌入式Linux的瑞士军刀”
小巧高效,适合资源受限的嵌入式平台
模块化、可配置、裁剪,配置过程和内核相似
支持部分常用的命令选项
命令行程序包含在一个可执行文件中,通过软链接建立各个单独的命令Busybox的使用Busybox的使用解压缩源码包
make menuconfig
-Build Options选项中可以选择静态链接(static)或动态链接,以及是否使用交叉编译
-选择其他需要的命令行工具
make CROSS_COMPILE=arm-unknown-linux-gnu-
-编译完成后在源码的根目录下生成busybox可执行文件Busybox的操作Busybox的操作可以直接执行,如
#busybox(列出当前支持的所有命令)
#busybox ls(执行ls命令)
通过软链接执行,如
#ln -s busybox ls
#ls
busybox会通过判断argv[0]参数来决定执行哪个命令
Busybox的init程序Busybox的init程序内核加载根文件系统后查找init程序(如/sbin/init、/bin/init等)或内核命令行参数中指定的“init=”选项
init程序解析/etc/inittab文件,其中指定了系统启动时应执行的初始化脚本和其他配置
Busybox的init程序具有同样的功能,如/etc/inittab不存在,使用默认的inittab
通常Busybox的init程序执行的初始化脚本是/etc/init.d/rcSBusybox的安装Busybox的安装安装即创建符号链接,之后不需要每次输入命令时都要输入busybox
make CONFIG_PREFIX=“目标目录” install
-将busybox可执行程序和符号链接安装到目标目录下,如嵌入式linux设备上的根文件系统的/bin目录,只安装当前busybox配置中支持的命令
也可以在运行时执行
busybox –install –s
(需要先加载proc文件系统)课后练习:NFS根文件系统配置课后练习:NFS根文件系统配置服务器的配置
-软件包安装
nfs-kernel-server
nfs-common
portmap
-目录导出
/etc/exports配置文件
-启动服务
/etc/init.d/nfs-kernel-server start
客户端(设备端)配置
-内核配置项
nfs client support
root filesystem on nfs
-启动时内核参数设置
root=/dev/nfs rw nfsroot=192.168.1.1:/home/study/rootfsnogui ip=192.168.1.8:192.168.1.1:192.168.1.1:255.255.255.0:study:eth0:off第四章 常用开发工具介绍第四章 常用开发工具介绍调试工具调试工具gdb
用于调试应用程序的命令行工具
具有完善的调试功能,如设置断点、查看或监视变量的值、单步运行、堆栈回溯、查看源代等
如需使用gdb调试,应用程序使用gcc编译时需加上-g选项
调试开发板的程序需要交叉调试工具,如arm-linux-gdb,也就是标准gdb的ARM版本,交叉调试工具运行在主机平台,可以通过串口或网口调试远端开发板上运行的程序
图形界面(DDD)代码浏览工具代码浏览工具cscope
可以查看代码中函数的调用关系,如查找该函数在何处被调用,或者查找变量在何处被引用,类似Source Insight
使用前需要先生成数据库,内核代码的Makefile支持该数据库的生成,可以直接在代码的根目录下执行make cscope
图形前端(KDE环境下的kscope)
ctags
可以在查看代码时跳转到函数、变量、宏等的定义处
使用前使用ctags命令生成交叉引用数据库,同样,内核代码的Makefile支持该数据库的生成,可以直接在代码的根目录下执行make ctags
在vi编辑器环境下可以使用这两个插件,定制类似Source Insight的代码浏览工具追踪和
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
工具追踪和分析工具strace
查看程序运行时使用的系统调用,包括系统调用的参数和返回值等,可以用来检查系统调用执行的正确性,如文件打开是否成功等
ltrace
查看程序运行时使用的库函数,如标准C库调用,包括参数和返回值等正确性,可以用来检查库函数执行的正确性
对于开发板运行的应用程序,需要使用这两个工具的ARM版本,且需要在开发板上运行(可使用NFS)其他二进制工具其他二进制工具readelf
查看ELF格式可执行程序的组成(ELF头、各种段、调试信息等)
objdump
可以查看可执行程序的反汇编代码
objcopy
可以转换各种二进制格式,如将ELF格式转成BIN格式(不带文件头),如
Arm-linux-objcopy -O binary u-boot u-boot.bin
strip
用于删除目标代码中无用的段,如符号表、调试信息等,从而减小目标文件的大小
通常在目标代码调试通过后执行(因为调试时需要使用符号表和调试信息)
strings
显示二进制文件中的字符串
ldd
显示目标文件所链接的动态库(.so)
nm
显示目标文件中的符号,如函数名、变量名等,可以用来帮助解决未解析的符号(unresolved symbol)之类的错误