android
文章平均质量分 88
雪饼android之路
这个作者很懒,什么都没留下…
展开
-
使用 Bazel、Kleaf 和 DDK 构建外部 Android 内核模块
但是,当我们进入到构建脚本环节时,我们不再使用原始的 make 命令,而是运行 bazel build //vendor/qcom/opensource/techpack:my_module,构建 DDK 目标。而我们的内核开发人员已经有多年使用环境变量的习惯,所以,如果不能再使用的话,可能会感到阻力和挫败感。默认情况下,构建完成后,Bazel 会清理沙盒,清除调试构建问题时可能依赖的任何标记。他们的工程师协助我们在我们的环境中使用 Kleaf,并将我们的技术包所需的功能和修复程序集成到 DDK 中。转载 2024-07-24 20:30:00 · 401 阅读 · 0 评论 -
AndroidT(13) init 进程 -- second stage init 中的 Epoll (三)
可见使用了 Epoll 后,只要简单的几个步骤即可,作为框架使用还是相当方便的,其中隐藏了 epoll 的数据构造,用户只要提供 监听对象和对于的触发方法即可。不过值得注意的是,这是单线程的,如果注册太多的监听对象,或者某一个处理方法中耗时过长,还是相当影响其他监听事件的处理的。Epoll 实例可以监听文件描述符的输入/输出事件,例如,当用户输入数据或应用程序读取数据时。当发生输入/输出事件时,Epoll 实例会通知相应的应用程序或进程进行处理。转载 2023-12-29 22:00:00 · 142 阅读 · 0 评论 -
AndroidT(13) init 进程 -- first stage init 的初始化 (二)
第一阶段的 init 工作主要用于读取系统启动阶段需要的配置信息(例如 linux的bootconfig,cmdline等配置信息)、挂载文件系统、安装 kernel 中的模块驱动,最后就是启动第二阶段的 init 来进行 Android 系统相关的组件。第一阶段的 init 被编译为静态的可执行程序,位于 ramdisk 中。在 kernel 启动后该 init 应用程序则会被运行。转载 2023-12-28 23:00:00 · 263 阅读 · 0 评论 -
【Android】AndroidT(13) init 进程 -- first stage init 的启动(一)
第一阶段的 init 工作主要用于读取系统启动阶段需要的配置信息(例如 linux的bootconfig,cmdline等配置信息)、挂载文件系统、安装 kernel 中的模块驱动,最后就是启动第二阶段的 init 来进行 Android 系统相关的组件。第一阶段的 init 被编译为静态的可执行程序,位于 ramdisk 中。在 kernel 启动后该 init 应用程序则会被运行。转载 2023-12-27 23:45:00 · 191 阅读 · 0 评论 -
【Android】 Generic Boot Partition
在 Android 12 中,通用boot映像称为 通用内核映像 (GKI),包含通用 ramdisk 和 GKI 内核。对于搭载 Android 13 的设备,通用 ramdisk 将从boot.img中删除并放置在单独的init_boot.img中。此更改使boot.img仅包含 GKI 内核。原创 2023-12-27 23:00:00 · 1262 阅读 · 0 评论 -
【Android】init 进程 -- ramdisk_node_list
system/core/rootdir/ramdisk_node_list文件在Android中扮演着重要的角色,它包含了根文件系统中ramdisk部分的所有节点列表。这些节点可能包括设备节点、目录节点和文件节点。ramdisk是一个临时文件系统,它通常被用作Android启动过程中的初始文件系统。在Android启动过程中,内核会将ramdisk加载到内存中,并将其挂载到根文件系统中。ramdisk通常包含了启动Android系统所需的驱动程序、库和应用程序。原创 2023-12-26 23:00:00 · 937 阅读 · 0 评论 -
【Android】在Ubuntu上为Android系统内置Java应用程序测试Application Frameworks层的硬件服务
在这一篇文章中,我们将在Android系统的应用层增加一个内置的应用程序,这个内置的应用程序通过ServiceManager接口获取指定的服务,然后通过这个服务来获得硬件服务。至此,我们就完整地学习了在Android的Linux内核空间添加硬件驱动程序、在Android的硬件抽象层添加硬件接口、在Android的Application Frameworks层提供硬件服务以及在Android的应用层调用硬件服务的整个过程了,希望能为读者进入Android系统提供入门帮助。转载 2022-12-23 10:09:48 · 143 阅读 · 0 评论 -
【Android】在Ubuntu上为Android系统的Application Frameworks层增加硬件访问服务
因此,软件和硬件的关系,在一定程度上可以说,硬件是为软件服务的。在前面的几篇文章中,我们着重介绍了Linux内核层、硬件抽象层和运行时库层提供的自定义硬件服务接口,这些接口都是通过C或者C++语言来实现的。这样,重新打包后的system.img系统镜像文件就在Application Frameworks层中包含了我们自定义的硬件服务HelloService了,并且会在系统启动的时候,自动加载HelloService。二. 在Android系统中,硬件服务一般是运行在一个独立的进程中为各种应用程序提供服务。转载 2022-12-23 09:34:30 · 117 阅读 · 0 评论 -
【Android】在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口
注意,在hello_init函数中,通过Android硬件抽象层提供的hw_get_module方法来加载模块ID为HELLO_HARDWARE_MODULE_ID的硬件抽象层模块,其中,HELLO_HARDWARE_MODULE_ID是在中定义的。Android硬件抽象层会根据HELLO_HARDWARE_MODULE_ID的值在Android系统的/system/lib/hw目录中找到相应的模块,然后加载起来,并且返回hw_module_t接口给调用者使用。转载 2022-12-23 08:54:54 · 145 阅读 · 0 评论 -
【Android】在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
在这一篇文章中,我们将继续介绍Android系统硬件驱动程序的另一方面实现,即如何在硬件抽象层中增加硬件模块来和内核驱动程序交互。完成这个内核驱动程序后,便可以在Android系统中得到三个文件,分别是/dev/hello、/sys/class/hello/hello/val和/proc/hello。在硬件接口结构体中,fd表示设备文件描述符,对应我们将要处理的设备文件"/dev/hello",set_val和get_val为该HAL对上提供的函数接口。hello.c的内容较多,我们分段来看。转载 2022-12-23 07:45:00 · 355 阅读 · 0 评论 -
【Android】在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序
在这个名为hello的Linux内核驱动程序中,创建三个不同的文件节点来供用户空间访问,分别是传统的设备文件/dev/hello、proc系统文件/proc/hello和devfs系统属性文件/sys/class/hello/hello/val。这个程序的作用中,打开/dev/hello文件,然后先读出/dev/hello文件中的值,接着写入值5到/dev/hello中去,最后再次读出/dev/hello文件中的值,看看是否是我们刚才写入的值5。四. 在hello目录中新建Android.mk文件。转载 2022-12-23 07:15:00 · 132 阅读 · 0 评论 -
【Android】在Ubuntu上为Android系统编写Linux内核驱动程序
此外,还定义了一个字符设备结构体hello_android_dev,这个就是我们虚拟的硬件设备了,val成员变量就代表设备里面的寄存器,它的类型为int,sem成员变量是一个信号量,是用同步访问寄存器val的,dev成员变量是一个内嵌的字符设备,这个Linux驱动程序自定义字符设备结构体的标准方法。四.在hello目录中增加hello.c文件,这是驱动程序的实现部分。这里,提供了三种访问设备寄存器的方法,一是通过proc文件系统来访问,二是通过传统的设备文件的方法来访问,三是通过devfs文件系统来访问。转载 2022-12-23 07:00:00 · 512 阅读 · 0 评论 -
【Android】Android硬件抽象层(HAL)概要介绍和学习计划
把硬件抽象层和内核驱动整合在一起放在内核空间不可行吗?因此,Android才会想到把对硬件的支持分成硬件抽象层和内核驱动层,内核驱动层只提供简单的访问硬件逻辑,例如读写硬件寄存器的通道,至于从硬件中读到了什么值或者写了什么值到硬件中的逻辑,都放在硬件抽象层中去了,这样就可以把商业秘密隐藏起来了。大家想想,Android放在内核空间的驱动程序对硬件的支持是不完整的,把Linux内核移植到别的机器上去时,由于缺乏硬件抽象层的支持,硬件就完全不能用了,这也是为什么说Android是开放系统而不是开源系统的原因。转载 2022-12-22 23:45:00 · 442 阅读 · 0 评论 -
【Android】Android 11(R) Power HAL AIDL简析 -- 基本接口
在Androi源码目录下定义了三个aidl文件,分别为:IPower.aidl 定义 power hal接口Mode.aidl 定义各种 power modeBoost.aidl 定义Boost typeaidl_api目录:对于Stable AIDL,从 Android 11 开始,versions 冻结在 aidl_api/name 下,和AIDL接口版本相关。转载 2022-12-22 20:00:00 · 2084 阅读 · 0 评论 -
【Android】Manifest和Repo详解
?可以设置多个remote地址,用后面的name区分。后面可以选择使用哪一个remote地址。name: 远程git服务器的名字,直接用于git fetch, git remote 等操作alias: 远程git服务器的别名,如果指定了,则会覆盖name的设定。在一个manifest中, name不 能重名,但alias可以重名。fetch: 所有projects的git URL 前缀review: 指定Gerrit的服务器名,用于repo upload操作。原创 2022-12-18 20:47:40 · 2421 阅读 · 0 评论 -
【Android】Simpleperf
现代CPU有一个称为性能监测单元(PMU)的硬件组件。PMU有几个硬件计数器,计算发生了多少个cpu周期,执行了多少条指令,或发生了多少次高速缓存失误等事件。Linux内核将这些硬件计数器包装成硬件perf事件。此外,Linux内核还提供独立于硬件的software events and tracepoint events。Linux内核通过perf_event_open系统调用将所有事件暴露给用户空间,该调用被simpleperf所使用。原创 2022-11-29 22:00:00 · 1589 阅读 · 0 评论 -
【Android】Property
Android 里有很多属性(property),每个属性都有一个名称和值,他们都是字符串格式。这些属性定义了 Android 系统的一些公共系统属性。借用大神的一句话,系统属性就是 真·全局变量。属性变更的请求时init事件循环处理的另一个事件,在Android平台中,为了让运行中的所有进程共享系统运行时所需要的各种设置值,系统开辟了属性存储区域,并提供了访问该区域的API。属性由键(key)与值(value)构成,其表现形式为“键=值”。转载 2022-11-27 17:36:53 · 2686 阅读 · 0 评论 -
【Linux kernel】linux kernel中的cmdline (二)
在linux启动完成后,通过 cat /proc/cmdline也是可以看到cmdline. 那么cmdline是如何添加的呢?转载 2022-11-27 16:19:03 · 723 阅读 · 0 评论 -
【Linux kernel】linux kernel中的cmdline (一)
\ }该段放在.rodata段中。那该段中存放的是什么样的数据呢?saveenv或者通过insmod传入moal.mod_para中的moal代表模块的名字。跟.init.setup段一样,kernel链接时会根据链接顺序将定义的kernel_param放在__param段中。转载 2022-11-27 15:57:44 · 1900 阅读 · 1 评论 -
【Android】SElinux(Security-Enhanced Linux)
作为安卓安全模型的一部分,安卓使用安全增强型Linux(SELinux)对所有进程实施强制性访问控制(MAC),甚至是以root/超级用户权限(Linux能力)运行的进程。许多公司和组织都为安卓的SELinux实现做出了贡献。有了SELinux,安卓可以更好地保护和限制系统服务,控制对应用程序数据和系统日志的访问,减少恶意软件的影响,并保护用户免受移动设备上代码的潜在缺陷。SELinux根据默认拒绝的原则运作。任何没有明确允许的东西都会被拒绝。SELinux可以在两种全局模式下运行。原创 2022-11-25 19:46:48 · 3138 阅读 · 1 评论 -
【Android】dumpsys
在Android系统中,各个系统服务进程之间主要是通过binder或者socket实现跨进程通信,大部分的服务程序使用binder通信的方式提供API接口,所有使用binder通信方式提供API接口的服务均由一个系统核心的服务管理进程——ServiceManager进程进行同一管理。转载 2022-11-25 09:56:58 · 2208 阅读 · 0 评论