汕头网站建设推广厂家,wordpress使用文档插件,chrome网站开发插件,淮安做网站找哪家公司最近开始投入Android的怀抱。说来惭愧#xff0c;08年就听说这东西#xff0c;当时也有同事投入去看#xff0c;因为恶心Java#xff0c;始终对这玩意无感#xff0c;没想到现在不会这个嵌入式都快要没法搞了。为了不中年失业#xff0c;所以只能回过头又来学。
首先还是…最近开始投入Android的怀抱。说来惭愧08年就听说这东西当时也有同事投入去看因为恶心Java始终对这玩意无感没想到现在不会这个嵌入式都快要没法搞了。为了不中年失业所以只能回过头又来学。
首先还是说Android是基于Linux内核的所以说骨子里还是linux但是针对移动端进行了深度优化。在这里结合GPT还有网上的信息这里主要针对相比嵌入式Linux的差异简单总结一下 1 首先当然是前后端的分离。
有点类似Openwrt的发展。在之前linux要开发图形程序是比较复杂的QT还有几个库要么要收费要么难以学习最关键是和硬件平台绑定换到新硬件要做移植。所以谷歌在操盘的时候直接用Java做了前端GUI。当然Java以前也有用J2SE做应用的传统。这样搞的好处也显而易见前端和硬件分离不管什么硬件都不用改app代码了虚拟机做适配就行了。IOS因为平台封闭所以选了类C语言具体机制空了再看看。
所以首先的差异就是前端App要用Java开发所以这个基本上绕不开。框架还是必须要学一下。
在前端App的层面谷歌提供了Framework还有大量的原生应用比如电话计算器日历email等。简化了很多开发。 按照现在主流的分工不管是Java还是Kotlin应该都有专门的工程师。这部分对于嵌入式开发工程师我的理解是不用太懂但是基本框架要懂app是怎么怎么调用底层的这个必须要知道。
试手一下CameraXTODO-CSDN博客 2 内核的变化部分内容来自GPT
Wakelocks Android引入了Wakelocks机制用于管理设备的唤醒状态。这是为了优化移动设备的电源管理确保在需要时设备保持唤醒状态。就是俗称的唤醒锁貌似这玩意主要是app层在用。
Low Memory Killer Android引入了Low Memory Killer机制用于监测并终止占用过多内存的应用程序进程以维护系统的内存稳定性。这有助于提高系统的性能和响应能力。
Binder IPCInter-Process Communication Android使用了自己的进程间通信机制称为Binder。Binder允许Android系统中的不同组件进行通信例如Activity、Service和BroadcastReceiver。据说这玩意类似Windows上的COM机制。
Ashmem Android引入了Anonymous Shared MemoryAshmem机制用于进程间共享匿名内存区域。这在Android中的共享内存和图形子系统中使用。
Logger Android在内核中添加了用于日志记录的Logger模块以支持Android的日志系统。
Android File SystemFUSE Android引入了FUSEFilesystem in Userspace用于文件系统的实现允许用户空间程序运行文件系统代码而不需要修改内核。
安全性增强 Android对Linux内核进行了一些安全性的增强包括SELinuxSecurity-Enhanced Linux的集成以提高系统的安全性。
调度策略 Android可能会使用不同的调度策略以适应移动设备的性能和电源管理需求。
库的替换好像glibc这些也都换了。 大部分都是应用层。Binder是一个重头因为涉及到接口。其他了解就行真用到了再去看也可以。
Tee学习TODO-CSDN博客 3 驱动层的变化。部分内容来自GPT
Linux以前是标准的ioctl接口Android改成了HAL接口重要实现都切到了user space用JNI封装。这些都要很了解。此外电源管理机制还有Binder机制要看一下。
内核版本 Linux驱动接口 Linux驱动接口通常是为通用Linux内核设计的支持各种硬件架构和设备类型。Linux内核在不同的发行版和版本中可能会有一些变化但整体上是相对一致的。 Android驱动接口 Android使用了经过修改的Linux内核因此Android驱动接口可能在某些方面与标准的Linux内核驱动接口略有不同。Android还可能引入一些额外的特定于移动设备的驱动需求。
电源管理 Linux驱动接口 Linux提供了通用的电源管理框架驱动可以利用这些机制进行设备电源的管理。电源管理策略可能因硬件和内核配置而异。 Android驱动接口 Android对电源管理有其专有的需求引入了Wakelocks等机制以便更好地适应移动设备的电源管理和唤醒状态。
进程间通信IPC Linux驱动接口 通常情况下Linux驱动接口的设计并不直接涉及进程间通信因为它主要关注设备与内核的交互。 Android驱动接口 Android引入了Binder机制用于进程间通信。这对于Android中各种组件的通信非常重要例如Activity、Service和BroadcastReceiver。
设备节点和HAL层 Linux驱动接口 在标准Linux系统中设备节点通常位于/dev目录下用户空间可以通过这些设备节点与驱动进行通信。 Android驱动接口 Android引入了硬件抽象层HAL这是一个在用户空间和驱动之间的接口层用于将Android系统与底层硬件驱动隔离开来。HAL层提供了标准接口使得不同设备的驱动可以以相似的方式与Android系统进行交互。
调度策略 Linux驱动接口 Linux内核使用通用的进程调度策略适用于各种设备和场景。 Android驱动接口 Android可能对调度策略进行定制以适应移动设备的特殊需求例如更好的响应性和电源管理。
驱动总览 这部分是重头尤其是HAL层的差异改的挺大的必须要懂而且要很懂。然后Android驱动层的一些实现FrameBuffer貌似现在换了V4L2ALSAUSB的gaeget框架可能都要看看。当然后面这部分也是Linux平台的玩法区别不大。
Android的硬件接口HAL-CSDN博客 4 安卓运行环境增加的命令
am activity管理器启动activity等。直接管理activity的原因可能还是为了调试方便。猜测
pm package管理器。这个没啥好多说的。
svc 服务管理器。和linux标准的service有点接近但是可以管理的是Android的特定服务比如蓝牙wifi等等。
input 模拟输入主要应该还是用在调试方面。搞外挂利器
getprop/setprop 以前在路由器上这一套要单独实现就是TR069SNMP之类现在谷歌整体给你实现了。轻松很多。在嵌入式开发中这个是大头。
settings 这个说的主要是设置android。但是和上面的有什么区别呢还是看了下GPTsetting主要修改和用户界面相关的东西主要是app领域。getprop/setprop则更广包含一些系统底层属性需要的权限也更高有些要root权限。貌似在嵌入式开发中主要还是后者。
安卓平台在本地也集成了一个数据库有点类似SQLite。当然这个就是爱用不用了。
getevent 获取本地事件。nandread 读取nand数据。
最后有别于一般用的busybox安卓用的toolbox常用命令大同小异。 要点有两个一个是通过getprop/setprop给adb调试接口另一个是用geteventinputs去做定位分析也都不是太难。其他的知道怎么用就行了。 5 用户层差异
主要就是运行的文件系统一些重要的守护进程然后一些工具的了解。
守护进程列表 安卓启动流程 文件结构 重要服务的位置 文件系统差异来自GPT
应用和用户数据 Android Android 将应用和用户数据存储在 /data 分区中。每个应用程序都有自己的私有数据目录其中包含其数据和设置。例如应用程序的数据库、缓存和共享首选项通常存储在 /data/data/package_name 目录下。 嵌入式 Linux 在一般的嵌入式 Linux 系统中应用程序的数据和设置通常存储在 /usr、/var 或其他指定目录中。
系统文件和可执行文件 Android Android 的系统文件和可执行文件通常存储在 /system 分区中。这包括 Android 操作系统的核心文件、系统应用和一些系统级别的设置。 嵌入式 Linux 一般的嵌入式 Linux 系统的系统文件和可执行文件可能分散在不同的目录中通常包括 /bin、/sbin、/lib 等。
可变数据和缓存 Android 可变数据和缓存通常存储在 /cache 分区中。这包括一些临时文件和缓存可能会在系统启动时被清理。 嵌入式 Linux 一般的嵌入式 Linux 系统可能将临时文件和缓存存储在 /tmp 目录下。
外部存储 Android 外部存储通常映射到 /sdcard用于存储用户的媒体文件、下载内容等。 嵌入式 Linux 嵌入式 Linux 系统也可以使用外部存储但其挂载点和目录结构可能不同具体取决于设备和系统定制。
硬件相关文件 Android Android 中可能包含一些硬件相关的文件和节点如 /dev 目录下的设备节点用于与硬件交互。 嵌入式 Linux 嵌入式 Linux 系统也有 /dev 目录但硬件节点的命名和数量可能根据系统的硬件配置而变化。 和第4点差不多没什么难度用两次熟悉就可以了细节要用的时候知道怎么查就行了。
Android系统目录介绍_android 目录-CSDN博客 6 源码结构
看起来好像使用envsetup.shlunch还有make就够了。但是还是要深入了解一下。
这部分核心要点一个是如何新增设备另一个是如何新增一个app。最后就是怎么在启动脚本里面加东西。
安卓的编译加速使用了CCache我在之前公司曾经建议使用这玩意 不过后面被否了。。。
Gradle有点类似于makefile。还有一个要了解的就是Android.bp。感觉本质就是cmake那种东西。。。 这个也算次重点吧。主要是要懂编译环境各个部分怎么生成的。要懂怎么增加一个设备或者怎么增加一个App到编译环境。
CMake小结-CSDN博客
Android SDK学习TODO-CSDN博客
AOSP系列—阅读源码并熟悉AOSP目录结构_aospxref-CSDN博客
https://blog.51cto.com/u_7369281/1913427 7 Fastboot
也就是俗称的刷机模式。是一个Android特有的工具在Linux上没有。Android通过特定手段进入该模型上位机配合一个exe文件。实现操作固件的一些功能。
在我看来本质上就是对bootloader的一个封装好像官方名也叫bootloader interface 提供的功能也是uboot命令行的那些分区升级刷固件主备分区管理系统变量的设置。常规嵌入式开发中规划分区也是很重要的工作貌似Android不能修改分区。
里面有Recovery模式和Fastboot模式一个主要专注系统恢复一个功能更全面。 如果用过uboot的话看一下用法即可。 8 调试方法的学习
主要是ADB这个比较简单之前有写过。可能有一些细节以后用到再说吧。 虽然用的很多但是没什么难的。
ADB的使用-CSDN博客 9 平台特性的学习
主要是硬件平台的特性。 这个也是重点毕竟到什么山头唱什么歌高通的瑞芯微的还是谁的都要仔细学习。 就写这么多吧还有的看到再写写。虽然说换汤不换药本质核心还是编程能力。懂不懂这个汤可能就是会不会失业运气好工资一个月差几十K也都有可能。所以还是学学吧。 参考资料
Embedded Android
ChatGPT