本文主要是介绍韦东山:驱动和APP,根本不应该上升到互相鄙视的地步,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在线课堂:https://www.100ask.net/index(课程观看)
论 坛:http://bbs.100ask.net/(学术答疑)
开 发 板:https://100ask.taobao.com/ (淘宝)
https://weidongshan.tmall.com/(天猫)
交流群一:QQ群:869222007(鸿蒙开发/Linux/嵌入式/驱动/资料下载)
交流群二:QQ群:536785813(单片机-嵌入式)
公 众 号:百问科技
版本 | 日期 | 作者 | 说明 |
---|---|---|---|
V1 | 2020 | 韦东山 | 技术文档 |
全明星学员群异常活跃,韦老师上午瞄了一眼群消息,看到还是有人执着于讨论做驱动好还是做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,根本不应该上升到互相鄙视的地步的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!