fang
1
很多人 把写一般BSP 作为 驱动 工程师,当然BSP 也是soc 一部分 ,或在 一个器件工作起来不可缺乏的一环。但是如果作为 BSP 工程师, 在经历事无大小,繁琐,岁月锤炼之后,应该朝着内核驱动工程师进步。
Linux 内核里面 ,至少 一半以上的代码是 驱动代码 。 而最新的内核代码 中 ,GPU驱动代码已经占据到了 代码的 30%,由此可见 最新科技在那里: 存储技术 的快速迭代 ,而且都是围绕着 GPU 服务 。
目前 AMD 新 提交的代码 500万行,基本都是 GPU 驱动代码。
以前的 BSP ,都是围绕着 iic spi usb (usb也是很大一块) scsi (最为复杂) nvme 但是 大家都 有一个统一的 属性 I/O 。
GPU 目前 技术 日新月异 , 从底层的 pcie 到上层 nvme ,然是仍然 不够快 ,于是 cxl ,以及 nvlink uvlink 。 计算机科技 冯·诺依曼结构: cpu ,controller ,stroage , I/O 其他都基本不是瓶颈,只有 storage 目前发展最快说明 尚有潜力。
随想随写 ,
个人觉得,初级Linux内核驱动工程师,一般1~2年。
特定领域非常专业的工程师需要3~5年,比如usb/emmc/pcie/显示等方向。
内核驱动工程师的技术基础可以分为两部分,内核驱动开发基础知识和驱动开发专业技术。
- 内核驱动开发基础知识 掌握一般需要半年
(1)计算机基础知识
c语言/数据结构/算法/计算机接口通信/操作系统/计算机系统结构/汇编语言
(2)编程能力
c语言编程,懂汇编编程更好
(3)硬件基础知识
原理图
基本设备操作 万用表/示波器
(4)Linux驱动开发基础
驱动模块开发
dma/中断/自旋锁/timer/gpio/pinctrl等基础api
Linux 设备驱动模型
- 驱动开发专业技术 掌握一般需要半年以上,分领域
针对特定领域,如i2c/uart/spi usb/emmc/pcie 显示/网络
(1)协议和原理
(2)控制器硬件实现
控制器实现框架,寄存器定义
(3)Linux特定领域驱动框架
核心/总线/设备 控制器驱动
(4)Linux 外设驱动
外设通信协议(设备层)
外设datesheet
外设驱动
(5)特定总线的测试仪器使用
i2c/uart/spi 逻辑分析仪
usb 协议分析仪
PCIe 协议分析仪
以上是个人一点看法,欢迎大家一起指正讨论,谢谢!
1 Like