android hardware 分析

本文主要分析了Android系统中硬件模块的实现,重点关注了`hardware.c`中的`load`和`hw_get_module`函数,以及`modules`中的.so文件,如gralloc的相关结构体和framebuffer.cpp中的接口函数。通过这些接口,Android系统能够管理和操作硬件资源,如buffer的管理与屏幕更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 hardware.c

该文件提供的接口函数有:

 1、static int load()

 2、int hw_get_module(const char *id, const struct hw_module_t **module) //主函数,实现了核心的加载功能。

     status = load(id, path, module);//封装了该函数来实现模块的加载。

 

二、modules

1、android中的模块是定义在/system/libs/hw/文件下的.so文件,有事先规定好的命名方式,如,

  

   /system/libs/hw/<*_HARDWARE_MODULE_ID>.<ro.product.board>.so
   /system/libs/hw/<*_HARDWARE_MODULE_ID>.<ro.board.platform>.so
   /system/libs/hw/<*_HARDWARE_MODULE_ID>.<ro.arch>.so
    /system/libs/hw/<*_HARDWARE_MODULE_ID>.default.so
 
模块的接口定义在include/hardware/文件夹中,一个模块可以有几个不同的变量,如:"default", "arch" 和"board", 并且也按照"board", "arch" and "default"的顺序来加载。
    "board"变量的代码在partners/...目录下;
    "default" and "arch" 的代码在hardware/modules/目录下。
2、 gralloc
 
    该文件夹包涵的源文件有:
3) mapper.cpp
4) gr.h
  1. gr.h 主要声明和buffer相关的一些函数、class Locker class Locker {}类实现进程锁内联函数的声明。
  2. gralloc_priv.h 声明了2个结构体:
    struct private_module_t;
     struct private_handle_t; //这2个结构体描述了模块和句柄的属性,若实现了这2个结构体就实现了相关的模块和句柄。
  3. 1)fb_setSwapInterval
    2) fb_setUpdateRect
    3) fb_post
    4) mapFrameBufferLocked
    5) roundUpToPageSize // map the framebuffer
    6)  mapFrameBuffer //调用4)
    7)  fb_close
    8)  fb_device_open //打开模块的时候同时进行了初始化设备的工作

    9) 结构体 struct fb_context_t {
     framebuffer_device_t  device;
     };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值