双非硕 MCU 驱动开发 1 年,想靠 2 年经验跳槽 Linux 驱动,底层共性技能够支撑转型吗?

今天给大家分享的是一位粉丝的提问,双非硕 MCU 驱动开发 1 年,想靠 2 年经验跳槽 Linux 驱动,底层共性技能够支撑转型吗?

接下来把粉丝的具体提问和我的回复分享给大家,希望也能给一些类似情况的小伙伴一些启发和帮助。

同学提问:

老师您好,我是双非硕毕业工作一年,之前本硕干嵌入式软硬件方向,做过一些比赛,最好成绩是19年电赛国一。硕士毕设用rk3568和GD32做了一个国产化光纤设备。去年秋招拿了些offer,最终去的mcu芯片原厂做驱动开发。当时也有大华的linux底层offer,但是我先签完MCU驱动岗后才拿到的,而且听说大华是大小周裁应届生情况就没去,还有一点原因是mcu原厂是在上海可走应届生落户,我家是苏州的。

现在工作一年了,工作不忙975,也落户上海了,目前觉得MCU有限,还是想往linux驱动转。我感觉共同点就是底层驱动spi,usart,i2c那些。打算明年用2年MCU芯片原广驱动开发经验跳槽Linux驱动,现在还有一年时间回顾和深耕Linux以及做相关项目,老师您觉得可以吗?

Yt回答:

双非硕毕业一年,本硕干嵌入式软硬件方向,做过一些比赛,最好的成绩是电赛国一,毕设是3568加GD32做了一个国产化的光纤设备。其实我认为你这个研究生读的是性价比较高的,因为这种来说它是典型的工程性东西,确实有实际产出,而且后面在秋招的过程中间拿了些offer,最终选择了MCU芯片原厂以及大华的Linux底层offer。其实从这里大家有很多朋友说过,研究生哪些方向会比较好,大家各位可以选择一些这种工程性比较强的,比如像存储、网络、以及包括像云原生这种方向都行。大家有些朋友更加会选择比如喜欢人工智能、深度学习、机器学习,这种东西是典型的偏学术方向,它后面是很难落地的,当然这个方向会非常好发论文,你也更加好毕业。但是你发现工程性的方向,你就比如以这个国产化的光纤设备,那做出来之后,你会发现这确实它就具备有实际意义,它是一个工程性的,它是个产品化的东西。所以后面找工作的时候,你会发现你聊的东西你会更加的偏向工程。这就是我跟大家讲,读研更加推荐大家选择一些工程性比较强的,它确确实实可以后面对你找工作是非常有益处的。

现在工作一年了,感觉工作也不忙,也落户上海,目前MCU有限,还是想往Linux驱动转。其实这个Linux驱动,我认为大家很多朋友,特别是应届生群体,有着一个执念就是Linux驱动,这个不止一个人有,很多朋友都有,不是你们现在这批00后才有这种Linux驱动的执念,像我们这批00后,00后上大学的这一批,我们那个时候也是对Linux驱动特别有执念,这么多年过去依旧会有,因为Linux驱动给人一种感觉很高大上,其实真的Linux驱动有多少它不一定,能理解吧。所以我认为Linux驱动即使有,你包括像很多芯片原厂,你包括像MTK也好,包括海思也好,那其实很多的工作它是移植的,除非你去一些芯片原厂可能能够接触到内核之外。比如你去这种生产制造型的企业,你比如去小米,小米可能它也有一些岗位跟你讲Linux驱动,但是你去了之后,干的哪是驱动,因为小米是个产品厂商,它不可能会有驱动,而且内核这个东西它直接是用芯片原厂的。就比如以TCL,包括像这种TV行业,包括像路由器,包括像TP link这种它底层路由器底层它也是Linux,它里面可能也有对应的Linux驱动岗位,但是你去的时候真的是Linux吗?不可能是的,因为它是个产品厂商,因为它的方案都不是自己的,芯片都不是自己的。你包括像这种TV厂商也是,你包括像TCL干的TV你一样你也会发现它是个产品厂商,主控芯片是用的别人的,所以整个系统它不是自己的,而且这种芯片驱动的问题是直接丢给芯片原厂的。所以在这一层上面,我认为Linux驱动这个词,它只停留在你的想象里面,可能停留在你看的那几本书里面,LDD那本书里面,或者宋宝华宋老师书里面有对应的。而且这种驱动开发的话更多来说它会比较的少,我认为在这个过程来转这一点不是说跟你的技能没关系,它Linux驱动到底有多少这个东西是不确定的,即使招聘的岗位上面是Linux,你去了之后到底干什么事情你是不确定的。相反来说MCU的驱动我认为它会多一点,因为MCU这种,你就比如说我一款新的,你就比如串口、I2C以及SPI,这种来说你发现它里面的这种通信协议都可能要自己实现,但是Linux绝对不会。你就比如用MCU接块蓝牙你依旧也有驱动,至少你用I2C你得驱动起来,包括用MCU点亮一个屏幕,底层也需要工作量,但是你发现Linux这一层它是原厂帮你做好的。如果你后面去了这种比如带系统的,比如多媒体芯片这种带Linux系统的这种芯片原厂,那你会发现很多时候你是一种on call的工作行为,就是别人给你提Patch,Patch你解决,比如说让你去写个Linux驱动,那个概率很低很低。

