成为一个内核驱动工程师需要多久

很多人 把写一般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. 内核驱动开发基础知识 掌握一般需要半年
    (1)计算机基础知识
    c语言/数据结构/算法/计算机接口通信/操作系统/计算机系统结构/汇编语言
    (2)编程能力
    c语言编程,懂汇编编程更好
    (3)硬件基础知识
    原理图
    基本设备操作 万用表/示波器
    (4)Linux驱动开发基础
    驱动模块开发
    dma/中断/自旋锁/timer/gpio/pinctrl等基础api
    Linux 设备驱动模型
  2. 驱动开发专业技术 掌握一般需要半年以上,分领域
    针对特定领域,如i2c/uart/spi usb/emmc/pcie 显示/网络
    (1)协议和原理
    (2)控制器硬件实现
    控制器实现框架,寄存器定义
    (3)Linux特定领域驱动框架
    核心/总线/设备 控制器驱动
    (4)Linux 外设驱动
    外设通信协议(设备层)
    外设datesheet
    外设驱动
    (5)特定总线的测试仪器使用
    i2c/uart/spi 逻辑分析仪
    usb 协议分析仪
    PCIe 协议分析仪
    以上是个人一点看法,欢迎大家一起指正讨论,谢谢!
1 Like