V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
TaiChou
V2EX  ›  程序员

想转驱动开发难不?

  •  
  •   TaiChou · 2022-08-23 10:19:38 +08:00 · 4009 次点击
    这是一个创建于 827 天前的主题,其中的信息可能已经有所发展或是发生改变。

    搞了三年 iOS,感觉像是面向 Apple 编程,倒不是说技术不技术的,只是感觉 iOS 做到头只剩下“卷”了。各种 Blog 都是大谈 Runtime 、Runloop, 虽然对解决问题有帮助,有那么一点点能用的东西,但是也不多。没那么多这种需求,只剩下“卷”

    Linux 驱动开发以前是没接触过的,之所以想转一是对 Linux 内核比较感兴趣,二是觉得驱动行业工作时间正常一点。但是我对驱动开发了解的比较少,希望能得到大佬的指点。

    以前还是很好学的,计算机专业出身,计算机导论,操作系统有那么一点基础。自己跟着 MIT XV64 的课程学了一点,一路实现到了内存分配(粗糙的按页分配),后面进程调度,系统调用啥的就没继续实现下去了。不知道往哪继续学了,也不知道驱动开发要干些什么,侧重哪些方面的能力?

    转行不容易,虽然 iOS 凉了我还有前端的基础,但是属实觉得前端、客户端这种是真的青春饭。

    今年二十四,我还年轻,我想转行!!!

    shawndev
        1
    shawndev  
       2022-08-23 10:25:39 +08:00   ❤️ 3
    你这不是 49 年加入国军,是 49 年自立军阀
    junmoxiao
        2
    junmoxiao  
       2022-08-23 10:29:00 +08:00
    安全公司一直对驱动开发有需求,其他行业不知道
    TaiChou
        3
    TaiChou  
    OP
       2022-08-23 10:34:21 +08:00
    @shawndev 为啥,linux 驱动式比较少,但是嵌入式开发应该前景还是可以的吧
    simonCN
        4
    simonCN  
       2022-08-23 10:34:37 +08:00
    "今年二十四,我还年轻,我想转行!!!"
    不能同意更多,尽快转行
    TaiChou
        5
    TaiChou  
    OP
       2022-08-23 10:35:05 +08:00
    @junmoxiao 不是还有嵌入式行业吗
    singerll
        6
    singerll  
       2022-08-23 10:38:15 +08:00
    驱动开发仅了解计算机知识不够的,还需要了解硬件知识。
    针脚定义,时序啥的,不仅仅是写代码的事。
    TaiChou
        7
    TaiChou  
    OP
       2022-08-23 10:40:23 +08:00
    @simonCN 不过得考虑好
    a33291
        8
    a33291  
       2022-08-23 10:41:13 +08:00
    年轻真好 😁
    salmon5
        9
    salmon5  
       2022-08-23 10:42:04 +08:00
    搞驱动开发都有的 50 岁了吧,你说搞搞 go 云原生还靠谱
    TaiChou
        10
    TaiChou  
    OP
       2022-08-23 10:42:38 +08:00
    @singerll 针脚那每个硬件都不一样,都是有文档得吧。基础的数电和模电倒是也是必须课程
    NoNewWorld
        11
    NoNewWorld  
       2022-08-23 10:51:24 +08:00
    个人不建议,不如云原生这块(非技术,只是考虑短期内薪资、发展等)。当然如果认为自己非常牛逼的话,那个行业都可以,比如去试试芯片相关的。
    singerll
        12
    singerll  
       2022-08-23 10:55:32 +08:00
    @TaiChou 具我了解有文档还不够,最起码得会用逻辑分析仪分析时序啥的,不是简单的调接口就完事了。
    zjsxwc
        13
    zjsxwc  
       2022-08-23 10:55:44 +08:00
    linux 驱动很简单吧,比如这个 gpio 例子:
    https://github.com/Johannes4Linux/Linux_Driver_Tutorial/blob/main/04_gpio_driver/gpio_driver.c#L55

    然后对用户来说就是单纯的文件读写,
    个人感觉唯一的要求是要对外设硬件了解深入。
    shijingshijing
        14
    shijingshijing  
       2022-08-23 10:59:40 +08:00
    云原生或基础架构才是正确路径,驱动和内核是大坑,这个行业只需要两种人:一种是大牛,一种是小白。中间的基本上都转方向了。
    TaiChou
        15
    TaiChou  
    OP
       2022-08-23 11:02:28 +08:00
    @singerll 时序不应该是设计电路就考虑好的么,驱动是软件工程师唉,还得搞破解啊
    ren2881971
        16
    ren2881971  
       2022-08-23 11:03:07 +08:00
    为啥这么想不开。
    steins2628
        17
    steins2628  
       2022-08-23 11:12:21 +08:00   ❤️ 1
    @TaiChou 时序关电路什么事,时序是你和芯片通信用的,IIC, UART, SPI... 在这些协议的基础上你去看时序,你搞驱动不可能不看时序,还有,这不叫破解,你拿到芯片不给你时序才是有问题,而且搞嵌入式开发基本告别 cv 了
    TaiChou
        18
    TaiChou  
    OP
       2022-08-23 11:13:20 +08:00
    @shijingshijing @NoNewWorld 云原生不是一个框,啥都往里装么,概念越模糊,感觉就越难摸到门路
    TaiChou
        19
    TaiChou  
    OP
       2022-08-23 11:22:44 +08:00
    @steins2628 谢谢指点,我刚理解的有问题。大概就是要按芯片手册给的时序去实现程序是吧?时序分析仪大概就是用来 debug 看看自己输出的时序有没有问题?
    singerll
        20
    singerll  
       2022-08-23 11:23:11 +08:00
    @TaiChou https://zhuanlan.zhihu.com/p/359121301
    你可以看下简单的 spi 通讯驱动,从头到尾都跟时序密切相关。
    shijingshijing
        21
    shijingshijing  
       2022-08-23 11:25:03 +08:00
    @TaiChou
    驱动几乎可以认为是用硬件的思维去软件,和一般应用开发有很大的不同,比较形象的是面向寄存器编程,你可以先去看看 Intel 或者 ARM 的 ISA 手册,然后了解一下相关的汇编语言,这只是开始。

    然后是各种协议的 specification:USB ,PCIE ,UART ,WIFI ,BlueTooth ,I2C ,SPI 。。。自己试着写一个简单的能用的玩意儿,然后才算入门。

    驱动更看重的是经验的积累和思维的缜密,稳定和安全会放在首要位置。。。
    TaiChou
        22
    TaiChou  
    OP
       2022-08-23 11:25:41 +08:00
    @singerll 抱歉抱歉,我以为你说的分析时序是分析时序电路。逻辑分析仪就是用来看你自己程序输出的时序是吧,相当于 Debug 工具?
    shijingshijing
        23
    shijingshijing  
       2022-08-23 11:32:36 +08:00
    @TaiChou

    而且芯片的文档不是你想象中的一份大而全的文件(只有 STC 单片机这样搞),而是一整套硬件,软件和实际应用等相关的文档集合。

    一般至少有一个 Datasheet ,复杂的还会给 Specification ,还有 N 多 Application Notes ,然后给偏硬件开发的 Hardware Development Kit 。软件相关的如果是处理器类型的会有 ISA 专门介绍指令集,然后是 Programming Guide ,复杂的会有 SDK 。

    这还不包括其他辅助类的文档,比如 Thermal Design Guide ,各种 Schematic & PCB Layout demo 和 Guideline ,比你想象的要复杂的多。
    steins2628
        24
    steins2628  
       2022-08-23 11:32:51 +08:00
    @TaiChou 差不多,你不如直接淘宝买个 arm linux 的开发板直接入门看看适不适应,这还是人家写好了详细教程在教你,确定受得了,有兴趣就可以再自己买点传感器做点自己感兴趣的东西,这样一步一步来
    acctv2
        25
    acctv2  
       2022-08-23 11:32:58 +08:00   ❤️ 1
    其实写驱动的大多都是硬件工程师,CS 出身的人并不多,连 OOP 的应用都很少,所以其实你在 CS 学到的好多知识也不一定派得上用场,iOS 开发那些经验在这里基本可以当作清零。

    而且国内嵌入式这边要么是去华为海思这种超强的大厂给人写驱动,要么就是去一天到晚想着卷成本的芝麻小厂,前者专业背景要求过高,后者工资待遇和成就感都很低,所以前景并不太好。
    TaiChou
        26
    TaiChou  
    OP
       2022-08-23 11:38:19 +08:00
    @steins2628 @shijingshijing @singerll 谢谢三位大佬提供的资料,我之前的确想的 too young too simple
    TaiChou
        27
    TaiChou  
    OP
       2022-08-23 11:39:26 +08:00
    @acctv2 了解了了解了,大概就是大厂门槛高,小厂也没啥前景,感觉各种开发的处境都差不多。。。
    q474818917
        28
    q474818917  
       2022-08-23 11:39:31 +08:00
    什么时候等培训机构进入驱动嵌入就是一片红海了,所以现在赶紧的吧
    acctv2
        29
    acctv2  
       2022-08-23 11:44:52 +08:00
    @TaiChou 嵌入式这块很多小厂甚至不需要什么像样的软件工程师,它们做的都是树莓派平替、STM32 平替,有的代码库就是直接.....嗯你懂的
    smdbh
        30
    smdbh  
       2022-08-23 12:08:38 +08:00
    转行没基础可能都难,但驱动这些感觉太模板化了
    yolee599
        31
    yolee599  
       2022-08-23 12:45:54 +08:00 via Android
    Linux 的驱动太成熟了,基本只需要 menuconfig 配一下就能用,需要从头开始写的比较少,一般都是芯片制造商做好了
    darkengine
        32
    darkengine  
       2022-08-23 12:51:29 +08:00
    毕业的时候干过一年 linux 驱动,给公司研发的安卓手机移植过芯片驱动。具体是从芯片厂家那里拿到 datasheet ,拿到示例代码,根据公司的板子改改上电流程写下寄存器,向安卓 framework 提供 API 就可以了。其实跟互联网各种业务 boy 差不多,好的地方是项目时间没有互联网公司那么紧张,坏处是钱少,少很多。
    chisj
        33
    chisj  
       2022-08-23 14:45:29 +08:00
    我倒是在 2011 年从驱动开发转成了 iOS 开发……
    luny
        34
    luny  
       2022-08-23 16:45:05 +08:00
    有自研嵌入式硬件设备的公司,对驱动开发需求还是比较大的
    另外驱动开发技术栈也算比较成熟了,更多的是实际项目中解决问题
    justanetizen
        35
    justanetizen  
       2022-08-23 17:32:22 +08:00 via Android
    OP 应该上车 Rust
    abcbuzhiming
        36
    abcbuzhiming  
       2022-08-23 19:44:59 +08:00
    @TaiChou 嵌入式根本就不是软件行业,尤其不是互联网类行业,其本质是制造业,需要大量固定资产投入,这也意味着,人在其中的成本被摊薄了,所以,嵌入式行业里的中下层,远比互联网卷,而且待遇差。因为那是制造业,是真正的 [厂]
    ajaxgoldfish
        37
    ajaxgoldfish  
       2022-08-23 20:00:31 +08:00
    楼主可以看我之前发的帖子
    Shazoo
        38
    Shazoo  
       2022-08-24 11:43:20 +08:00
    伙计,真正的嵌入式行业现在都不太需要写什么驱动了。模块驱动大多都是厂家早已写好,业务直接调用即可……

    写驱动,调驱动都是 7-8 年前的久远记忆了……现在真开发一个产品,datasheet 的时序图都只是扫一眼,从来没见过哪个厂家不给 all-in-one 的 feature 验证 demo 的。

    感觉现在出了做功耗管理还有点技术含量以外,剩下就都是业务代码。

    至于偶现问题,内核 crash ,系统不稳定,恰好又需要经验,你转过去拿着互联网公司实习生工资去积累经验吗?

    早跳早解脱,哥都开始玩 python 了……早年参与的核心项目,覆盖全国,月出货量 1M ,到现在还不是老老实实 tab 对齐代码……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3478 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:03 · PVG 19:03 · LAX 03:03 · JFK 06:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.