第一章Android系统开发环境搭建与编译.pptVIP

第一章Android系统开发环境搭建与编译.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* Binder驱动 binder_node结构体表示一个Binder节点 binder_thread结构体用于存储每一个单独的线程的信息 binder_transaction结构体主要用来中转请求和返回结果,保存接收和要发送的进程信息 binder_init是Binder驱动的初始化函数,由设备驱动接口来调用。Android Binder设备驱动接口函数是device_initcall,与module_init和module_exit不一样。使用module_init和module_exit是为了同时兼容支持静态编译的驱动模块(buildin)和动态编译的驱动模块(module),但是Binder选择使用device_initcall的目的就是不让Binder驱动支持动态编译,而且需要在内核(Kernel)做镜像。 * Binder驱动 proc_mkdir创建了一个Binder的proc文件系统的根节点(binder_ proc_dir_entry_root,/proc/binder) 如果根节点创建成功,紧接着为binder创建binder proc节点(binder_proc_dir_entry_proc,/proc/binder/proc) 然后,Binder驱动使用misc_register把自己注册为一个Misc设备,其设备节点位于/dev/binder,该节点由init进程在handle_device_fd(device_fd)函数中调用handle_device_event(uevent)函数执行其中uevent-netlink事件在/dev/目录下创建。 最后,调用create_proc_read_entry创建以下只读proc文件: /proc/binder/state /proc/binder/stats /proc/binder/transactions /proc/binder/transaction_log /proc/binder/failed_transaction_log 在创建这些文件的过程中,同时也指定了操作这些文件的函数及其参数 * Binder驱动 Binder设备的主设备号为10,此设备号是动态获得的,.minor被设置为动态获得设备号MISC_DYNAMIC_MINOR;.name代表设备名称。 //Binder文件操作结构体 static struct file_operations binder_fops = { .owner = THIS_MODULE, .poll = binder_poll, .unlocked_ioctl = binder_ioctl, .mmap = binder_mmap, .open = binder_open, .flush = binder_flush, .release = binder_release, }; * Binder驱动 binder_open函数用于打开Binder设备文件/dev/binder binder_release函数与binder_open函数的功能相反,当Binder驱动退出时,需要使用它来释放在打开以及其他操作过程中分配的空间并清理相关的数据信息 flush操作接口将在关闭一个设备文件描述符复制时被调用 poll函数是非阻塞型IO的内核驱动实现,所有支持非阻塞IO操作的设备驱动都需要实现poll函数 该函数可以用于在threads队列中查找当前的进程信息 mmap(memory map)用于把设备内存映射到用户进程地址空间中,这样就可以像操作用户内存那样操作设备内存 * Binder驱动 Binder最核心的部分了,Binder的功能就是通过ioctl命令来实现的。Binder的ioctl命令共有7个,定义在ioctl.h 头文件中 #define BINDER_WRITE_READ _IOWR(b, 1, struct binder_write_read) #define BINDER_SET_IDLE_TIMEOUT _IOW(b, 3, int64_t) #define BINDER_SET_MAX_THREADS _IOW(b, 5, size_t) #define BINDER_SET_IDLE_PRIORITY _IOW(b, 6, int) #define BINDER_SET_CONTEXT_MGR _IOW(b, 7, int) #define BINDER_THREAD_EXIT _IOW(b, 8, int) #define BINDER_VERSION _IOWR(b, 9, struct binder_v

文档评论(0)

aiwendang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档