Android开发Android知识程序员

浅析Binder(三)——启动篇

2016-12-29  本文已影响174人  NoOneDev

本篇介绍Binder设备的基本操作方法

Binder设备初始化

Binder设备初始化主要功能

static int __init binder_init(void)
{
    int ret;

    binder_deferred_workqueue = create_singlethread_workqueue("binder");
    if (!binder_deferred_workqueue)
        return -ENOMEM;
        //创建设备:/dev/binder ?
    binder_debugfs_dir_entry_root = debugfs_create_dir("binder", NULL);
    if (binder_debugfs_dir_entry_root)
        binder_debugfs_dir_entry_proc = debugfs_create_dir("proc",
                         binder_debugfs_dir_entry_root);
    ret = misc_register(&binder_miscdev);  //注册为Misc设备
    if (binder_debugfs_dir_entry_root) {   //创建几个属性文件:state/stats/transaction/transaction_log
        debugfs_create_file("state",
                    S_IRUGO,
                    binder_debugfs_dir_entry_root,
                    NULL,
                    &binder_state_fops);
        debugfs_create_file("stats",
                    S_IRUGO,
                    binder_debugfs_dir_entry_root,
                    NULL,
                    &binder_stats_fops);
        debugfs_create_file("transactions",
                    S_IRUGO,
                    binder_debugfs_dir_entry_root,
                    NULL,
                    &binder_transactions_fops);
        debugfs_create_file("transaction_log",
                    S_IRUGO,
                    binder_debugfs_dir_entry_root,
                    &binder_transaction_log,
                    &binder_transaction_log_fops);
        debugfs_create_file("failed_transaction_log",
                    S_IRUGO,
                    binder_debugfs_dir_entry_root,
                    &binder_transaction_log_failed,
                    &binder_transaction_log_fops);
    }
    return ret;
}

device_initcall(binder_init);

Binder设备文件的打开过程

当进程调用open函数来打开binder设备的时候它会调用Binder驱动中的binder_open()函数。该函数的具体实现:

static int binder_open(struct inode *nodp, struct file *filp)
{
    ......
}

Binder设备文件的内存映射

这个比较难,暂时就不做够多的要求吧!
了解两个感念

sturct int binder_mmap(struct file *filp, struct vm_area_struct *vma)
{
    ......
}

</br>
参考:
《Android系统源代码情景分析》罗升阳大神著

上一篇下一篇

猜你喜欢

热点阅读