我感觉共同的点都是SPI、usart、I2C那些。其实讲一下Linux后面的驱动它可能不会是串口,I2C以及SPI。这里呢要讲一Linux系统里面你可能后面即使做驱动,你可以了解一下比如像这种网卡,肯定PCIE这一层可能,然后像存储比如NVME、SCOSET、SATA,这种它的总线它不像是串口,它不像是这种MCU的这种低速能够跑Linux系统的,一般都是高速,主频比MCU快很多。然后还有就是打算明年用两年MCU原厂的驱动跳槽到的Linux驱动,还有就是一年的回顾深耕Linux应用项目。我认为你可以往这个方向走,目前来说在这家公司现在如果在薪资不差的情况下面,工作不累的情况下,在MCU的驱动原厂其实这是一个很好的机会,很好的事情,因为工作不累,而且芯片原厂,而且这可能是整个来说技术含量最高的一层。如果你后面能够跳槽到去这种同行业,同样也是芯片,但是它系统这种我认为它是可以的。但是在这里不用去僵持一定是Linux驱动,更加挑选的比如说在自己的同行业,类似的一个同行业去个芯片原厂也可以,好吧。

最后:

  • 你现在的MCU经验不比你想的Linux驱动差别为了虚名跳坑
  • 真要跳槽不用去僵持一定是Linux驱动,比如说在自己的同行业去个芯片原厂(别去产品公司当调试工具人)!

计算机相关专业就业求职/学习路线/offer选择/职业规划建议

(学习就业困惑?我们来为你答疑解惑!)免费** **必回

#职业规划##计算机#
计算机就业职业规划辅导 文章被收录于专栏

解决计算机相关专业就业/面试/技术提升等问题解答(投稿必回)

全部评论

相关推荐

1.I2C协议时序I2C协议是两线制串行通信协议,物理层包括SCL时钟线、SDA数据线,支持一主多从架构核心时序包括起始信号:scl为高电平,sda从高到低跳变,标志通信开始scl为高电平,sda从低到高跳变,标志通信结束数据传输时:scl高电平时,sda必须稳定,低电平时sda可变化,准备下一位,每个字节八位,高位在前接收方在第 9 个时钟周期拉低 SDA 表示应答,不拉低为非应答主设备通过控制scl和sda生成起始信号,发送从设备地址(7位地址+1位读写位),等待应答后传输数据,最后停止信号结束2.I2C 协议的应用场景和实现我在项目中用 I2C 连接过温湿度传感器(如 SHT30)和 EEPROM,传感器通过 I2C 将采集的数据传给 MCU,EEPROM 通过 I2C 存储配置参数,3.Linux 下 I2C 驱动编程的三层结构回答:linux下I2C驱动为核心层、总线层、设备驱动层核心层:提供通用api,管理总线和设备的匹配关系,是连接总线层和设备驱动层的桥梁总线层(控制器驱动):对应具体I2C控制器,实现硬件时序,负责将核心层的抽象请求转化为实际的 SCL/SDA 电平操作设备驱动层(外设驱动):针对具体 I2C 设备(如传感器),定义i2c_driver结构体,实现probe(初始化设备)、remove(清理)等函数,通过核心层 API 与设备通信。4.platform 与设备树的区别platform总线:是Linux内核为无物理总线的片上外设(GPIO、定时器)设计的虚拟总线设备树:是一种文本文件,用树形结构描述硬件信息(外设、引脚、中断),替代传统板级C代码,驱动通过属性与设备树节点匹配核心区别:platform 是 “驱动 - 设备” 匹配机制,设备树是 “硬件信息描述工具”;现代内核中,platform 设备通常由设备树自动生成5.Linux 下如何获取设备树中的硬件信息内核通过of函数解析设备树,查找节点,6.TCP 与 UDP 的区别,Socket 编程步骤及差异TCP服务器编程步骤:socket创建TCP套接字bind绑定ip和端口listen监听连接accept阻塞等待客户端连接,返回新套接字recv收发数据close关闭连接UDP无需listen、accept、connect收发用sendto,需指定目标地址,UDP无连接概念,一个套接字可与多个地址通信7.IO复用:select、poll、epoll区别三者均用于单线程管理多个I/O流,8.Linux 字符设备驱动设计流程,read/write 实现及应用访问方式定义file_operations结构体,实现open/read/write/release等操作函数,注册字符设备:通过cdev_init初始化cdev,cdev_add注册到内核,分配设备号(alloc_chrdev_region),创建设备文件:通过class_create和device_create自动生成/dev/xxx(替代手动mknod。read从设备读取数据到用户空间,内核到用户write是从用户空间写入到设备,从用户到内核应用程序访问方式 1打开设备,获取文件描述符2.调用驱动的read函数,数据通过copy_to_user传递到buf3.调用驱动的write函数,数据通过copy_from_user从buf传入内核
查看8道真题和解析
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务