热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

busybox根文件系统mdev的详解

原文连接:http:7071976.blog.51cto.com70619761385965本文参考《嵌入式linux应用开发完全手册》部分内容mdev是udev的简化版本,它也是通过读取内核

原文连接:http://7071976.blog.51cto.com/7061976/1385965


本文参考《嵌入式linux应用开发完全手册》部分内容
mdev是udev的简化版本,它也是通过读取内核信息来创建设备文件
一、mdev的用途:
  1、 初始化/dev目录、动态更新
       1.1、动态更新不仅是更新/dev目录,还支持热插拔,即支持接入卸下设备时执行某些动作,insmod自动创建/dev/***(class_create,class_device_create要自动创建设备必须依赖udev或mdev)

二、配置init脚本自动运行命令
1、busybox文件目录中/doc/mdev.txt中写到

123456789 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 配置如下

1234567 #!/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还有如下关键说明

1234 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加入要自动运行的命令。

1234567 /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文件

12345 #
/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 档案系統,mount 档案系統的命令为:
   linux# mount -av
   会依 /etc/fstab 的內容 mount 进"除了 root 以外的所有档案系統"。
   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、 指挂载设备或分区为何种文件系统类型
           典型 的名字包括这些:ext2, ext3, reiserfs, xfs, jfs, smbfs, iso9660, vfat, ntfs, swap和auto, 
'auto' 不是一个文件系统,而是让mount命令自动判断文件类型,特别对于可移动设备,软盘,DVD驱动器,这样做是很有必要的,因为可能每次挂载的文件
           类型不一致。

2.2、,选项,这部分是最有用的设置!!!
   它能使你所挂载的设备在开机时自动加载、使中文显示不出现乱码、限制对挂载分区读写权限。它是与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.


推荐阅读
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • IB 物理真题解析:比潜热、理想气体的应用
    本文是对2017年IB物理试卷paper 2中一道涉及比潜热、理想气体和功率的大题进行解析。题目涉及液氧蒸发成氧气的过程,讲解了液氧和氧气分子的结构以及蒸发后分子之间的作用力变化。同时,文章也给出了解题技巧,建议根据得分点的数量来合理分配答题时间。最后,文章提供了答案解析,标注了每个得分点的位置。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
author-avatar
小短腿Tel
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有