韦东山:驱动和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

相关文章

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

WDF驱动开发-WDF总线枚举(一)

支持在总线驱动程序中进行 PnP 和电源管理 某些设备永久插入系统,而其他设备可以在系统运行时插入和拔出电源。 总线驱动 必须识别并报告连接到其总线的设备,并且他们必须发现并报告系统中设备的到达和离开情况。 总线驱动程序标识和报告的设备称为总线的 子设备。 标识和报告子设备的过程称为 总线枚举。 在总线枚举期间,总线驱动程序会为其子 设备创建设备对象 。  总线驱动程序本质上是同时处理总线枚

华为某员工爆料:偷偷跑出去面试,被面试官鄙视了。第一句话就问:华为淘汰的吧,35岁了,这个年龄在华为能混得下去吗?身体没啥毛病吧

“你都35岁了,难不成是被华为淘汰的?在华为混不下去了吧?身体没啥毛病吧,我们这体检可是很严的。” 近日,一位华为员工在朋友圈爆料,自己在面试时遭到了面试官的无理取闹和人身攻击,原因仅仅是因为他35岁了,曾经在华为工作过。 这番话,充满了傲慢与偏见,让人听了义愤填膺。这位面试官的言行,不仅是对求职者的不尊重,更是对职场规则的践踏。 面试本应是双向选择的过程,企业和求职者在相互了解的基

同城跑腿APP开发,随叫随到超方便!

随着移动互联网的发展和人们生活节奏的加快,越来越多的人们没有闲暇的时间来做一些繁琐的事情,比如说买药、挂号、排队、送花、取文件等等。如果没有时间去处理这些事情怎么办?开发同城跑腿APP,提供跑腿服务,随时办事随时下单,只需在手机上轻轻一点,就可完成跑腿需求。 首先,跑腿小程序有几种开发方式。第一种是自己组建开发,这种方式比较适合有软件开发能力的企业,比较花费时间和金钱成本。第二种是找到第三方

WDF驱动开发-特定于KMDF的技术(一)

这部分的技术是一些零散的记录知识点,它们主要是在WDF框架中特定于KMDF的部分。 将内核模式驱动程序框架和非 PnP 驱动程序配合使用 如果要为不支持 即插即用 (PnP) 的设备编写驱动程序,则驱动程序必须: 在 WDF_DRIVER_CONFIG 结构的 DriverInitFlags 成员中设置 WdfDriverInitNonPnpDriver 标志;提供 EvtDriverUnl

ADD属性驱动架构设计(一)

目录 一、架构设计过程 1.1、架构设计过程 1.1.1、设计目的 1.1.2、质量属性(非功能需求) 1.1.3、核心功能(功能需求) 1.1.4、架构关注 1.1.5、约束条件 1.2、基于设计过程 二、什么是ADD? 三、为什么选择ADD? 四、作用 五、ADD实现步骤 5.1、架构设计目标 5.1.1、系统类型确定  5.1.2、系统阶段确定 5.2、建

博通5720 windows server 2003 32位网卡驱动和系统

driver for DELL R320 Broadcom 5720 Windows 2003 32bit 本人安装windows server 2003 网卡驱动成功!! 提供方便网盘下载地址博通5720网卡驱动 : http://pan.baidu.com/s/1GQWpw  windows server 2003 ghost 系统: http://pan

无霍尔BLDC驱动

目前主要的无霍尔控制方案是基于反电势检测信 息判断换相点,本文研究反电势在 PWM - OFF 点的检 测方案确定换相点。 1. 反电动势检测方案 BLDC 的模型做等效,将线圈阻抗看成是一个 线性电阻和一个储能电感的等效,其等效电路图如图 1所示。 电机三相绕组输出端电压的电压方程组为 式中,LM = L - M; Ua0、Ub0和 Uc0为三相绕组输出端对直 流电源地的电压。e

嵌入式linux系统中LCD屏驱动实现思路分析

在 Linux 下 LCD 的使用更加广泛,在搭配 QT 这样的 GUI 库下可以制作出非常精美的 UI 界面。接下来就来学习一下如何在 Linux 下驱动 LCD 屏幕。                           第一:Framebuffer设备简介       先来回顾一下裸机的时候 LCD 驱动是怎么编写的,裸机 LCD 驱动编写流程如下: ①、初始化 I.MX6U

Linux float int和16进制互相转换

Linux 上float int和16进制互换操作。之前把float转16进制,也就是转成4个字节,方便使用串口传输嘛。使用的方法是: //float 转 16进制float x_pid_p = 15.0;unsigned char * bValue = (unsigned char *)& x_pid_p;printf("%x\t%x\t%x\t%x\n", bValue[0], bVa