tmpfs
/dev/block/mmcblk0p1/sqlite_stmt_journals/sdcardtmpfsrw,size=4096k00vfatrw,...
===========
android本机挂载(使用flash中的文件系统)rootfs/rootfsro00
tmpfs/devtmpfsrw,mode=75500
devpts/dev/ptsdevptsrw,mode=60000proc/procprocrw00sysfs/syssysfsrw00
tmpfs/sqlite_stmt_journalstmpfsrw,size=4096k00
/dev/block/mtdblock2/systemyaffs2ro00
/dev/block/mtdblock3/datayaffs2rw,nosuid,nodev00/dev/block/mmcblk0p1/sdcardvfatrw=============ubuntu系统:/dev/sda8on/typeext3(rw,relatime,errors=remount-ro)tmpfson/lib/init/rwtypetmpfs(rw,nosuid,mode=0755)/procon/proctypeproc(rw,noexec,nosuid,nodev)sysfson/systypesysfs(rw,noexec,nosuid,nodev)varrunon/var/runtypetmpfs(rw,nosuid,mode=0755)tmpfson/dev/shmtypetmpfs(rw,nosuid,nodev)devptson/dev/ptstypedevpts(rw,noexec,nosuid,gid=5,mode=620)/dev/sda7on/boottypeext3(rw,relatime)/dev/sda11on/hometypeext3(rw,relatime)/dev/sdb5on/opttypeext3(rw,relatime)
/dev/sda9on/usr/localtypeext3(rw,relatime)
/dev/sda1on/windows/ctypevfat(rw,utf8,umask=007,gid=1000)/dev/sda5on/windows/dtypevfat(rw,utf8,umask=007,gid=1000)/dev/sda6on/windows/etypevfat(rw,utf8,umask=007,gid=1000)===============
2.5.2proc文件系统
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:AuthenticAMDmodelname:AMDAthlon(tm)64X2DualCoreCPU5000+1.vmware虚拟机无法正常启动
在Linux下,单个进程的最大内存使用量受/proc/sys/kernel/shmmax中设置的数字限制(单位为字节),
例如ubuntu8.10的shmmax默认值为33554432字节(33554432bytes/1024/1024=32MB)。2.scratchbox开发工具不能登录/scratchbox/login
Inconsistencydetectedbyld.so:rtld.c:1192:dl_main:Assertion`(void*)ph->p_vaddr==_rtld_local._dl_sysinfo_dso'failed!
NOTE:onUbuntuinstallation,youhavetodisableVDSOtomakeScratchboxworkfine,oryou'llgeterrorslikethis:
在ubuntu系统中,我们必须关闭VDSO标记,以便scratchbox能正常工作echo0|sudotee/proc/sys/vm/vdso_enabled
echo4096|sudotee/proc/sys/vm/mmap_min_addrvm.vdso_enabled=0
vm.mmap_min_addr=4096修改/proc文件系统值的方法1.直接修改
echo\|sudotee/proc/sys/kernel/shmmaxecho0|sudotee/proc/sys/vm/vdso_enabled
echo4096|sudotee/proc/sys/vm/mmap_min_addr2.将以下命令放入/etc/rc.local启动文件中:echo\>/proc/sys/kernel/shmmaxecho0>/proc/sys/vm/vdso_enabledecho4096>/proc/sys/vm/mmap_min_addr3.使用sysctl命令来更改SHMMAX的值:sysctl-wkernel.shmmax=2147483648
4.内核参数插入到/etc/sysctl.conf启动文件中,使这种更改永久有效echo\>>/etc/sysctl.confsudosysctl–p
./system/core/logcat/logcat.cpp:403:fd=open(\O_RDONLY);./system/core/init/init.c:553:charcmdline[1024];./system/core/init/init.c:557:fd=open(\O_RDONLY);./system/core/init/init.c:580:chmod(\0440);./system/core/init/bootchart.c:139:proc_read(\cmdline,sizeof(cmdline));./system/core/init/bootchart.c:319:proc_read(\cmdline,sizeof(cmdline));./system/core/init/bootchart.c:320:s=strstr(cmdline,KERNEL_OPTION);./system/core/rootdir/init.rc:162:chownrootradio/proc/cmdline2.5.3sysfs文件系统
与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.4tmpfs文件系统
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可以看出,默认状况下它为内存大小的一半:文件系统容量已用可用已用%挂载点tmpfs1013M12K1013M1%/dev/shmmount|greptmpfs显示当前系统中的tmpfs:tmpfson/lib/init/rwtypetmpfs(rw,nosuid,mode=0755)varrunon/var/runtypetmpfs(rw,nosuid,mode=0755)varlockon/var/locktypetmpfs(rw,noexec,nosuid,nodev,mode=1777)udevon/devtypetmpfs(rw,mode=0755)tmpfson/dev/shmtypetmpfs(rw,nosuid,nodev)lrmon/lib/modules/2.6.27-4-generic/volatiletypetmpfs(rw,mode=755)
2.5.6usbdevfs文件系统
顾名思义,usbdevfs就是USB设备文件系统,它是一个动态生成的文件系统,有些类似于proc文件系统。它的标准挂接点是/proc/bus/usb,当然,也可以挂接到其他地方。它主要用于:用户级驱动、即插即用、提供USB设备信息、应用程序轮询USB设备的变化等。
2.5.7devpts文件系统
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/inittab
initab被init使用
2.6.1.1老平台inittab文件内容
2.6.1.1gpephone官方的inittab文件(与redhat,federo差不多)2.6.1.1ubuntu中没有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.2gpephone官方的inittab文件(与redhat,federo差不多
-----------------------------------------#/etc/inittab:init(8)configuration.
#$Id:inittab,v1.912002/01/2513:35:21miquelsExp$#Thedefaultrunlevel.id:5:initdefault:
#Boot-timesystemconfiguration/initializationscript.
#Thisisrunfirstexceptwhenbootinginemergency(-b)mode.si::sysinit:/etc/init.d/rcS
#Whattodoinsingle-usermode.~~:S:wait:/sbin/sulogin
#/etc/init.dexecutestheSandKscriptsuponchange#ofrunlevel.#
#Runlevel0ishalt.
#Runlevel1issingle-user.#Runlevels2-5aremulti-user.#Runlevel6isreboot.
l0:0:wait:/etc/init.d/rc0l1:1:wait:/etc/init.d/rc1l2:2:wait:/etc/init.d/rc2l3:3:wait:/etc/init.d/rc3l4:4:wait:/etc/init.d/rc4l5:5:wait:/etc/init.d/rc5l6:6:wait:/etc/init.d/rc6
#Normallynotreached,butfallthroughincaseofemergency.z6:6:respawn:/sbin/sulogin
1:2345:respawn:/sbin/getty38400tty1
-------------------------------------------
2.6.1.3ubuntu中没有inittab文件
在unbutu系统中我们没看到此文件,是因为ubuntu用的是upstart,lfs中使用的是sysvinit,嵌入式系统中
一般使用的是busybox中的init,android系统使用的是system/core/initinit: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=\$DAEMON\