那些只有芯片原厂才能做的驱动开发工作

简介: 那些只有芯片原厂才能做的驱动开发工作

宏观上看,做嵌入式的公司可以分为2两种:芯片原厂方案公司

芯片原厂:顾名思义,芯片是自家的,自己设计芯片,然后把芯片卖给别人。

方案公司:买别人的芯片,做方案,也就是做产品。

身为一名驱动开发人员,在芯片原厂做驱动,和在方案公司做驱动,差别还是很大的。

哪些东西只有芯片原厂能做,而方案公司做不了呢?

真驱动 vs “假”驱动

驱动方面,方案公司能做的驱动开发其实主要是一些外设,例如写一个spi从设备驱动,读写一个传感器的数据。如果你在方案公司能真正地去写一个驱动出来,也算是名正言顺的驱动开发人员了。

但绝大多数情况是,你只需要做适配,稍微改一改。例如改一下设备树,改一下Makefile。工作中需要用到你的场景可能是:要添加一个设备,但你不知道怎么添加,也不知道怎么跟它通信,这时可能要稍微翻一下驱动源码,看懂后改一改完事。

而在芯片原厂,所有驱动开发都是要先看芯片手册的,并且很多都是从新建一个.c文件开始。

换句话说,在方案公司写一个外设的从设备驱动,终归还只是调用Linux的通用接口。而原厂是要操作寄存器,看懂芯片手册后,开始定义各个寄存器偏移,各个比特位,然后实现对上层的接口。

例如,在驱动里调用msleep函数进行延时,如果你对驱动了解不够的话,可能会觉得这是软件行为,实际上它依赖于timer驱动。

真正的系统移植

系统移植大家应该听过,在各大嵌入式的教程里也多少听过到,例如uboot移植、内核移植。

对方案公司来说,所谓的uboot移植、内核移植,其实还是适配。

例如,uboot里有很多defconfig配置文件,移植一个支持norflash或者支持T卡功能的uboot,你的工作其实就是换一个defconfig文件,然后跑起来就行。

但我就问一句,如果没有这个defconfig呢?

对芯片原厂来说,系统移植是真正意义上的移植。

什么叫真正意义上的移植?假如现在有一个全新的芯片,我从官网上拉一个uboot和kernel的源码,现在uboot和kernel中没有任何关于这颗芯片的代码,我要从新建一个文件夹开始,一步一步直到能够在芯片上跑起来,

这就是真正的系统移植,把Linux在一颗全新的芯片上跑起来。

而这过程有哪些驱动需要完成呢?首先就是要让串口有打印,有打印才能调其它的模块。但只调串口也不行,因为需要时钟,你就得先完成clock驱动,有时钟了还不行,因为需要复用引脚,你就得先完成pinctrl驱动。Linux的正常运行,还需要有一个timer作为系统timer,你就得先完成timer驱动,timer需要产生中断,你就得写一下中断控制器的驱动。。。

最终Linux正常跑起来,系统相关的驱动clock/reset、pinctrl/gpio、timer、watchdog、pwm、rtc、uart等都是已经写好的,然后在此基础上继续开发其他驱动,例如完成I2C控制器驱动、SPI控制器驱动、网口驱动等等。

当然,前期为了让串口有打印,可以偷懒直接配寄存器,只不过开发其他驱动的人就不能调用接口了。

另外,也不是所有在原厂的人都能有这样的机会做这种从零开始的系统移植,一般是芯片架构做了大调整,或者更换了Linux版本才需要。

内核优化

内核优化其实在方案公司的需求就更少了。

在原厂,内核优化主要是系统启动速度、内核裁剪以及内存优化。

系统启动速度好理解,做快启一般思路就是把一些没必要的初始化给它去掉,然后就是提高数据传输速率。

内核裁剪主要是应对一些flash容量比较小的场景,主要也是把一些内核功能去掉,只留下必要的。

