• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 关于linux的busybox工具mdev的使用和声卡热插拔以及驱动挂载的总结

关于linux的busybox工具mdev的使用和声卡热插拔以及驱动挂载的总结

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了busybox mdev,linux下busybox,linux中busybox,linux busybox,linux busybox下载等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

关于linux的busybox工具mdev的使用和声卡热插拔以及驱动挂载的总结


mdev的使用方法和原理

mdev是busybox自带的一个简化版的udev,适合于嵌入式的应用埸合。其具有使用简单的特点。他也可以实现设备节点的自动创建和设备的自动挂载,只是在实现的过程中有点差异,在发生热插拔时间的时候,mdev是被hotplug直接调用,这时mdev通过环境变量中的 ACTION 和 DEVPATH,来确定此次热插拔事件的动作以及影响了/sys中的那个目录。接着会看看这个目录中是否有“dev”的属性文件,如果有就利用这些信息为这个设备在/dev 下创建设备节点文件。它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的节点文件。在以busybox为基础构建嵌入式Linux的根文件系统时,使用它是最优的选择。

1)mdev的基本介绍及使用方法
mdev有两个主要的应用,初始化对象和动态更新,两个应用都需要内核sysfs的支持,且必须将sysfs挂载到/sys。为了是实现动态更新,你还必须在内核配置时增加热插拔的支持(hotplugging)\下面是系统初始化脚本中一个典型的使用mdev的代码片段
[1] mount -t sysfs sysfs /sys
[2] echo /bin/mdev > /proc/sys/kernel/hotplug
[3] mdev -s
当然, 一个对mdev更完整的安装还必须在以上代码段前执行下面的命令:
[4] mount -t tmpfs mdev /dev
[5] mkdir /dev/pts
[6]mount -t devpts devpts /dev/pts
简单说明一下上面的代码:
[1] 你必须在执行mdev前挂载/sys
[2] 随后你[2]命令内核在增删设备时执行 /bin/mdev
[3] 设置mdev,让它在系统启动时创建所有的设备节点
[4] 而对mdev更完整的安装,你必须确保[4] /dev是tmpfs
[5] (假设文件系统在flash外运行),而且你必须[5]创建
2)mdev.conf的规则
: [<@|$|*> ]
devic regex : 使用正则表达式表示的设备节点
uid gid : uid 和gid
octal permissions : 八进制的权限位
其中的特殊字符的解释:
@ 在创建设备节点后运行命令
$ 在删除设备节点前运行命令
* 在创建设备节点后和删除设备节点前都运行的命令
//好的,废话说完了,接下来是如何使用和配置

mdev的使用
1.在使用busybox制作根文件系统的时候,(make menuconfig)选择支持mdev
Linux System Utilities --->
[*] mdev
[*] Support /etc/mdev.conf
[*] Support command execution at device


2.在文件系统添加如下内容
Vim /etc/init.d/rcS
echo "----------mount /sys as sysfs"
mount -t tmpfs mdev /dev
mount -t sysfs sysfs /sys
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo "----------Starting mdev......"

echo "echo /sbin/mdev > /proc/sys/kernel/hotplug"
echo /sbin/mdev > /proc/sys/kernel/hotplug
echo "mdev -s"
mdev -s
这些语句的添加在mdev的手册中可以找到。

注意:是/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug,并非/bin/echo /bin/mdev > /proc/sys/kernel/hotplug。
<注> udev是要内核支持热插拔的,如果你的内核不支持热插拔,需要配置重新编内核,如果发生类似问题,可以去我另一篇博文
3.接下来是关于挂载的处理。mdev是走mdev.conf的,依赖它的内容做有趣的事,比如声卡吧
在嵌入式Linux板子上调试USB声卡,使用mdev创建设备节点时默认直接在 /dev/目录下创建, 如
  1. controlC0 pcmC0D0c seq sequencer2
  2. mixer pcmC0D0p sequencer timer
但是用户空间的程序alsa-lib, alsa-utils都是去 /dev/snd/目录下找这些设备节点, 怎么能让mdev把设备节点创建在子目录下呢?
在busybox源代码的 doc/mdev.txt 文档里面找到以下说明:

  1. You can rename/move device nodes by using thenextoptional field.
  2. :[=path]
  3. Soifyou wanttoplace the device node into a subdirectory,make sure the path
  4. has a trailing/.Ifyou wanttorename the device node,just place the name.
  5. hda 0:3 660=drives/
  6. This will move"hda"into the drives/subdirectory.
  7. hdb 0:3 660=cdrom
  8. This will rename"hdb"to"cdrom".

  9. Similarly,">path"renames/moves the device but it also creates
  10. a direct symlink/dev/DEVNAMEtothe renamed/moved device.
所以, 我们只要在 /etc/mdev.conf配置文件里面加入几行就可以了:

  1. controlC[0-9] 0:0 0660 =snd/
  2. pcm.* 0:0 0660 =snd/
  3. seq.* 0:0 0660 =snd/
  4. mix.* 0:0 0660 =snd/
  5. timer 0:0 0660 =snd/
这样再运行mdev, ALSA相关的设备节点就都创建在 /dev/snd/ 目录下了。
我的完整的mdev.conf如下(仅供参考)

# support module loading on hotplug
$MODALIAS=.*root:root 660 @modprobe "$MODALIAS"

# alsa sound devices and audio stuff
pcm.*0:0 660 =snd/
control.*0:0 660 =snd/
midi.*0:0 660 =snd/
seq0:0 660 =snd/
timer0:0 660 =snd/

dsp0:0 660 >sound/
mixer0:0 660 >sound/
sequencer.*0:0 660 >sound/

另外,在调试的时候你可以去/etc下面找mdev.conf,去/dev下看一下snd是否已经存在,若存在,进去看看是不是有你想要的东西
查看etc/init.d里面的rcS 是否已经改好了
之前“注”里面说的那个bin和sbin的问题,一定不要搞混了

下面重新编译文件系统重新运行mdev即可



分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 关于linux的busybox工具mdev的使用和声卡热插拔以及驱动挂载的总结

相关文章

  • 2017-05-26【项目篇】Android团队项目开发之统一代码规范
  • 2017-05-26从源码的角度理解四大组件的工作过程——Android开发艺术探索笔记
  • 2017-05-26Kerberos简介
  • 2017-05-26Android View体系(五)从源码解析View的事件分发机制
  • 2017-05-222.6.1 PopupWindow(悬浮框)的基本使用
  • 2017-05-26Android安全机制
  • 2017-05-26解决CentOS 7 history命令不显示操作记录的时间和用户身份问题
  • 2017-11-18android 8.0 应用启动崩溃?
  • 2017-05-26Android工程师入门(一)——这周入大门,挤时间,轻喷,android工程师
  • 2017-05-26Android UI学习笔记 之 使用ViewPager实现导航

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • linux和android调试工具介绍及方法汇总
    • 安卓开源项目周报0104,安卓开源项目0104
    • 8.3.10 Paint API之—— ColorFilter(颜色过滤器)(2-3)
    • Android 上千实例源码分析以及开源分析
    • Android开发笔记(2)——ViewGroup,androidviewgroup
    • GreenDao 数据库:使用Raw文件夹下的数据库文件以及数据库升级,greendaoraw
    • Xamarin android 的WebClient Json下载并存储本地及sqlite数据库,xamarinsqlite
    • [转]File Descriptor泄漏导致Crash: Too many open files,descriptorcrash
    • Android开发:优化ListView实践解析
    • Fragment 重叠 遮盖问题,fragment遮盖

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有