韦东山:驱动和APP,根本不应该上升到互相鄙视的地步

2024-03-31 23:58

本文主要是介绍韦东山:驱动和APP,根本不应该上升到互相鄙视的地步,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在线课堂:https://www.100ask.net/index(课程观看)
论  坛:http://bbs.100ask.net/(学术答疑)
开 发 板:https://100ask.taobao.com/ (淘宝)
     https://weidongshan.tmall.com/(天猫)
交流群一:QQ群:869222007(鸿蒙开发/Linux/嵌入式/驱动/资料下载)
交流群二:QQ群:536785813(单片机-嵌入式)
公 众 号:百问科技


版本日期作者说明
V12020韦东山技术文档

全明星学员群异常活跃,韦老师上午瞄了一眼群消息,看到还是有人执着于讨论做驱动好还是做APP更好,
甚至上升到了驱动鄙视APP的地步,于是韦老师沉思半晌敲下了下面的文字:

回看了你们上午聊的信息,
驱动和APP,根本不应该上升到互相鄙视的地步;
就像刚学LINUX时,看不起WINDOWS一样幼稚。
linus也不是我们的爹,linux又不是我们家的,只是兴趣、更多的是吃饭工具而已。
中午写了些体会,想看就看

火哥(群友烈火雄风)说得对,
驱动很多时候只是起hw enable的功能,如果只把眼光放在驱动上,工资不会高。
天天把驱动和应用对立起来,互相鄙视,这是最愚蠢的行为。

旧话重提了:
学了驱动的人,
想做专家:可以研究内核;或者可以选某个方向,图像处理...
想做领导:一定要涉及APP、涉及公司里的业务,多接触客户;还要会管理
想开公司:没钱时从上到下都要懂,能把控每一层。

驱动只是基础能力,要想提升,需要在更宽广或更深入的领域里花大量的精力。

简单的驱动能力,是让你进入嵌入式这行的基本能力;
如果要在操作系统层混,对LINUX内核整个系统的深入理解,可以让你实现高薪;

如果想在某个专业混,比如AI, openGL,那去研究它吧,跟嵌入式关系不大:
但是,我一同学是AI博士,他不知道怎么把自己的算法在芯片上跑起来,也不知道怎么选择芯片。如果他懂点嵌入式的知识,他就不用到处找人了。

大公司里每一个人负责一小块,中小公司玩不起这样的配置,中小公司需要你啥都会。
就比如我们公司里,4个工程师,都会写驱动、移系统,也会写APP,更会写文档;
Visual C++我们会;QT GUI也会;连网站搭建我同事也会。
会写驱动在这里只是基本技能,从它入门。

如果想做APP,知道怎么交叉编译、怎么写LED驱动、怎么让自己的APP开机启动,底层的知识只需要知道这些也就够了。

我工作时,2年时间里就只写过或是修改过2、3个驱动:PCI、显卡、SATA硬盘。
更多的时间,是在解决各类BUG、优化软件优化硬件。
1.有一项目用到2个芯片:Linux IC用于界面显示,DSP用于数据处理,两者通过PCI通信。
你以为写出PCI驱动、定义数据传输格式,这就完了?
那个DSP一全速工作,PCI就完全卡死。
我需要优化这种情况,加上更复杂的容错措施。
在LINUX标准的PCI驱动里,它只是简单地返回错误。
我要修改驱动程序,启动一内核线程,当PCI出错时要不断尝试。

2.有一项目用的是mips架构的2.4的内核,每当使用信号处理函数时,系统就崩溃。
各位APP大牛调得欲仙欲死,
最后交给我,用了1个月发现是内核BUG,用了1秒钟修改了一条代码就搞定。
这都跟驱动没关系啊,我不只是驱动工程师。
这需要对内核的信号处理系统、上下文保存、恢复有深入理解。
(我是临时学的,毛德操的<Linux内核情景分析>里有一章专门讲信号的处理)

3.我们部门的APP都喜欢用网络来打印调试信息,有一项目偶尔会卡死。
这时网络打印功能失效了,串口也没有任何输出信息。
咋办?
我去修改内核滴嗒中断,在中断程序里查看当前进程ID,如果在10秒内都是同一个ID,
那就认为这个ID对应的进程卡死了,打印它的堆栈信息,定位到卡死的地方。
这需要你对内核的中断机制、进程调度、上下文保存、栈回溯有了解。

4.SATA驱动写出来了,能用,但是一传输文件就卡系统。
得改进,内核里原先不支持DMA,我们得加上。
如果没有DMA咋办?用内核线程,
总之不能让驱动一直占用时间。

5.制定升级方案:双系统、安全模式,要升级时先在FLASH上设置标记位,然后重启。
UBOOT检查标记位,以决定是否进入ramdisk实现的安全模式。
在这个模式下通过网络下载、烧写文件到FLASH。

各类产品的升级方案各有不同,有些只需要升级APP;
有些需要升级内核+APP整个系统,
需要全盘考虑才能实现。

6.有一哥们公司的产品,使用厂家的BSP,整个公司没有一个底层开发人员。
他们的产品碰到一问题:挑SD卡,有些SD卡使用起来完全没问题,有些就有问题。
怎么解决?
好吧,这终于跟驱动有关了。
但是也不需要你写,但是有个前提:你要理解那些驱动
然后分析那些出错的SD卡,用dd命令读写少量数据没问题,用文件系统就有问题,后来发现是DMA传输导致问题。

7.还有一BUG,是我从中兴离职后回去帮忙的,我也没搞定。
U盘问题:反正是很莫名其妙,最后怀疑可能是芯片BUG,如果对USB协议很熟悉,那么应该可以定位这问题。

