安卓驱动工程师 3年成长之路

在这里插入图片描述

大家好,我是杰哥

安卓驱动工程师 3年成长之路

最近和我的一个老朋友联系了一下,聊天中,透露了他目前已经达到30w的年薪

因为我自身是嵌入式的线下老师,所以就聊了他3年来的成长之路

正文

刚毕业不到1w的混子屌丝
是怎么3年后稳定年入30w的
方向还不被定死 就算辞职都是被抢着要的

在这里插入图片描述

最近网上不是在流行
其实所有的岗位都可以混进去再学嘛
那个视频下面全是网友案例
我朋友说他翻完评论区太有感触了

在这里插入图片描述

第一个工作半年 他就做了一件事 特变离谱
配合公司的项目框架不断琢磨系统编程通信
他说他刚进去那段时间其实也就能用C语言写个50行的代码
在学校偶尔听课稍微了解linux系统 就成功上岗了
毕竟都是做开发的
我们就开始聊起了这个方向如何自学
和后期大佬能具备哪些不容易被替代的技术栈
视频有点长 分两期给大家拆解 记得关注
先说下大纲

1 硬件原理图 
2 linux系统编程  
3 linux驱动 
4 dts设备树 
5 kernel内核框架  
6 安卓framwork中间件  

其实这些早都被包含在我的嵌入式学习心经
大家可以拿来看看 内容很专业详细
在这里插入图片描述

1 硬件原理图

第一点就是你要能够阅读硬件原理图
根据硬件原理图分析问题,
因为像你在一家驱动公司肯定是少不了
跟硬件打交道的
这块板上面的话就会有很多外设,
比如说很多芯片,
比如说像无线通信芯片,
这些芯片驱动厂家的话一般都封装好,
那留给我们嵌入式工程师做的事情
主要是针对去做一些引脚配置使用的操作,
这就需要你了解一些基本的硬件原理,
然后根据这个硬件原理,
去移植修改相对应的驱动程序,
让这块板子 这些引脚 这些硬件做出相应的操作

2 linux系统编程

第二部分就是linux系统编程,
这部分的话其实是属于应用层的,
就像多线程,进程 IPC(interprocess communication),
SOCKET网络通信
有的会用c++开发
这一部分的话,相对较浅,
大佬说平时自己写 也只做一些测试程序框架的,
难在企业级框架
所以要精通 还是得靠工作
先入行特别关键
所以不太会花太多时间,

3 linux驱动

然后第三部分就是驱动
主要是linux系统的组成
Uboot 内核 根文件系统 设备树
uboot不太重要 厂家负责
主要是内核这一块比较重要,
是一个基本功嘛,所以说这一部分肯定是要花很多时间。
当然不是说要大家
去看懂内核源码和会手撸一个内核啊
那太离谱了
而是懂得一些内存管理 进程管理 系统调用接口的东西

上面这些基础的搞定了
就是驱动框架这一部分
各种乱七八招的子系统和platform device platform driver
这个小伙子刚过去接触的时候
会有个结构体 成员是一些函数指针
他跟我哭诉过看不懂
其实就和咱们linux大项目里面的
那个设备链表和控制链表
那两个抽象结构体非常相似
所以这也是为什么
不管是我们线上的和线下班的同学
都有找到驱动的工作的原因
线下班前两位就业的小伙子
一个是安卓lcd驱动 一个是bsp驱动开发

Linux系统分为两个部分
用户空间和内核空间,
用户空间的一些系统调用会陷入到内核态
后会根据设备树,找到对应的驱动
去具体的实行,
后续实行要操作到硬件
所以说避免不了跟硬件打交道

在这里插入图片描述

我们就先讲一下内核空间模型
再拿tty子系统来举例

1用户层调用write函数,
2进入到tty这个子系统, 输入输出
3它又会有一个线路规程层,选择具体的驱动程序输入输出
比方说串口 键盘 屏幕等等 在之前还会有一个缓冲区 缓冲池
再往后就是到具体硬件上的一些操作,
在这里插入图片描述

具体硬件操作 现在看来其实就是和设备树相关的crud,设备树非常重要。
驱动中要跟硬件打交道 就是通过设备树 compatible
平台总线platform bus 平台设备platform device
平台驱动patform driver 的match_table 4者匹配结合
可以大概了解一下 就是有这些东西 难吗 也还好 如果大家从事驱动开发
其实就是从事其中的某一块 某一类型 然后crud就行了
没有这种说法 说 :有人也有大把时间把驱动吃透了 才去上岗 不是的
上个视频才说 世界上很多岗位都是可以边工作边学的 上道了 边做边会
这其实就是王阳明的知行合一 大家有空可以去了解下
所以为什么我们的课程教学全是在做项目的过程中学习知识点

