android linux 系统总结3

来源:互联网 发布:教务系统数据库 编辑:程序博客网 时间:2024/06/05 23:06
2. 文件系统分析2.1 文件系统概述2.2 ext2 ,ext3 文件系统2.3 jffs,jffs2 文件系统2.4 yafss,yaffs2 文件系统2.5 虚拟文件系统(sysfs,proc,tsmpfs等)2.6 一些必要重要的系统文件 ( /etc/fstab ,inittab,init.rc等)2.7 制作文件系统 2.1 文件系统概述    文件系统(File system)指代贮存在计算机上的文件和目录。文件系统可以有不同的格式,叫做文件系统类型(file system types)。这些格式决定信息是如何被贮存为文件和目录。Linux支持多种文件系统,包括sysfs,proc,tmpfs,ext2,ext3,cramfs,ramfs,nfs,vfat,jffs,jffs2,yaffs,yaffs2等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类文件系统提供一个统一的操作界面和应用编程接口。Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。     不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为 RAM(DRAM, SDRAM)和ROM(常采用FLASH存储器),常用的基于存储设备的文件系统类型包括:jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs等。2.2 ext2 ,ext3 文件系统在异常断电或系统崩溃(又称不洁系统关机,unclean system shutdown)发生时,每个在系统上挂载了的 ext2 文件系统必须要使用 e2fsck  程序来检查其一致性。这是一个很费时的过程,特别是在检查包含大量文件的庞大文件卷时,它会大大耽搁引导时间。在这期间,文件卷上的所有数据都不能被访问。由 ext3 文件系统提供的登记报表方式意味着不洁系统关机后没必要再进行此类文件系统检查。使用 ext3 系统时,一致性检查只在某些罕见的硬件失效(如硬盘驱动器失效)情况下才发生。参考文档:Linux ext2/ext3文件系统详解http://www.blueidea.com/computer/system/2008/5536.aspLinux EXT2文件系统结构分析(详情见附件)http://chenguang.blog.51cto.com/350944/69655Ext2 文件系统的硬盘布局http://www.ibm.com/developerworks/cn/linux/filesystem/ext2/2.3 jffs,jffs2 文件系统jffs2文件系统制作工具mkfs.jffs21.从网上下载:mkjffs2-arm.rar http://blogimg.chinaunix.net/blog/upfile2/080701192924.rarmkjffs2-pc.rar  http://blogimg.chinaunix.net/blog/upfile2/080701193005.rar2.通过源代码获得 mkfs.jffs2源码下载地址: ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-1.0.1.tar.gz编译的过程中缺少 sys/acl.h 文件,ubunt-8.10 通过下面命令安装sudo apt-get install libacl1-dev制作jffs2 文件系统mkfs.jffs2 -r rootfs/ -o rootfs-jffs2.img  -e 0x4000 --pad=0x500000 -s 0x200 -n各参数的意义:(1)-r :指定要做成image的源文件夹.(2)-o : 指定输出image文档的文件名.(3)-e : 每一块要抹除的block size,默认值是64KB.要注意,不同的flash, 其block size会不一样(4)--pad (-p): 用16进制來表示所要输出文档的大小,也就是root.jffs2的size。很重要的是, 为了不浪费flash空间, 這个值最好符合flash driver所规划的分区大小。(5)如果挂载后会出现类似:CLEANMARKER node found at 0x0042c000 has totlen 0xc != normal 0x0  的警告,则加上 -n 就会消失。在pc上mount jffs2 镜像文件首先确保系统支持jffs2文件系统,通过命令  cat /proc/filesystems 查看sudo modprobe mtdramsudo modprobe mtdblock  插入此模块以后将会生成节点:/dev/mtdblock0 sudo modprobe jffs2在一些系统 fedora core 5 ,linux 2.6.15.1上的mtdram只有4.2MB所以最好自己指定。例如:modprobe mtdram total_size=49152 erase_size=128sudo dd if=rootfs-jffs2.img of=/dev/mtdblock0sudo mount -t jffs2 /dev/mtdblock0 /mnt更多参考文档:mkfs.jffs2参数详解http://blog.sina.com.cn/s/blog_4a4163880100cogf.html~type=v5_one&label=rela_prevarticle在linux pc上挂载jffs2文件系http://blog.sina.com.cn/s/blog_4a4163880100cozw.html2.4 yafss,yaffs2 文件系统2.4.1 yaffs2文件系统制作工具 mkyaffs2image2.4.2 在pc上挂载yaffs2文件系统2.4.3 通过工具释放yaffs2 文件系统YAFFS , Yet Another Flash File System ,是一种类似于 JFFS/JFFS2 的专门为 Flash 设计的嵌入式文件系统。与 JFFS 相比,它减少了一些功能,因此速度更快、占用内存更少。 YAFFS 和 JFFS 都提供了写均衡,垃圾收集等底层操作。它们的不同之处在于:1 )、 JFFS 是一种日志文件系统,通过日志机制保证文件系统的稳定性。 YAFFS 仅仅借鉴了日志系统的思想,不提供日志机能,所以稳定性不如 JAFFS ,但是资源占用少。2 )、 JFFS 中使用多级链表管理需要回收的脏块,并且使用系统生成伪随机变量决定要回收的块,通过这种方法能提供较好的写均衡,在 YAFFS 中是从头到尾对块搜索,所以在垃圾收集上 JFFS 的速度慢,但是能延长 NAND 的寿命。3 )、 JFFS 支持文件压缩,适合存储容量较小的系统; YAFFS 不支持压缩,更适合存储容量大的系统。YAFFS 还带有 NAND 芯片驱动,并为嵌入式系统提供了直接访问文件系统的 API ,用户可以不使用 Linux 中的 MTD 和 VFS ,直接对文件进行操作。 NAND Flash 大多采用 MTD+YAFFS 的模式。 MTD ( Memory Technology Devices ,内存技术设备)是对 Flash 操作的接口,提供了一系列的标准函数,将硬件驱动设计和系统程序设计分开。YAFFS2 是 YAFFS 的升级版,能更好的支持 NAND FLASH 。2.4.1 yaffs2文件系统制作工具 mkyaffs2image1. android yaffs2 源代码 external/yaffs2/2. 从网上下载 yaffs2 源码下载:http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/yaffs/下载:http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/yaffs2///点击左下角的 Download tarball 下整个tar包cvs下载:export CVSROOT=:pserver:anonymous@cvs.aleph1.co.uk:/home/aleph1/cvs cvs logoncvs co yaffs2tar -xvf yaffs2.tar.bz;cd yaffs2;make为ubuntu 8.10 添加yaffs文件系统支持sudo mkdir -p /lib/modules/2.6.27-4-generic/kernel/fs/yaffs2sudo cp yaffs2.ko /lib/modules/2.6.27-4-generic/kernel/fs/yaffs2/sudo insmod /lib/modules/2.6.27-4-generic/kernel/fs/yaffs2/yaffs2.ko制作yaffs2文件系统mkyaffs2image  /nfsroot/rootfs/system  system.img/nfsroot/rootfs/system 为文件系统所在的目录  system.img 为生成的镜像文件2.4.2 在pc上挂载yaffs2文件系统sudo mkdir -p /mnt/mtd/yaffs2sudo modprobe mtdblocksudo modprobe mtdram total_size=100000 erase_size=256sudo insmod /lib/modules/2.6.27-4-generic/kernel/fs/yaffs2/yaffs2.kosudo dd if=rootfs.yaffs2  of=/dev/mtdblock0sudo mount -t yaffs2 /dev/mtdblock0 /mnt/mtd/yaffs2#modprobe mtdram total_size=49152 erase_size=128#cat rootfs.yaffs2 >/dev/mtdblock02.4.3 通过工具释放yaffs2 文件系统yaffs2 image逆向工具 http://blog.csdn.net/absurd/archive/2008/11/05/3223825.aspx获取源代码:http://www.limodev.cn/bbs/download/file.php?id=12.5 虚拟文件系统(sysfs,proc,tsmpfs等)2.5.1 虚拟文件系统概述2.5.2 proc 文件系统2.5.3 sysfs文件系统2.5.4 tmpfs文件系统2.5.5 usbdevfs文件系统2.5.6 devpts文件系统2.5.1 虚拟文件系统概述虚拟内核文件系统(Virtual Kernel File Systems),是指那些是由内核产生但并不存在于硬盘上(存在于内存中)的文件系统,他们被用来与内核进行通信前面介绍的ext2,ext3,jffs2,yaffs2等目录和文件,都是真真正正、实实在在的存储在具体的外部存储设备上的,它们可能是在本机的硬盘、闪存、光盘中,可能保存在不只一个磁盘分区中,也可能保存在网络中其它主机的存储设备中的。虚拟文件系统,虽然它们出现在根文件系统中,但它里面的内容却无法在任何外部存储设备中找到,因为它们都在内存中。==========android 网络挂载:rootfs    /         rootfs rw 0 0/dev/root /         nfs rw,vers=2,rsize=1024,wsize=1024,...tmpfs     /dev      tmpfs rw,mode=755 0 0devpts    /dev/pts  devpts rw,mode=600 0 0proc      /proc     proc rw 0 0sysfs     /sys      sysfs rw 0 0tmpfs                   /sqlite_stmt_journals   tmpfs rw,size=4096k 0 0/dev/block/mmcblk0p1    /sdcard                 vfat rw,...===========android 本机挂载(使用flash中的文件系统)rootfs / rootfs ro 0 0tmpfs /dev tmpfs rw,mode=755 0 0devpts /dev/pts devpts rw,mode=600 0 0proc /proc proc rw 0 0sysfs /sys sysfs rw 0 0tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0/dev/block/mtdblock2 /system yaffs2 ro 0 0/dev/block/mtdblock3 /data yaffs2 rw,nosuid,nodev 0 0/dev/block/mmcblk0p1 /sdcard vfat rw=============ubuntu 系统:/dev/sda8 on /             type ext3  (rw,relatime,errors=remount-ro)tmpfs     on /lib/init/rw  type tmpfs (rw,nosuid,mode=0755)/proc     on /proc         type proc  (rw,noexec,nosuid,nodev)sysfs     on /sys          type sysfs (rw,noexec,nosuid,nodev)varrun    on /var/run      type tmpfs (rw,nosuid,mode=0755)tmpfs     on /dev/shm      type tmpfs (rw,nosuid,nodev)devpts    on /dev/pts      type devpts (rw,noexec,nosuid,gid=5,mode=620)/dev/sda7  on /boot type ext3 (rw,relatime)/dev/sda11 on /home type ext3 (rw,relatime)/dev/sdb5  on /opt type ext3 (rw,relatime)/dev/sda9  on /usr/local type ext3 (rw,relatime)/dev/sda1  on /windows/c type vfat (rw,utf8,umask=007,gid=1000)/dev/sda5  on /windows/d type vfat (rw,utf8,umask=007,gid=1000)/dev/sda6  on /windows/e type vfat (rw,utf8,umask=007,gid=1000)===============2.5.2 proc 文件系统proc是一个重要虚拟文件系统,通过它里面的一些文件,可以获取系统状态信息并修改某些系统的配置信息。proc文件系统本身不占用磁盘空间,它仅存在于内存之中,为操作系统本身和应用程序之间的通信提供了一个安全的接口。当我们在内核中添加了新功能或设备驱动时,经常需要得到一些系统状态的信息,一般这样的功能可能需要经过一些象ioctl()这样的系统调用来完成。系统调用接口对于一些功能性的信息可能是适合的,因为应用程序必须将这些信息读出后再做一定的处理。但对于一些实时性的系统信息,例如内存的使用状况,或者是驱动设备的统计资料等,我们更需要一个比较简单易用的接口来取得它们。proc文件系统就是这样的一个接口,我们可以简单的用cat、strings程序来查看这些信息。例如,执行下面的命令:cat /proc/filesystems    //操作系统支持的文件系统类型cat /proc/meminfo        //内存的实时信息,内存大小等cat /proc/partitions     //存储器分区信息cat /proc/cpuinfo        //查看cpu信息同样的,free、df、top、ps等程序的功能实现,强烈依赖于proc文件系统,为了使用那些程序,一定要使内核支持proc文件系统,并将其挂接到根文件系统的/proc目录下。其他使用 /proc 文件系统的例子:processor: 0vendor_id: AuthenticAMDprocessor: 1vendor_id: AuthenticAMDmodel name: AMD Athlon(tm) 64 X2 Dual Core CPU 5000+1.vmware 虚拟机无法正常启动在Linux下,单个进程的最大内存使用量受/proc/sys/kernel/shmmax中设置的数字限制(单位为字节),例如 ubuntu 8.10 的shmmax默认值为33554432字节(33554432bytes/1024/1024=32MB)。2.scratchbox 开发工具不能登录/scratchbox/login Inconsistency detected by ld.so: rtld.c: 1192: dl_main: Assertion `(void *) ph->p_vaddr == _rtld_local._dl_sysinfo_dso' failed!NOTE: on Ubuntu installation, you have to disable VDSO to make Scratchbox work fine, or you'll get errors like this:在 ubuntu 系统中,我们必须关闭 VDSO 标记,以便scratchbox能正常工作echo 0 | sudo tee /proc/sys/vm/vdso_enabledecho 4096 | sudo tee /proc/sys/vm/mmap_min_addrvm.vdso_enabled = 0vm.mmap_min_addr = 4096修改 /proc 文件系统值的方法1.直接修改echo "2147483648" | sudo tee /proc/sys/kernel/shmmaxecho 0 | sudo tee /proc/sys/vm/vdso_enabledecho 4096 | sudo tee /proc/sys/vm/mmap_min_addr2.将以下命令放入 /etc/rc.local 启动文件中:echo "2147483648" > /proc/sys/kernel/shmmaxecho 0            > /proc/sys/vm/vdso_enabledecho 4096         > /proc/sys/vm/mmap_min_addr3.使用 sysctl 命令来更改 SHMMAX 的值:sysctl -w kernel.shmmax=21474836484.内核参数插入到 /etc/sysctl.conf 启动文件中,使这种更改永久有效echo "kernel.shmmax=2147483648" >> /etc/sysctl.conf sudo sysctl –p./system/core/logcat/logcat.cpp:403:   fd = open("/proc/cmdline", O_RDONLY);./system/core/init/init.c:553:    char cmdline[1024];./system/core/init/init.c:557:    fd = open("/proc/cmdline", O_RDONLY);./system/core/init/init.c:580:    chmod("/proc/cmdline", 0440);./system/core/init/bootchart.c:139:   proc_read("/proc/cmdline", cmdline, sizeof(cmdline));./system/core/init/bootchart.c:319:   proc_read( "/proc/cmdline", cmdline, sizeof(cmdline) );./system/core/init/bootchart.c:320:   s = strstr(cmdline, KERNEL_OPTION);./system/core/rootdir/init.rc:162:    chown root radio /proc/cmdline2.5.3 sysfs文件系统与proc文件系统类似,sysfs文件系统也是一个不占有任何磁盘空间的虚拟文件系统。它通常被挂接在/sys目录下。sysfs文件系统是Linux2.6内核引入的,它把连接在系统上的设备和总线组织成为一个分级的文件,使得它们可以在用户空间存取。其实sysfs是从proc和devfs中划分出来的。一、devfs   linux下有专门的文件系统用来对设备进行管理,devfs和sysfs就是其中两种。在2.6内核以前一直使用的是devfs,devfs挂载于/dev目录下,提供了一种类似于文件的方法来管理位于/dev目录下的所有设备,我们知道 /dev目录下的每一个文件都对应的是一个设备,至于当前该设备存在与否先且不论,而且这些特殊文件是位于根文件系统上的,在制作文件系统的时候我们就已经建立了这些设备文件,因此通过操作这些特殊文件,可以实现与内核进行交互。但是devfs文件系统有一些缺点,例如:不确定的设备映射,有时一个设备映射的设备文件可能不同,例如我的U盘可能对应sda有可能对应sdb;没有足够的主/辅设备号,当设备过多的时候,显然这会成为一个问题;/dev目录下文件太多而且不能表示当前系统上的实际设备;命名不够灵活,不能任意指定等等。二、sysfs      正因为上述这些问题的存在,在linux2.6内核以后,引入了一个新的文件系统sysfs,它挂载于/sys目录下,跟devfs一样它也是一个虚拟文件系统,也是用来对系统的设备进行管理的,它把实际连接到系统上的设备和总线组织成一个分级的文件,用户空间的程序同样可以利用这些信息以实现和内核的交互,该文件系统是当前系统上实际设备树的一个直观反应,它是通过kobject子系统来建立这个信息的,当一个kobject被创建的时候,对应的文件和目录也就被创建了,位于/sys下的相关目录下,既然每个设备在sysfs中都有唯一对应的目录,那么也就可以被用户空间读写了。用户空间的工具udev 就是利用了sysfs提供的信息来实现所有devfs的功能的,但不同的是udev运行在用户空间中,而devfs却运行在内核空间,而且udev不存在 devfs那些先天的缺陷。很显然,sysfs将是未来发展的方向。2.5.4 tmpfs文件系统tmpfs 是Linux特有的文件系统,唯一的标准挂接点是/dev/shm。当然,用户可以将其挂接在其他地方。tmpfs有些像虚拟磁盘(ramdisk),但不是一回事。说其像虚拟磁盘,是因为它可以使用你的RAM,但它也可以使用你的交换分区。传统的虚拟磁盘是一个块设备,而且需要一个mkfs之类的命令格式化它才能使用。tmpfs是一个独立的文件系统,不是块设备,只要挂接,立即就可以使用。tmpfs的大下是不确定的,它最初只有很小的空间,但随着文件的复制和创建,它的大小就会不断变化,换句话说,它会根据你的实际需要而改变大小;tmpfs的速度非常惊人,毕竟它是驻留在RAM中的,即使用了交换分区,性能仍然非常卓越;由于tmpfs是驻留在RAM的,因此它的内容是不持久的,断电后,tmpfs的内容就消失了,这也是被称作tmpfs的根本原因。tmpfs 是ramfs的衍生物,用来限制缓存大小、向swap空间写入数据。它是用来保存VM所有文件的文件系统。tmpfs中缓存的内容全部是临时的。一旦卸载,所有的内容都会遗失。它把所有的缓存置于内核,它的规模随着文件的规模同步变化。但是它规模有大小限制,可以修改。它可以把当前不再需要的页写入到 swap空间。tmpfs 和 ramfs 本身就是一个文件系统, 用的时候只需要直接挂载就可以. tmpfs可以使用ram, 也可以使用swap共享内存的时候会使用tmpfs系统默认共享内存是内存的一半大小! /dev/shm是挂载点!通过 df -h 可以看出,默认状况下它为内存大小的一半:文件系统        容量      已用      可用     已用%    挂载点tmpfs    1013M   12K  1013M   1%    /dev/shmmount | grep tmpfs 显示当前系统中的 tmpfs:tmpfs   on /lib/init/rw   type   tmpfs (rw,nosuid,mode=0755)varrun  on /var/run       type   tmpfs (rw,nosuid,mode=0755)varlock on /var/lock      type   tmpfs (rw,noexec,nosuid,nodev,mode=1777)udev    on /dev           type   tmpfs (rw,mode=0755)tmpfs   on /dev/shm       type   tmpfs (rw,nosuid,nodev)lrm     on /lib/modules/2.6.27-4-generic/volatile type tmpfs (rw,mode=755)2.5.6 usbdevfs文件系统顾名思义,usbdevfs就是USB设备文件系统,它是一个动态生成的文件系统,有些类似于proc文件系统。它的标准挂接点是/proc/bus/usb,当然,也可以挂接到其他地方。它主要用于:用户级驱动、即插即用、提供USB设备信息、应用程序轮询USB设备的变化等。2.5.7 devpts文件系统devpts文件系统为伪终端提供了一个标准接口,它的标准挂接点是/dev/pts。只要pty的主复合设备/dev/ptmx被打开,就会在/dev/pts下动态的创建一个新的pty设备文件。挂接时,UID、GID及其工作模式会指定给devpts文件系统的所有pty文件。这可以保证伪终端的安全性。讨论devpts文件系统的详细内容,已经超过本文范围,还请读者参考其他专著。2.6 一些必要重要的系统文件 ( /etc/fstab ,inittab,init.rc等)2.6.1 /etc/inittab2.6.2 /etc/init.d/rcS2.6.3 /etc/fstab 文件================2.6.1 /etc/inittabinitab  被 init 使用2.6.1.1 老平台 inittab文件内容2.6.1.1 gpephone 官方的inittab 文件(与redhat,federo差不多)2.6.1.1 ubuntu中没有inittab文件=================2.6.1.1 老平台 inittab文件内容-----------------------------------------::sysinit:/etc/init.d/rcS::respawn:-/bin/sh::restart:/sbin/init::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount -a -r::shutdown:/sbin/swapoff -a-----------------------------------------2.6.1.2 gpephone 官方的inittab 文件(与redhat,federo差不多-----------------------------------------# /etc/inittab: init(8) configuration.# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $# The default runlevel.id:5:initdefault:# Boot-time system configuration/initialization script.# This is run first except when booting in emergency (-b) mode.si::sysinit:/etc/init.d/rcS# What to do in single-user mode.~~:S:wait:/sbin/sulogin# /etc/init.d executes the S and K scripts upon change# of runlevel.## Runlevel 0 is halt.# Runlevel 1 is single-user.# Runlevels 2-5 are multi-user.# Runlevel 6 is reboot.l0:0:wait:/etc/init.d/rc 0l1:1:wait:/etc/init.d/rc 1l2:2:wait:/etc/init.d/rc 2l3:3:wait:/etc/init.d/rc 3l4:4:wait:/etc/init.d/rc 4l5:5:wait:/etc/init.d/rc 5l6:6:wait:/etc/init.d/rc 6# Normally not reached, but fallthrough in case of emergency.z6:6:respawn:/sbin/sulogin1:2345:respawn:/sbin/getty 38400 tty1-------------------------------------------2.6.1.3 ubuntu中没有inittab文件在unbutu系统中我们没看到此文件,是因为ubuntu用的是 upstart ,lfs中使用的是 sysvinit ,嵌入式系统中一般使用的是 busybox 中的 init ,android 系统使用的是 system/core/init init:main()  init_main()    read_inittab();gdm运行后/etc/rc5.d/S30gdm -> ../init.d/gdm/etc/init.d/gdm:19:DAEMON=/usr/sbin/gdm/etc/init.d/gdm:24:SSD_ARG="--startas $DAEMON"/etc/init.d/gdm:27:SSD_ARG="--exec $DAEMON"启动gdm:log_begin_msg "Starting GNOME Display Manager..."start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --name gdm $SSD_ARG -- $CONFIG_FILE >/dev/null================2.6.2 /etc/init.d/rcS-------------------#!/bin/sh挂在 /etc/fstab 中的文件系统/bin/mount -a. /etc/default/rcS#环境变量. /etc/profile#屏幕叫准备. /etc/X11/run-calibrate#启动X. /etc/X11/Xserver. /etc/scripts/testd-bus.sh#启动dbus消息总线#启动gpephone-------------------ubuntu 系统---------------exec /etc/init.d/rc S---------------会依此执行 /etc/rcS.d/ 下以S01mountkernfs.sh S02hostname.shS10udev S11mountdevsubfs.shS20checkroot.shS22mtab.shS30checkfs.shS35mountall.shS40networkingS43portmapS55bootmisc.sh./rc3.d/S30gdm./rc2.d/S30gdm./rc4.d/S30gdm./rc5.d/S30gdm/etc/rcS.d/S35mountall.sh -> ../init.d/mountall.shmount -a -t nonfs,nfs4,smbfs,cifs,ncp,ncpfs,coda,ocfs2,gfs,gfs2 -O no_netdevmount命令的一些解析:mount -a [-t|-O] ...     : mount all stuff from /etc/fstabmount -t type dev dir    : ordinary mount command================2.6.3 /etc/fstab 文件Util-linux 软件包包含许多工具。其中比较重要的是加载、卸载、格式化、分区和管理硬盘驱动器,打开 tty 端口和得到内核消息arch 报告机器的体系结构blockdev 在命令行中调用块设备的ioctlcal 显示一个简单的日历。cfdisk 处理指定设备的分区表column 把输出格式化为几列ctrlaltdel 设置CTRL+ALT+DEL组合键的功能为硬重启或软重启dmesg 显示内核的启动信息fdisk 磁盘分区管理程序fsck.cramfs 对Cramfs文件系统的一致性进行检查getopt 在给出的命令行进行选项和参数解析hexdump 用用户指定的方式(包括ASCII, 十进制, 十六进制, 八进制)显示一个文件或者标准输入的数据hwclock 查询和设置硬件时钟(也被称为RTC或BIOS时钟)。ipcrm 删除给定的进程间通信(IPC)资源mkfs 在一个设备(通常是一个硬盘分区)设备上建立文件系统mkfs.cramfs 创建cramfs文件系统mkswap 初始化指定设备或文件,以用做交换分区more 分屏显示文件,但没有less好用mount 把一个文件系统从一个设备挂载到一个目录ramsize 显示或者改变 RAM disk 的大小raw 将一个原始的Linux字符设备绑定到一个块设备rdev  查询和设置内核的根设备和其他信息readprofile 显示内核侧写文件/proc/profile的信息rename 对文件进行重命名renice 修改正在运行进程的优先级sfdisk 磁盘分区表管理工具umount 卸载一个被挂载的文件系统mount挂载与/etc/fstabmount 源目录 目的目录mount -a 自动挂载/etc/fstab中的文件系统     根目录 / 是必须挂载的﹐而且一定要先于其它 mount point 被挂载进来。     其它 mount point 必须为已建立的目录﹐可任意指定﹐但一定要遵守必须的系统目录架构原则     所有 mount point 在同一时间之内﹐只能挂载一次。     所有 partition 在同一时间之内﹐只能挂载一次。     如若进行卸载﹐您必须先将工作目录移到 mount point(及其子目录) 之外。 /etc/fstab 第一列:label 第二列:挂载点第三列:分区的文件系统第四列:文件系统挂载选项,看附件啦第五列:是否被dump作用。0代表不要做dump 备份,1代表要每天进行dump的动作。 2 也代表其它不定日期的dump备份动作,通常这个数值不是0就是1啦!第六列:是否以fsck检查分区(开机时候检查分区)0为不检查,1为开机的时候检查,2为在稍后的时间检查/dev/sda8 on / type ext3 (rw,relatime,errors=remount-ro)/proc on /proc type proc (rw,noexec,nosuid,nodev)sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)/dev/sda7 on /boot type ext3 (rw,relatime)/dev/sda11 on /home type ext3 (rw,relatime)/dev/sdb5 on  /opt type ext3 (rw,relatime)/dev/sda9 on  /usr/local type ext3 (rw,relatime)/dev/sda1 on  /windows/c type vfat (rw,utf8,umask=007,gid=1000)/dev/sda5 on  /windows/d type vfat (rw,utf8,umask=007,gid=1000)/dev/sda6 on  /windows/e type vfat (rw,utf8,umask=007,gid=1000)可以在/etc/fstab 中进行指定proc/proc procdefaults    00none/tmp ramfsdefaults00sysfs/sys sysfsdefaults00none    /dev/pts devpts defaults00./util-linux-2.12r/mount/mount.cmain()result = do_mount_all (types, options, test_opts);mount --help 可以知道 mount -a 是mount所有/etc/fstab mount -a [-t|-O] ...     : mount all stuff from /etc/fstab======================2.7 制作文件系统2.7.1 原始方式2.7.2 通过scratchbox等工具2.7.3 通过 android 源码集成开发环境2.7.1 原始方式创建基本文件系统标准目录(根据不同的linux系统,ubuntu跟android目录结构就完全不同)lfs中的标准目录:创建修改必要的配置文件/scratchbox/source2/source/busybox/busybox-1.1.2/examples/bootfloppy/etc/vim  ${CLFS_ROOTFS_DIR}/etc/profilevim  ${CLFS_ROOTFS_DIR}/etc/inittabvim  ${CLFS_ROOTFS_DIR}/etc/fstabvim  ${CLFS_ROOTFS_DIR}/etc/init.d/rcS创建帐号以及密码文件sudo vim ${CLFS_ROOTFS_DIR}/passwd拷贝必须的动态库文件cd  ${CLFS_ROOTFS_DIR}/libcp -d  $COMPILER_LIB/ld* ./cp      $COMPILER_LIB/libc-2.3.5.so ./cp -d  $COMPILER_LIB/libc.so.6 ./cp      $COMPILER_LIB/libm-* ./cp -d  $COMPILER_LIB/libm.s* ./cp      $COMPILER_LIB/libcrypt-* ./cp -d  $COMPILER_LIB/libcrypt.s* ./拷贝可选的动态库文件如果需要域名解析:1)增加/etc/resolv.conf[root@lqm /etc]#cat resolv.confnameserver 192.168.x.x  //加入域名解析器2)增加相应动态库的支持增加如下:libnss_fileslibnss_dnslibresolv.sofind find . -name "libnss*"  $COMPILER_LIB/./libnss_files.so.2./libnss_files.so./libnss_dns-2.3.2.so./libnss_dns.so./libnss_files-2.3.2.so./libnss_dns.so.2find . -name "libresolv*"  /scratchbox/compilers/arm-linux-gcc-3.4.4-glibc-2.3.5/arm-unknown-linux-gnu/lib/./libresolv.so./libresolv.so.2./libresolv-2.3.2.so2.7.2 通过scratchbox等工具===================2.7.3 通过 android 源码集成开发环境环境搭建问题:1.为什么拷贝  cupcake 编译结果  out/target/product/littleton/root/  到内核顶层目录?2.cupcake-jianping/make_image15.sh中的choosecombo是什么作用?3.make_image15.sh 与 make_env15.sh只差一句make -j2?4.补充shell脚本知识。=====================2.7.4 配置android网络文件系统下面是曾经用过的几种开发板的命令行参数:S3C2410 启动参数:noinitrd root=/dev/nfs  nfsroot=192.168.2.56:/nfsroot/rootfs  ip=192.168.2.188:192.168.2.56:192.168.2.56:255.255.255.0::eth0:on console=ttySAC0S3C2440 启动参数:setenv bootargs console=ttySAC0 root=/dev/nfs nfsroot=192.168.2.56:/nfsroot/rootfs ip=192.168.2.175:192.168.2.56:192.168.2.201:255.255.255.0::eth0:on mem=64M init=/init         marvell 310 启动参数:boot root=/dev/nfs nfsroot=192.168.2.56:/nfsroot/rootfs,rsize=1024,wsize=1024 ip=192.168.2.176:192.168.2.201:192.168.2.201:255.255.255.0::eth0:-On  console=ttyS2,115200 mem=64M init=/init当前android内核的.config文件中的命令行参数:CONFIG_CMDLINE="root=/dev/nfs nfsroot=192.168.1.100:/nfsroot/rootfs,rsize=1024,wsize=1024 ip=192.168.1.101:192.168.1.100:192.168.1.100:255.255.255.0::usb0:on console=ttyS1,115200 mem=128M init=/init android uart_dma=1"`root=' 参数此参数告诉内核启动时以那个设备作为根文件系统使用。我的pc根文件系统:/dev/sda8              9614116   6522156   2603588  72% /ubuntu 的/boot/grub/menu.lst参数:kernel/vmlinuz-2.6.27-4-generic root=UUID=2ffa7dc6-2dc5-4b66-8661-1226c086951a                 ro locale=zh_CN quiet splash initrd/initrd.img-2.6.27-4-generic其中 root可以设置为:root=/dev/sda8/dev/nfs, 这并非真的是个设备, 而是一个告诉核心经由网络取得根文件系统lfs的/boot/grub/menu.lst参数:title LFS 6.4root (hd1,1)kernel /boot/lfskernel-2.6.27.4 root=/dev/sdb1`nfsroot=' 参数这个参数告诉内核到哪台pc的哪个目录读取根文件系统。此参数的格式如下:nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]<server-ip> --pc机的ip地址,如果此字段没给值,那么将使用由 nfsaddrs 变量(见下面)所决定的值。<root-dir> -- pc服务端上要作为根挂入的目录域名(/nfsroot/rootfs)<nfs-options> -- 标准的网络文件系统选项。所有选项都以逗号分开。如果没有给定此选项字段则使用下列的缺省值:        port            = as given by server portmap daemon        rsize           = 1024        wsize           = 1024        timeo           = 7        retrans         = 3        acregmin        = 3        acregmax        = 60        acdirmin        = 30        acdirmax        = 60        flags           = hard, nointr, noposix, cto, ac`init=' 参数内核启动时缺省执行 `init' 程序,内核将会到/sbin/, /bin/ 等目录下查找默认的init,如果没有找到那么就报告出错。而最后它会去试 /bin/sh (可能在 /etc/rc )。如果说,例如,如果你的 init 程序坏掉了,只要使用 init=/bin/sh这个启动参数就能让你在启动时直接跳到解译环境(shell),使你能够换掉坏掉的程序。`ip=' 参数nfsaddrs=<my-ip>:<serv-ip>:<gw-ip>:<netmask>:<name>:<dev>:<auto>ip=192.168.1.101:192.168.1.100:192.168.1.100:255.255.255.0::usb0:onip=192.168.2.175:192.168.2.56:192.168.2.201:255.255.255.0::eth0:on<my-ip> -- 板子的ip 使用何种协议端视配置核心时打开的选项以及 <auto> 参数而定。如果设定此参数,就不会使用反向地址解析协议或启动协议。<serv-ip> -- 网络文件系统服务端之互联网地址。<gw-ip> -- 网关(gateway),<netmask> -- 本地网络界面的网络掩码。如果为空白,则网络掩码由客户端的互联网地址导出,除非由启动协议接收到值。<name> -- 客户端的域名。如果空白,则使用客户端互联网地址之 ASCII-标记法,或由启动协议接收的值。<dev> -- 要使用的网络设备域名。<auto> -- 用以作为自动配置的方法。参考文档:ramfs, rootfs, initrd and initramfshttp://blog.chinaunix.net/u2/89923/showart_1890405.html嵌入式系统文件系统比较http://blog.sina.com.cn/s/blog_53ad41a50100eptc.htmlLINUX系统性能调谐http://www.host01.com/article/server/00070002/0621409052193755_2.htm怎样限制或者修改/dev/shm的大小http://www.linuxfly.cn/html/65/t-665.html====================================================================
原创粉丝点击