内存优化就比较复杂,例如有段内存空闲,内核没使用,怎么利用起来。某个程序消耗内存太多,也需要优化。

end

往期推荐

直到我干了底层开发,才知道不写业务代码有多爽

你解决bug的能力,暴露了你的水平

入职Linux驱动工程师后,我才知道的真相......

很底层的性能优化:让CPU更快地执行你的代码

薪资倒挂,大家都沉默了...

机遇:我是如何走向Linux驱动的...

当我用几道题考了一遍做Linux驱动的同事......

相关文章
|
机器学习/深度学习 人工智能 算法
展望2024: 中国AI算力能否引爆高性能计算和大模型训练的新革命?
2023年是人工智能发展的重要转折年,企业正在从业务数字化迈向业务智能化。大模型的突破和生成式人工智能的兴起为企业实现产品和流程的革新提供了先进工具,引领产业迈入智能创新的新阶段。在这个新时代,企业不再仅关注如何增强智能化能力,而更加注重如何利用人工智能实现产品和流程的革新。
3267 0
|
开发工具 Perl
zynq 7000 sdk下裸机can(ps/pl) 调试
zynq 7000 sdk下裸机can(ps/pl) 调试
1504 0
zynq 7000 sdk下裸机can(ps/pl) 调试
|
存储 编译器 C语言
深度:用10000字总结了嵌入式C语言必学知识点
深度:用10000字总结了嵌入式C语言必学知识点
661 1
|
3月前
|
小程序 前端开发 关系型数据库
告别“月月光”:Uni+Php校园系统小程序,给大学生的低成本创业方案,学业赚钱两不误
uni+Php,寓意“大学加技能”,融合技术与校园生活。轻量小程序整合跑腿、团购、打印等服务,助力学生技能变现。PHP低成本架构,快速落地,覆盖代取快递、宿舍团购、失物招领等高频需求,打造校园一站式服务平台,实现多渠道盈利,月入过万可期。
告别“月月光”:Uni+Php校园系统小程序,给大学生的低成本创业方案,学业赚钱两不误
|
7月前
|
定位技术 API Android开发
怎么把定位改成你想要的位置?
GPS定位修改技术指南 一、定位修改技术原理
|
API 数据安全/隐私保护 UED
文档智能(Document Intelligence)与检索增强生成(Retrieval-Augmented Generation, RAG)
文档智能(Document Intelligence)与检索增强生成(Retrieval-Augmented Generation, RAG)
379 1
|
算法 网络协议 Linux
Linux模块文件编译到内核与独立编译成.ko文件的方法
Linux模块文件编译到内核与独立编译成.ko文件的方法
5115 0
|
测试技术 开发工具 git
面向 C++ 的现代 CMake 教程(三)(3)
面向 C++ 的现代 CMake 教程(三)
711 0
|
存储 数据挖掘 Linux
在Linux中,LVM(逻辑卷管理)的主要优势是什么?如何扩展LVM卷?
在Linux中,LVM(逻辑卷管理)的主要优势是什么?如何扩展LVM卷?
|
机器学习/深度学习 人工智能 编解码
《GAP8人工智能物联网芯片》:毫瓦级人脸识别 – 识别篇
人脸识别因在安全领域的不同应用(门锁,门禁,闸机等)而受到了学界,业界及媒体的广泛关注,同时人脸识别也可以被广泛应用于各种其他方案,如刷脸取纸,账户管理等等。设备可自动的使用者(区别于其他使用者)可以创造出完全不一样的用户体验,如人脸识别咖啡机可识别了解每个用户对不同咖啡的喜好程度,从而推荐或制作符合用户口味的咖啡。同时,咖啡供应商也可以根据结果进行更详细的市场分析,物流管控,生产调整等从而获得更高的利润。是否可以仅用数美金就让现有设备配备可以长期依赖电池运行的人脸识别功能? AliOS Things + GAP8让这一切可以轻松得以实现!
《GAP8人工智能物联网芯片》:毫瓦级人脸识别 – 识别篇