8.这是一个充满BUG的世界,不要神化原厂。当你的产品逼近芯片的极限时,各类BUG就出来了。
我在中兴时的老大,不就逼得TI乖乖承认自己的芯片MAC有BUG?
他对网络协议有深入的理解:驱动程序里发出A,就应该得到B。你TI的芯片返回的是C,所以你有BUG。

9.还是LINUX IC跟DSP双芯片系统,LINUX IC需要通过SPI给DSP下载程序。
但是这DSP的SPI时间要求非常严格,不是标准的SPI。
你想用LINUX自带的SPI驱动是不行的,
改!
反正只需要开机时下载一次,那就在SPI传输前关掉所有中断,用GPIO查询方式实现SPI下载。

再贴一下群友和韦老师的对话记录。

张三石:感觉学了1 2 3 4期 还是不能成为高手。还有太多的东西要学,GPU OPENGL AI、、并行异构等等 。

韦东山:
对于学生,可以让你快速入门;对于工作的人,如果你恰好做到某个模块比如ALSA,就参考一下视频。
我高中同学他们给科大讯飞做语音机器人,碰到声卡问题搞不定,我就是把ALSA视频扔给他。
注意,他们都是做APP的。
但是,对于有编程经验的人,无论是驱动还是APP,都是一堆逻辑而已。

关键还是形成能力,逻辑思维、处理事情;但是要我现在去学python什么的,我虽然没看过,但是我想2、3天我就可以入门。

锐变:韦老大,我想知道你对于AI兴起能够带动嵌入式领域这一说法怎么看?

韦东山:
AI、5G、物联网都能对嵌入式起带动的作用,
传感器这边用单片机,各类RTOS值得学学,MQTT协议也许是个好东西;
各类手挂终端、网关,就是LINUX了;
AI估计在云端;
这些会促进各类设备的出现,有设备就有嵌入式啊。

温同学:不如说一下,你是怎样锻炼自己的学习能力的?遇到问题,在资源匮乏的情况下,你是怎样的解决思路?

韦东山:我只有3个建议:
1.写代码
2.解决BUG , // 在解决BUG的过程中,在百思不得其解的情况下,你就像无头苍蝇一样你想到相关的、不相关的可能原因ABCDEF,你会把这些所有关系都理清,这就是融汇贯通的过程
3. 资源匮乏,只能依赖网络、请教他人了。
我刚学LINUX时,那时chinalinux论坛还没倒闭,里面有我发的很多初级问题请教贴

这篇关于韦东山:驱动和APP,根本不应该上升到互相鄙视的地步的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/865705

相关文章

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

编程应该用 Mac 还是 PC ?

『有人的地方,就有江湖』—徐克。笑傲江湖。     序     一个竞争的市场,就会有对立的产生,这世界存在著很多不同的领域,领域好比是个江湖的缩影,因此就有许多门派的纷争,例如说浏览器领域有著最大宗的IE派,门派成长速度飞快,武功版号跳的跟台湾物价指数一样快的Chrome门,不断被模仿,一直被超越的Opera派;韧性极强,一直对抗几大势力的Firefox派等等,程序语言也有自己的领域

MFC中App,Doc,MainFrame,View各指针的互相获取

纸上得来终觉浅,为了熟悉获取方法,我建了个SDI。 首先说明这四个类的执行顺序是App->Doc->Main->View 另外添加CDialog类获得各个指针的方法。 多文档的获取有点小区别,有时间也总结一下。 //  App void CSDIApp::OnApp() {      //  App      //  Doc     CDocument *pD

驱动(RK3588S)第七课时:单节点设备树

目录 需求一、设备树的概念1、设备树的后缀名:2、设备树的语法格式3、设备树的属性(重要)4、设备树格式举例 二、设备树所用函数1、如何在内核层种获取设备树节点:2、从设备树上获取 gpio 口的属性3、获取节点上的属性只针对于字符串属性的4、函数读取 np 结点中的 propname 属性的值,并将读取到的 u32 类型的值保存在 out_value 指向的内存中,函数的返回值表示读取到的

驱动安装注册表指令

HKCR: HKEY_CLASSES_ROOT HKCU: HKEY_CURRENT_USER HKLM: HKEY_LOCAL_MACHINE HKU: HEKY_USER HER: 相对根键

UMDF驱动安装

VS2013 + WDF8.1,UMDF驱动选择User Mode Driver,不要选User Mode Driver 2.0,否则Win7安装有问题,如图 另外,在驱动安装时不要忘记WUDFUpdate_<主版本号><次版本号>.dll文件,具体文件名在INF中查找。此文件可在WDF的安装目录中找到。注意:在WDF的安装目录中会有3个WUDFUpdate_xxx.dll文件,x86,x6

ConstraintLayout布局里的一个属性app:layout_constraintDimensionRatio

ConstraintLayout 这是一个约束布局,可以尽可能的减少布局的嵌套。有一个属性特别好用,可以用来动态限制宽或者高app:layout_constraintDimensionRatio 关于app:layout_constraintDimensionRatio参数 app:layout_constraintDimensionRatio=“h,1:1” 表示高度height是动态变化

App Store最低版本要求汇总

1,自此日期起: 2024 年 4 月 29 日 自 2024 年 4 月 29 日起,上传到 App Store Connect 的 App 必须是使用 Xcode 15 为 iOS 17、iPadOS 17、Apple tvOS 17 或 watchOS 10 构建的 App。将 iOS App 提交至 App Store - Apple Developer 2,最低XCode版本 Xcod