Android 框架之创建设备节点文件
2016-03-11 23:17
381 查看
Android 与linux一样使用设备驱动来访问硬件设备,设备节点文件是设备驱动的逻辑文件,应用程序使用设备节点文件来访问设备驱动程序,linux使用mknod来创建设备节点文件,Android 有自己法子。
Android 使用Init 进程来创建设备节点文件,分两种情况:静态节点文件和动态节点文件,以应对已经定义好的冷插拔和系统运行起来后插入的热插拔设备。
对于冷插拔设备,init 进程事先获取等待冷插拔处理的驱动程序,事先定义好个驱动的设备节点文件(在android_source_code/system/core/init/devices.c中),在struct perms_devices[ ] 列出了设备节点的名称。访问权限,用户ID,组ID,若要添加新的用户定义的新设备需要在此结构体中添加相应信息。
init 首先调用device_init() 函数,创建一个socket 来接收uevent,再通过cold_boot() 调用do_coldboot()对内核启动时注册到/sys下的驱动程序进行冷插拔处理,do_coldboot会启动uevent,在handler_device_fd()中接收uevent信息,并写入到uevent struct 中,调用handle_device_event()创建节点文件,先创建所有的子目录,然后调用make_device()创建节点文件。
init 对于热插拔的动态设备,使用事件处理循环来完成,使用poll()监听来自驱动程序的uevent, 然后调用handle_device_fd()创建设备节点。
Android 使用Init 进程来创建设备节点文件,分两种情况:静态节点文件和动态节点文件,以应对已经定义好的冷插拔和系统运行起来后插入的热插拔设备。
对于冷插拔设备,init 进程事先获取等待冷插拔处理的驱动程序,事先定义好个驱动的设备节点文件(在android_source_code/system/core/init/devices.c中),在struct perms_devices[ ] 列出了设备节点的名称。访问权限,用户ID,组ID,若要添加新的用户定义的新设备需要在此结构体中添加相应信息。
init 首先调用device_init() 函数,创建一个socket 来接收uevent,再通过cold_boot() 调用do_coldboot()对内核启动时注册到/sys下的驱动程序进行冷插拔处理,do_coldboot会启动uevent,在handler_device_fd()中接收uevent信息,并写入到uevent struct 中,调用handle_device_event()创建节点文件,先创建所有的子目录,然后调用make_device()创建节点文件。
init 对于热插拔的动态设备,使用事件处理循环来完成,使用poll()监听来自驱动程序的uevent, 然后调用handle_device_fd()创建设备节点。
相关文章推荐
- [置顶] 设置android studio启动时不检查sdk Android studio启动时总是在找AndroidSDK的解决办法
- 设计模式在Android中的应用
- android 用相机照相并剪裁图片
- 安卓开发中非常炫的效果集合
- Android Material Design(3) CardView的使用
- 在adb中给android文件开通所有权限
- Android view手势拖动和缩放
- android 自定义坐标曲线图
- Android Studio插件-自动根据布局生成Activity等代码(插件代码开源)
- Mars《Android开发视频教程》
- Android控件第4类——ProgressBar
- Android之NetworkOnMainThreadException异常
- Android开发-Gradle基础
- [Android开发那点破事]解决android.os.NetworkOnMainThreadException
- 出现android.os.NetworkOnMainThreadException异常
- android.os.NetworkOnMainThreadException 异常处理
- 仿Android5.0 水波扩散效果(Ripple)简单实现
- 识别输入装置ID与InputDevice装置(Improved event management)
- Android中的PendingIntent 原理
- android源码设计模式解析与实战 读书笔记 2 单例模式(下)