Linux上位机开发实践(做一专多能的方案提供者)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
嵌入式linux领域,不管是软件,还是硬件,都有学不完的资料,看不完的文档。那么对于开发人员来说,应该怎么处理呢?以软件为例,我们真的应该不停地去学习上层sdk开发、bsp开发和驱动开发吗。还是说,作为硬件开发的同学来说,需要不停去学习各种各样的芯片,什么ti、rk、zynq、pmu、ddr、flash、emmc都要来一遍。
从商业的角度来说,其实不管学什么,我们都会焦虑。这里面最大的问题就是,没有实现一个技术到产品、商业的循环,不知道自己的价值在什么地方,也不清楚自己的定位在哪里。
1、先做好定位
所谓的定位,就是明白自己的价值在什么地方。比如说,自己是做上位机开发的,那么自己的作用就可以实现硬件和其他设备之间进行通信与控制、编写简单的算法、编写Qt界面,接口方面知道232/485/can/eth,只要是涉及到这方面的工作,都可以胜任。
因此,不管遇到什么样的linux soc板子,只要支持qt,自己就可以拿过来开发。哪怕板子不支持qt,也可以利用原厂sdk或者/dev/fb0进行开发,这就是自己的底气。
2、继续拓展上下游开发
做了linux上位机开发,下面可以进一步拓展一下上下游的开发。对上,可以是windows开发。比如说,之前用linux qt开发,那么稍微做一下调整,就可以实现windows qt+boost的pc开发。技术方面几乎没有差别。
对于下游,可以稍微多了解一下linux底层结构、stm32底层原理。比如linux底层结构有uboot、kernel、rootfs,常见的驱动错误怎么用dmesg去排查,简单的驱动ko如何加载等等。这部分都是非常成熟的内容,只需要花费不多的时间,就可以了解到。对于stm32,这方面的资料就更多,类似于stm32可以实现的内容、简单的pid控制、gpio/spi/iic/can/usb这些简单的外设,用到什么学什么,或者说客户需要什么学什么。
有了上下游的基本知识,就为我们将来自己做方案打下一个坚实的基础。
3、找需求、做方案
有了前面的知识做基础之后,接下来就可以对接各种需求。这种需求可以是电商网站自己找的,也可以是前同事给的,甚至是陌生人交流的,总之要通过各种方式拿到需求。开始的时候不要担心白嫖,抓住每一个交流的机会。作为技术开发的同学来说,这也是自己慢慢商业化、慢慢走向成熟的一个过程。
开发的工程当中,尽量做到软硬结合。比如,对应的功能是纯软件,还是纯硬件,需不需要软硬结合,优先软硬结合的项目;开发的项目是否用到算法;开发的时候是否用到板子,市场上面是否可以买到等等。总之,开发的过程当中,我们会遇到各种各样的问题,原则上,只要风险可控,就应该积极去尝试。
对于每一个机会,都要尽力去争取。很少有一上来,就完全对口的项目。修修改改、甚至中间反复拉扯,这都是正常的。而我们所需要的,就是快速的成长。
4、合理分配自己的时间
前面说过,嵌入式本身比较复杂,很多时候自己并不一定能够全部完成。如果对应的功能不复杂,自己没有空全部完成,那么就可以外包出去。这里面比如说,web前端开发、web后端开发、简单的pc上位机开发、电路原理图绘制、电路layout、第三方pcb打样等等。如果自己有信得过的人或者有过合作的公司,交给第三方来做也是完全可以,没必要自己做所有的工作。时间上的分配非常重要,一个人的时间也是非常有限的。
5、一定要了解硬件
作为嵌入式开发的技术人员来说,要想自己的开发体现出商业价值,一定要自己了解硬件。这种了解体现在对设备的了解、对电气的了解、对原理图的了解。我们自己可以不画原理图、不layout,但是pcb上面的基本元器件、基本原理图、bom成本、模块功能、ic的可替代性,这部分还是需要掌握的。因为在嵌入式开发当中,如果自己完全不懂硬件,是很容易被拿捏的。
而且,很多软件的成本,是不被客户认可的。这种情况下,我们只能通过把软件预先放在硬件里面,通过硬件的方式来完成商业的循环。另外,其实现在很多硬件开发也不是很难,如果不碰ddr,很多的stm32开发板、内置ddr的soc开发本身也并不复杂,自己哪怕是用别人的核心板做扩展板开发,只要能满足客户的功能需求,也都是可以的,并不一定所有东西都是100%自己来做。