大家好,我是杰哥
安卓驱动工程师 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大框架 只能靠时间磨 非要推荐 宋宝华的书 有电子版 评论区冲