1. BSP工程师的内核基本功
大家好,我是沙师兄,我们计划开启一个系列专题,名为BSP工程师的内核基本功
。
我本人从事多年的BSP开发相关工作,有着多次芯片验证与 BringUp 的经验,原本计划更新芯片BSP相关的内容。
BSP开发需要有着一定的内核开发基础,但是我并没有找到合适的前置的内核资料。
所以我想从一个BSP工程师的角度,整理一套在驱动和BSP开发工作中,真正在工作中会用到的内核知识并深入其原理,用我的方式给读者讲清楚。
2. 学习方法
我的文档风格比较倾向于实用性,一般都具有较强的指导性,可以跟着文档无脑操作下来。我比较推崇先会用,再从使用方法去深入其原理。
我的系列专题中的讲解思路会使用我日常工作中的学习方法,What-How-Why
,这个过程非常像拼拼图,所以我称之为拼图学习法。
这个学习方法是我根据多年学习工作总结的一套非常实用的学习方法,这种方法非常贴近于真实的开发工作思路,十分适合工程师使用。
-
What: 在学习一个知识点前先明白它是什么,为什么要学,学完之后是用来做什么的,这样可以快速明确学习目标,掌握学习的方向。
-
How: 了解了一个知识点的基本概念之后,下一步就是去学会怎么使用它,例如一个I2C模块怎么在Linux中probe起来,i2ctool怎么使用可以来调试I2C外设等。在真实的工作中开发一个模块的流程也是先熟悉然后用起来。
-
Why: 在学会了使用它之后接下来就是要深入底层,理解实现原理,这会加深对于这个知识的理解,在遇到各种情况都可以轻松应对。
这个学习过程就像拼拼图一样,在拿到拼图之后的第一件事应该是先看封面,先了解这个拼图最终的图形是什么样子的,整个图案有什么特点,心中有个大致的方向。然后先将整个拼图的边框拼出来,确定拼图的边缘。最后是由外向内不停地推进,最终完成整幅拼图。
上面这三点做到第一点,可以作为谈资,但是禁不住问,资深的工程师很容易就知道你没有真正的做过。
做到第二点就可以承担相关的开发工作了,但是如果紧停留在应用阶段,在遇到问题时可能会难以应对。因为整个流程对于你来说还是一个黑盒,问题无法有效控制。
最后一点则是普通人和专家的区别,是企业非常看中的一个工程师的自驱力。可以深入理解底层实现原理,不仅可以在发生问题时更容易定位,还可以证明你是一个有钻研精神的工程师。
这类工程师并不会感到所谓的35岁危机。因为他们的工作经验并不是一些应届生或者工作几年的新人可以替代的。
但是因为人的精力是有限的,Linux发展至今极其复杂,个人已经无法做到对每个子系统精通。
所以我的建议是精通某一两个专项达到
know why
,然后在其他相关方面可以做到know how
,在尽可能多的领域know what
。
举例作为一个BSP工程师,你可以精通一个高速总线(USB/ETH/UFS/PCIE),要熟悉其协议、驱动框架、调试与验证方法等。
然后对于多个低速子系统、内存管理、文件系统等有不同程度的理解。
这也是现在企业比较推崇的所谓T型人才
。
3.专题内容
我理解中的Linux BSP开发 = Linux驱动框架 + 硬件控制器协议。
所以BSP工程师的内核基本功
这个系列专题重点就会讲解与硬件无关的驱动框架、内核、外设驱动开发等。
具体硬件强相关的控制器的内容放到BSP专题中讲解,这样内容隔离也更合理。
目前规划的内容包括:
- 编译详解:初识内核,学习核配置与裁剪,Kconfig语法
- 内核模块:驱动最常见的存在形式
- 系统调用:设备驱动常使用的open/read/write是如何工作的
- 字符设备驱动:最常见的设备驱动
- 设备模型:驱动框架中
platform
的原型 - 平台总线设备驱动模型:
platform
驱动框架是BSP驱动的基础 - 设备树:dts的配置与原理
- 中断:Linux中断子系统,对于驱动工程师非常重要
- 并发控制:原子操作、自旋锁、信号量等都是再设备驱动开发中经常会用到的
- BSP驱动中的内存管理:vmalloc,kmalloc,以及BSP驱动中控制器结构体使用的devm_kzalloc有什么区别,原理又是什么?
以上是暂时规划的内容,具体可能会根据更新情况有所调整,如果有什么想要了解的也可以随时私信我。
4. 实验环境
因为本系列不会涉及到具体的硬件,所以实验平台会选择QEMU
,具体可以参考:
Ubuntu24.04+Qemu+ARMV8+Linux6.12保姆级开发环境搭建教程
4. 最后
分享这个系列也是对我个人能力提升的一个过程,能把别人讲明白才是真正的理解了。所以我希望:
- 兼职创作还是比较有挑战的一件事,欢迎大家催更帮我战胜拖延症
- 就像前面说的,没有人可以做到全知全能,如果内容中有错误的地方欢迎及时指正
- 如果有内容有不懂、表述不清或实验操作上有问题也欢迎私信和我讨论
- 如果有想了解的内容不在内容规划中也可以私信我