本文参考《嵌入式linux应用开发完全手册》部分内容
mdev是udev的简化版本,它也是通过读取内核信息来创建设备文件
一、mdev的用途:
1、 初始化/dev目录、动态更新
1.1、动态更新不仅是更新/dev目录,还支持热插拔,即支持接入卸下设备时执行某些动作,insmod自动创建/dev/***(class_create,class_device_create要自动创建设备必须依赖udev或mdev)
二、配置init脚本自动运行命令
1、busybox文件目录中/doc/mdev.txt中写到
Here's a typical code snippet from the init script:/*/etc/init.d//rcS*/ [1] mount -t sysfs sysfs /sys [2] echo /bin/mdev > /proc/sys/kernel/hotplug [3] mdev -s Of course, a more "full" setup would entail executing this before the previous code snippet: [4] mount -t tmpfs mdev /dev [5] mkdir /dev/pts [6] mount -t devpts devpts /dev/pts
所以在/etc/init.d/rcS 配置如下
#!/bin/sh ifconfig eth0 192.168.1.17 mount -a mkdir /dev/pts #使用内存文件系统,减少对flash的读写 mount -t devpts devpts /devpts #/dev/pts用来支持外部网络链接(telnet:远程访问摄像头)的虚拟终端 echo /sbin/mdev > /proc/sys/kernel/hotplug #设置内核,当有设备插拔时调用/bin/mdev程序 mdev -s #在/dev目录下生成内核支持的所有设备的节点
2、在busybox文件目录中/doc/mdev.txt还有如下关键说明
The simple explanation here is that [1] you need to have /sys mounted before executing mdev. [4] make sure /dev is a tmpfs filesystem (assuming you're running out of flash). Then you want to [5] create the /dev/pts mount point and finally [6] mount the devpts filesystem on it
所以要修改/etc/fstab来自动挂载文件系统,修改etc/init.d/rcS加入要自动运行的命令。
/etc/fstab # device mount-point type options dump fsck order proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 #添加部分 sysfs /sys sysfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0
三、s3c2410、s3c2440的串口名是s3c_2410_serial0、s3c_2410_serial1、s3c_2410_serial2,而不是ttySAC0、ttySAC1、ttySAC2。需要修改/etc/inittab文件
# /etc/inittab ::sysinit:/etc/init.d/rcS s3c2410_serial0::askfirst:-/bin/sh ::ctrlaltdel:/sbin/reboot ::shutdown:/bin/umount -a -r
扩展1:
1、linux有几种虚拟的文件系统类型(只存在于内核,在物理内存不存在,不过我们可以用挂载的方式将它在物理内存上进行映射,如mount
-t proc proc
/proc;将cpu,mem等信息挂载在硬盘中
),比如proc,sysfs,tmpfs,root
2、proc是内核用的文件系统,用于显示内核信息及改变内核参数;
3、sysfs文件系统用来管理和显示各种设备的运行参数及设备的层次结构。//能减少对flash的对写
4、tmpfs:能解决临时的设备(/dev)或文件(/tmp)访问速度慢的缺点。//由于原来/dev的是devfs文件系统
4.1、是一种虚拟内存文件系统
4.2、最大的特点就是它的存储空间在VM(virtual memory)里面
4.3、VM由RM+Swap两部分组成,因此tmpfs最大的存储空间可达(The size of RM + The size of Swap)
4.4、对于tmpfs本身而言,它并不知道自己使用的空间是RM还是Swap,这一切都是由内核的vm子系统管理的
4.5、tmpfs默认的大小是RM的一半,假如你的物理内存是128M,那么tmpfs默认的大小就是64M
4.6、使用:mount -t tmpfs -o size=20m tmpfs /mnt/tmp
4.7、断电或者你卸载它之后,数据就会立即丢失
4.8、tmpfs使用的是VM,因此它比硬盘的速度肯定要快,由于没有挂载之前/tmp目录下的文件也许正在被使用,因此挂载之后系统也许有的程序不能正常工作。没有关系,只要在/etc/fstab里面加上下面的语句:tmpfs /tmp tmpfs size=2m 0 0;重启电脑之后就一切OK了。
扩展2:/etc/fstab 的用途
/etc/fstab 是设定分割区分 mount 目录相关的档案,开机时会依这个档案的�热� mount 档案系�y,mount 档案系�y的命令为:
linux# mount -av
会依 /etc/fstab 的�热� mount 进"除了 root 以外的所有档案系�y"。
root 是在开机时由核心所 mount 进�淼摹�root 先由核心 mount 成 read-only,然后由使用者手动 remount 成 read-write。
扩展3:init根据/etc/inittab配置文件来执行相应的脚本进行系统初始化,如设置键盘、字体,装载模块,设置网络;
init 是在核心 mount 进 root 后,第一��执行的程式 (第一个 process),init 所负责的工作包括:
执行 /etc/rc.d/rc?.d 里的 scripts
将系统由开机状态 (boot-up state) 切换至多使用者状态 (multiuser state)
负责进入 tty (本地端) 的 login shell
负责开机与关机的程序 (procedure)。
扩展4:开机的执行上述文件的过程:
1、开机==>mount -t root root /root (此句内核自动执行)==> /etc/fstab ==> /etc/inittab ==> 执行/etc/rc.d/目录下的脚本(包括/etc/init.d/rcS)
2、linuxrc文件的作用
2.1、在嵌入式Linux中,init进程的执行程序通常是二选其一.这两个执行程序分别是/sbin/init程序,或者是Busybox生成的linuxrc程序.init进程的作用即这个程序的功能.init进程具体运行哪个程序,则由uboot的环境变量bootargs决定,即init=/linuxrc.通常采用命令行参数"init=xxxx"指定某个程序作为init进程运行.比如,init=linuxrc.可以说,linuxrc程序的作用就是init进程的作用.
2.2linuxrc是一个程序,它的执行流程如下所示.其中,如何解析inittab文件可以由用户设定,其它两个一般都不会修改.
2.2.1、设置信号处理函数.
2.2.2、初始化控制台.
2.2.3、解析inittab文件.
扩展5:细说/etc/fstab
1、 /etc/fatab
1.1、文件fstab包含了你的电脑上的存储设备及其文件系统的信息。它是决定一个硬盘(分区)被怎样使用或者说整合到整个系统中的唯一文件
1.2、这个文件的全路径是/etc/fstab,fsck、mount、umount的等命令都利用该程序
1.3、用fstab可以自动挂载各种文件系统格式的硬盘、分区、可移动设备和远程设备等
2、/ect/fstab参数解释
1.1、<type> 指挂载设备或分区为何种文件系统类型
典型 的名字包括这些:ext2, ext3, reiserfs, xfs, jfs, smbfs, iso9660, vfat, ntfs, swap和auto,
'auto' 不是一个文件系统,而是让mount命令自动判断文件类型,特别对于可移动设备,软盘,DVD驱动器,这样做是很有必要的,因为可能每次挂载的文件
类型不一致。
2.2、<options>,选项,这部分是最有用的设置!!!
它能使你所挂载的设备在开机时自动加载、使中文显示不出现乱码、限制对挂载分区读写权限。它是与mount命令的用法相关的
推荐参数
noatime 关闭atime特性,提高性能,这是一个很老的特性,放心关闭,还能减少loadcycle
默认设置
defaults 使用默认设置。等于rw,suid,dev,exec,auto,nouser,async,具体含义看下面的解释。
自动与手动挂载 auto 在启动或在终端中输入mount -a时自动挂载
noauto 设备(分区)只能手动挂载 The file system can be mounted only explicitly.
IO编码设置
iocharset=?;在=号后面加入你的本地编码,似乎在这个设备(分区)中做文件IO的时候就会自动做编码的格式转换。
例如:你的某个分区是编码是utf8,而设备中文件的编码是gb2312,当是复制你设备中的文件到你的这个分区时,它将自动做编码转换
读写权限
umask= 这是关于读写权限的,好像比下面的ro,rw选项更管用!!!
例如:umask=000或0222,使得挂载时option中有default,普通用户仍然能读写挂载设备中的东西。
ro 挂载为只读权限
rw 挂载为读写权限
可执行
exec 是一个默认设置项,它使在那个分区中的可执行的二进制文件能够执行。
noexec 二进制文件不允许执行。千万不要在你的root分区中用这个选项!!!
I/O同步
sync 所有的I/O将以同步方式进行
async 所有的I/O将以非同步方式进行
用户挂载权限
user 允许任何用户挂载设备。 Implies noexec,nosuid,nodev unless overridden.
nouser 只允许root用户挂载。这是默认设置。
suid Permit the operation of suid, and sgid bits. They are mostly used to allow users on a computer system to execute
binary executables with temporarily elevated privileges in order to perform a specific task.
nosuid Blocks the operation of suid, and sgid bits.