驱动大概就是这些

4 内核编译框架

Makefile android.mk defconfig 基础语法规则需要了解
这个就是上面驱动的相关联的一些技术 其实可以归为一类

5 安卓中间件framwork

安卓系统层架构,也就是我们所说的安卓系统分层,
Linux kernel-> Hal -> C lib/ android runtime -> framwork->sys app

在这里插入图片描述

基本初级嵌入式工程师去做这一块开发 上手肯定是看不懂安卓源码的
基本大部分公司会先培养你一段时间
可能一开始先看 framework的managers四大组件的
activity broadcast contentProvider service等
安卓常用布局 什么什么layout啥的
还有java 的多线程 同步异步的东西
这些都是安卓fw的基础盘
但也是要基于学完嵌入式系统编程这块大盘后 再去接触的
然后除了上面说的这些区块
还有最重要的就是系统启动服务和流程init 、zygote、system server 等等
因为他是负责启动和管理整个java framwork的
活动管理 窗口管理 包管理 能源管理
安卓的一个个活动页面就是这些管理服务支撑起来的

后续 可能还有通信机制 系统接口等等 东西太多了 学完是不可能学完的
不过真有人能吃到这一步 20 30 是没什么问题了

总结

大概就是这样子 然后我说一下我的感受
上面说的这些是一个资深安卓驱动工程师 都会去接触到的
但其实这里面就可以分为5 6个岗位了 无论你是driver还是要干安卓framework,
其实薪资都能特别高。

基本这两期视频就结束了 我总结并给大家推荐下学习方法吧

  • 1 这么庞大的技术栈很难吗 应该是挺难的 但是话说回来 应该没有人是先把这些全掌握了在从事这些工作的吧 我朋友就是一个鲜明的例子
  • 2 从应用层入手
    • 2.1面向对象抽象思维 能助力你学习其他语言和大框架 比如java 比如linux驱动的platform fileoperation等
    • 2.2 基础的应用层IPC通信接口灵活运用 以后了解不管是安卓通信机制 他们的底层实现都是基于这些最基础的进程间通信
  • 3 从单片机了解逻辑硬件的开发 各种各样的总线通讯方式uart iic spi等 驱动的硬件层基本就是基于这些总线的寄存器开发 如果你有单片机基础 是非常容易理解的
  • 4 安卓其实就是有个好看的界面 如果你很喜欢界面开发 也可以去考虑学习我橱窗的qt
  • 5 学驱动大框架 fw大框架 只能靠时间磨 非要推荐 宋宝华的书 有电子版 评论区冲

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/428450.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java面试题总结8:springboot

Spring Boot自动配置原理 importConfigurationSpring spi 自动配置类由各个starter提供,使用ConfigurationBean定义配置类,放到META-INF/spring.factories下 使用Spring spi扫描META-INF/Spring.factories下的配置类 如何理解Spring Boot中Starter …

前缀和/前缀和+后缀和?!!:瞬秒Leetcode 742.寻找数组的中心下标

题目 给你一个整数数组 nums ,请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。…

Figma 最新版下载:无需激活码,轻松安装!

从事设计工作,怎么能没有设计工具呢?我相信许多设计师也必须使用Figma这样的软件,真的可以让我们的设计工作更有效率,但我相信你也发现Figma属于外国软件,自然语言也是英语,直到现在没有中文版本&#xff0…

Java基础 - 6 - 面向对象(二)

Java基础 - 6 - 面向对象(一)-CSDN博客 二. 面向对象高级 2.1 static static叫做静态,可以修饰成员变量、成员方法 2.1.1 static修饰成员变量 成员变量按照有无static修饰,分为两种:类变量、实例变量(对象…

初始计算机组成原理

1.初始计算机组成原理 本人相关文章:Linux之计算机概论 声明:大部分图片均来自网络,侵删 一个完整的计算机系统包括硬件子系统和软件子系统两大部分。 组成一台计算机的物理设备的总称叫做计算机硬件子系统,是看得见摸得着的实体,是计算机工…

tomcat 单机反向代理的搭建

一 tomcat nginx 动静分离 (一)常见四种情况 1,standaione 此模式一般在测试环境 tomcat抗高并发 差 2,单机反向代理 nginx 做代理 和静态资源处理 把动态给tomcat AJP 是httpd和tomcat 的特殊协议 因为这同一家公司开发…

spring boot概述

SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。 该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。 通过这种方式,SpringBoot致力于在蓬勃发展的快速应用开发…

【Python】进阶学习:pandas--read_excel()函数的基本使用

【Python】进阶学习:pandas–read_excel()函数的基本使用 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希…

C++ 模拟OJ

目录 1、1576. 替换所有的问号 2、 495. 提莫攻击 3、6. Z 字形变换 4、38. 外观数列 5、 1419. 数青蛙 1、1576. 替换所有的问号 思路:分情况讨论 ?zs:左边没有元素,则仅需保证替换元素与右侧不相等;z?s:左右都…

2024年【起重机械指挥】考试及起重机械指挥考试报名

题库来源:安全生产模拟考试一点通公众号小程序 起重机械指挥考试是安全生产模拟考试一点通总题库中生成的一套起重机械指挥考试报名,安全生产模拟考试一点通上起重机械指挥作业手机同步练习。2024年【起重机械指挥】考试及起重机械指挥考试报名 1、【多…

行列式错题本

《1800》 1 阶数和转置 A是三阶,B是4阶,还有2这个系数 2 怎么啥也不会呀,委屈 行列式的拆分+提取系数 3

【NR 定位】3GPP NR Positioning 5G定位标准解读(四)

目录 前言 6 Signalling protocols and interfaces 6.1 支持定位操作的网络接口 6.1.1 通用LCS控制平面架构 6.1.2 NR-Uu接口 6.1.3 LTE-Uu接口 6.1.4 NG-C接口 6.1.5 NL1接口 6.1.6 F1接口 6.1.7 NR PC5接口 6.2 终端协议 6.2.1 LTE定位协议(LPP&#x…

机器学习模型总结

多元线性回归(linear regression) 自变量:连续型数据,因变量:连续型数据 选自:周志华老师《机器学习》P53-55 思想:残差平方和达到最小时的关系式子即为所求,残差平方和&#xff1a…

考研英语语法(句子成分)

目录 1.主句的成分: 2.化妆后句子的成分: 3.句子的基本结构: 4.句子成分表 5.复杂句型总结 1.并列句(是由并列连词连接两个或两个以上的句子,用逗号隔开) 2.名词性从句(名词在句中充当成…

加密与安全_探索常用编码算法

文章目录 概述什么是编码编码分类ASCII码 (最多只能有128个字符)Code: 字符转换成ascii码ASCII码对照表 Unicode (用于表示世界上几乎所有的文字和符号)URL编码 (解决服务器只能识别ASCII字符的问题&#x…

【数据结构】复杂度详解

目录 (一)算法的复杂度 (二)时间复杂度 (1)练笔解释: i,示例1 ii,示例2 iii,二分查找 iv,斐波那契 (三)空间复杂度…

带使能控制的锂电池充放电解决方案

一、产品概述 TP4594R 是一款集成线性充电管理、同步升压转换、电池电量指示和多种保护功能的单芯片电源管理 SOC,为锂电池的充放电提供完整的单芯片电源解决方案。 TP4594R 内部集成了线性充电管理模块、同步升压放电管理模块、电量检测与 LED 指示模块、保护模块…

企业指标体系建设与管理:运用MECE原则与战略地图,打造完美闭环

在数字化时代,数据已经成为企业的核心资产。为了更好地利用这些数据,企业需要建立一套科学、完整、高效的指标体系。而在这个过程中,MECE原则(Mutually Exclusive, Collectively Exhaustive,即“相互独立,完…

day04-Maven-SpringBootWeb入门

文章目录 01. Maven1.1 课程安排1.2 什么是Maven1.3 Maven的作用1.4 Maven模型1.5 Maven仓库1.6 Maven安装1.6.1 下载1.6.2 安装步骤 2 IDEA集成Maven2.1 配置Maven环境2.1.1 当前工程设置2.1.2 全局设置 2.2 创建Maven项目2.3 POM配置详解2.4 Maven坐标详解2.5 导入Maven项目 …

探索Ubuntu命令行:常见问题与解决方案

一、引言 Ubuntu,作为一款流行的Linux发行版,其命令行界面(CLI)为用户提供了丰富的功能和灵活性。然而,对于新手来说,命令行可能会带来一些挑战。本文将探讨一些在使用Ubuntu命令行时可能遇到的问题及其解决…