查看: 15687|回复: 38

大咖问答第十一期:韦东山解答单片机和Linux等嵌入式问题

  [复制链接]

该用户从未签到

发表于 2020-7-6 14:07:36 | 显示全部楼层 |阅读模式
分享到:
960x160.jpg

本期邀请到了嵌入式Linux开山鼻祖级别韦东山@weidongshan老师,参加电路城论坛第十一期大咖问答(7月6日-7月19日),本期将由韦东山@weidongshan为大家解答关于嵌入式Linux方面的问题。

大咖简介:
[韦东山],2003年毕业于中国科学技术大学,电子专业、软件专业双学位。近10年嵌入式开发经验,曾在知名公司领导团队全程开发车载手机, 在中兴通信负责网络电视、机顶盒、IPCamera多个项目的 Linux 底层系统开发。
本期大咖代表著作:《嵌入式Linux应用开发完全手册》
33.png

相信大家对于嵌入式会有不少的问题,那么不妨带着问题进入到本期的大咖问答。

本期问答内容:

单片机和Linux的区别或有其他关于嵌入式的问题,也欢迎大家积极提问!

本期大咖问答由韦东山老师提供5套精品课程《嵌入式Linux编程之驱动的同步与互斥》,将在问答结束后挑选5名参与人免费赠予

大咖问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家就嵌入式方面的问题向韦东山 提问,请直接回帖提问。


往期《大咖问答》栏目内容:








回复

使用道具 举报

该用户从未签到

发表于 2020-7-9 17:08:29 | 显示全部楼层
Q向涵Q 发表于 2020-7-7 13:25
linux开发应用一般在什么产品上比较多,比如有哪些典型的产品?

以身边设备为例:
无线路由器、家用摄像头、智能电视、机顶盒、电视盒子、百度智能音箱、儿童手表、
楼宇对讲、电梯里的广告机、饭店里的点菜机、顺丰小哥用的像手机一样的扫描设备、
各种人脸识别的设备、超市的POS机、沃尔玛的自动识别货物自动称重的智能称重器,
这些设备,要么是需要酷炫的显示,要么是需要完整的网络功能,要么需要第三方软件比如AI,
单片机很难实现,统统需要Linux。

回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2020-7-9 17:08:29 | 显示全部楼层
Q向涵Q 发表于 2020-7-7 13:25
linux开发比安卓开发,有哪些优势

安卓的底层就是Linux,
先说说安卓的缺点把:
体系太庞大太复杂,出问题的话中小公司都很难搞定。
所以安卓用在手机上比较多,很难在手机圈外面使用。
对于其他非手机的设备,也是基于厂家提供的整套方案来使用:
比如平板用全志的方案,广告机用瑞芯微的方案。

Linux相比于单片机,有更强的硬件性能、更丰富的软件,不在需要重复造轮子。
相比于安卓,用Linux开发又能比较深入地掌控整个系统。
使用安卓,一是硬件性能要求更高,二是软件更复杂维护起来也更困难,
不做通用设备比如手机这些,用安卓干嘛呢?
如果设备上面运行的就是你们自己的软件,没考虑运行第三方软件,不建议用安卓。
我录制安卓都接近5年了,每一个模块都搞得复杂无比,后悔入坑安卓。
当然,公司实力强就是另一回事了,要做出一个平台设备,让客户去使用APP市场的各类软件,这种场合非安卓不可。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2020-7-9 17:08:29 | 显示全部楼层
天师猫神 发表于 2020-7-7 13:46
嵌入式Linux能用在工业自动化上吗

当然可以,实际上很多公司都有基于Linux的工业自动化产品。
比如NXP公司在2017年就推出了“开放式Linux系统”(OpenIL),可以解决Linux的实时性问题。
在工业领域使用Linux的缺点主要是实时性,
可以是同经过实时性改造的Linux,
也可以搭配单片机:单片机进行实时性处理,Linux进行数据传输、处理、GUI显示等待。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2020-7-9 17:08:29 | 显示全部楼层
天师猫神 发表于 2020-7-7 13:47
嵌入式Linux所做的产品一般有什么缺点

在工业领域,主要是实时性差。
在非工业领域,我认为它几乎没有缺点:
1.现在低端的能运行Linux的芯片,价格比单片机贵不了多少
2.国内Linux人才数量起来了,这意味着软件成本也低。
如果非要找出一些缺点,就是门槛比单片机高。
硬件成本:单片机可能几块钱就可以实现一个功能,非要强上Linux的话需要几十块。
软件成本:单片机软件开发相对简单,Linux那一套入门要半年吧
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2020-7-9 17:08:29 | 显示全部楼层
天师猫神 发表于 2020-7-7 13:48
嵌入式Linux在各种智能机器人上用了多吗,,比如服务型机器人,水上运输机器人,,空中飞行机器人?

我没去看多这些机器人的方案,
但是大疆无人机是Linux+单片机的组合。
就像前面说的:单片机进行实时性处理,Linux进行数据的复杂处理
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2020-7-9 17:08:29 | 显示全部楼层
yinwuqing 发表于 2020-7-8 12:39
韦老师,您好!Linux中的多进程多线程,同步与互斥访问,一个进程的pid是怎么形成的?kill一个进程,只需要kill这个进程所对应的pid号,那这个号其本质是什么?32位系统与64位系统,所申请的pid号位数会一样长吗?

一个进程在内核里有一个task_struct,内核中每个task_struct编个号,这就是PID了。
至于32位、64位系统的PID,你可以看内核里的task_struct结构体,它的PID都是int类型,都是32位。
kill掉进程,实际上是kill程序发信号,发给要PID对应的进程。
也就是PID对应的task_struct会被设置位“有信号等待处理”。
信号怎么被处理呢?
1.一个进程的运行空间是分为用户态、内核态的,
比如程序调用write函数时,是运行于用户态;
在write函数里,会调用一条汇编指令,比如 swi #xxx,这就会进入内核态,
在内核态里,首先保存“用户态的返回地址”,然后调用内核的sys_write函数。
2.执行完sys_write,系统会从“用户态的返回地址”继续运行代码
上面1、2是正常的流程。
如果内核在继续从“用户态的返回地址”执行之前,也就是从内核态返回用户态前夕,
发现有普通的信号信号要处理,怎么办?
内核会偷偷修改“用户态的返回地址”,改为信号函数的地址,
这样进程就会先运行信号函数,
运行完信号函数后,再从原来的“用户态的返回地址”继续运行。

如果是特殊的信号,比如KILL信号,那么进程就退出好了,不再执行。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2020-7-13 15:09:11 | 显示全部楼层
zcp6 发表于 2020-7-10 19:59
韦老师 您好   用嵌入式Linux做什么项目可以新颖一点  在比赛当中可以脱颖而出  目前还没有好的想法

现在比较新奇的、秒杀单片机的,也就是嵌入式Linux+AI,你可以从这方面考虑一下。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2020-7-13 15:09:11 | 显示全部楼层
yinwuqing 发表于 2020-7-10 21:26
韦老师,如果在编译一个应用程序需要第三方插件支持,而这个插件下载又下载不了,服务器在国外。将软件源更换成国内的链接地址,但还是找不到资源包,而且没有安装这个插件就编译不了这个应用程序,这种情况下怎么解决呢?另外如果一个双核MCU,能够实现一个核运行Linux系统,另一个核运行RTOS,两个核实时相互通讯呢? ...

1.翻墙
2.现在我们正在做的STM32MP157开发板,有连个cortex A7,运行Linux;有一个cortem M4,运行RTOS。
Linux和RTOS是可以通信的,有厂家已经实现的库直接给你用。
如果不是STM32MP157,那可以自己实现这些通信功能,
这要看你的电路是怎么接的了:
双口RAM、I2C/spi等等都可以实现通信。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2020-7-13 15:09:11 | 显示全部楼层
yinwuqing 发表于 2020-7-12 14:24
韦老师,您好!Linux是否是实时系统?如何提高Linux系统和应用的实时性?有时候会遇到嵌入式系统中的优先级翻转,一般什么情况下优先级会出现翻转,以及如何避免优先级翻转呢?

Linux不是实时操作系统,
有一些实时性的改造:但是我没用过。
要避免优先级反转,主要就是避免中断处理过程太长:
Linux提供了很多种方法:中断下半部、工作队列、tasklet、中断的线程化处理。
这些技术在我新录制的视频里有介绍。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2020-7-13 15:09:11 | 显示全部楼层
TLLED 发表于 2020-7-13 08:13
你好,韦老师,想请教下linux系统和单片机相比,在实时性方面,那个更好

Linux不是实时操作系统,单片机的实时性更好
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2020-7-13 15:09:11 | 显示全部楼层
俏如来 发表于 2020-7-13 10:49
接触liunx有很长一段时间了,一直没有入门,因为工作中用不到,现在想入门提高一下自己,liunx现在主要做应用的比较多吧,做驱动方面需求现在市场需求现在还多么.

很多公司甚至没有驱动的职位,比如科大讯飞的某个部门是做语音机器人的,直接用filrefly的板子,底层全不管的。
所以从这个角度看,驱动的需求并不多。
但是很多中小公司都是上下一条龙,APP到驱动都是几个人搞定,需要你什么都懂。
入门的话,建议掌握一些驱动基础后,就做APP、做项目吧。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2020-7-13 15:10:01 | 显示全部楼层
tonecrow 发表于 2020-7-13 13:09
会单片机编程,如何入门嵌入式linux学习比较好?

嵌入式Linux系统有这些组成:u-boot, linux, 驱动, APP。
很多初学者喜欢按照这个流程学习:先学习裸机熟悉开发板,再学习u-boot,接下来学习驱动,最后学习APP。
学习裸机需要2、3个月,学习u-boot也需要2、3个月,结果工作中u-boot基本不用改,并且u-boot比驱动开发还难!
按这套流程下来,学了后面忘了前面,最惨的是:不能快速上手工作,消耗学习热情!
所以我建议:
1.你都会裸机了,对硬件编程不是小白了,不需要再学习裸机
2.不学uboot,会烧写UBOOT、会执行UBOOT命令就可以了,如果你的工作就是该UBOOT那再去深入学习
3.学习Linux APP开发基础知识,比如文件读写、LCD编程、触摸屏编程、网络通信、进程通信、多线程编程
4. 学习一些Linux驱动基础,不需要太深入,会点灯、知道设备树,会用中断就可以。
   为什么还要学习驱动呢?让你有个概念,以后你跟其他工程师交流时不至于懵逼。
   并且中断程序引入的进程、线程、休眠唤醒、POLL、异步通知等概念,对于APP开发也很有帮助。
5. 直接上项目:把驱动基础、APP基础融合起来做一个项目
6.入门之后再按需学习,工作中涉及驱动就去学习驱动,工作中涉及什么再去深入研究。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2020-7-13 16:02:45 | 显示全部楼层
1597685605 发表于 2020-7-13 11:14
想问下,学习cotrex-A内核的片子,上linux,该打哪些基础,我也学习过2440片子,但是去看视频的时候好多都不懂,学着感觉挺难的,能给下学习的建议么,更好的入门

其实Linux的学习跟cortex A、ARM9什么没关系,
你学习时操作的是CPU之外的寄存区,跟CPU的架构没什么关系的。
你的问题应该是:怎么入门。
这问题都是类似的,我已经回答过,在贴一下:

嵌入式Linux系统有这些组成:u-boot, linux, 驱动, APP。
很多初学者喜欢按照这个流程学习:先学习裸机熟悉开发板,再学习u-boot,接下来学习驱动,最后学习APP。
学习裸机需要2、3个月,学习u-boot也需要2、3个月,结果工作中u-boot基本不用改,并且u-boot比驱动开发还难!
按这套流程下来,学了后面忘了前面,最惨的是:不能快速上手工作,消耗学习热情!
所以我建议:
1.不需要再学习裸机,即使你对硬件操作不熟,只要懂LED、按键的原理就可以。
  在Linux系统中,在入门阶段可以不涉及寄存器编程,裸机什么的也就不用学习了。
2.不学uboot,会烧写UBOOT、会执行UBOOT命令就可以了,如果你的工作就是该UBOOT那再去深入学习
3.学习Linux APP开发基础知识,比如文件读写、LCD编程、触摸屏编程、网络通信、进程通信、多线程编程
4. 学习一些Linux驱动基础,不需要太深入,会点灯、知道设备树,会用中断就可以。
   为什么还要学习驱动呢?让你有个概念,以后你跟其他工程师交流时不至于懵逼。
   并且中断程序引入的进程、线程、休眠唤醒、POLL、异步通知等概念,对于APP开发也很有帮助。
5. 直接上项目:把驱动基础、APP基础融合起来做一个项目
6.入门之后再按需学习,工作中涉及驱动就去学习驱动,工作中涉及什么再去深入研究。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2020-7-9 14:59:28
archimedas 发表于 2020-7-7 11:33
沙发,很早之前买了野火的linux开发板,到现在还没学,很迷茫,不想干嵌入式了,怎么办

有些人根据兴趣选择工作,
有些人根据钱途选择工作,
有些人不得已选择嵌入式Linux,
没有谁比谁高尚。
不想做了,如果有得选,那就不做了。
如果是因为学不会所以不做嵌入式,那我可以帮帮你。
支持 1 反对 0

  • TA的每日心情
    开心
    2021-2-24 14:30
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2020-7-7 11:33:15 | 显示全部楼层

    回帖奖励 +10 与非币

    沙发,很早之前买了野火的linux开发板,到现在还没学,很迷茫,不想干嵌入式了,怎么办
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-3-5 09:29
  • 签到天数: 18 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2020-7-7 13:25:07 | 显示全部楼层
    linux开发应用一般在什么产品上比较多,比如有哪些典型的产品?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-3-5 09:29
  • 签到天数: 18 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2020-7-7 13:25:24 | 显示全部楼层
    linux开发比安卓开发,有哪些优势
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-7-14 11:07
  • 签到天数: 1244 天

    连续签到: 54 天

    [LV.10]以坛为家III

    发表于 2020-7-7 13:46:18 | 显示全部楼层
    嵌入式Linux能用在工业自动化上吗
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-7-14 11:07
  • 签到天数: 1244 天

    连续签到: 54 天

    [LV.10]以坛为家III

    发表于 2020-7-7 13:47:18 | 显示全部楼层
    嵌入式Linux所做的产品一般有什么缺点
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-7-14 11:07
  • 签到天数: 1244 天

    连续签到: 54 天

    [LV.10]以坛为家III

    发表于 2020-7-7 13:48:42 | 显示全部楼层
    嵌入式Linux在各种智能机器人上用了多吗,,比如服务型机器人,水上运输机器人,,空中飞行机器人?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 11:43
  • 签到天数: 2291 天

    连续签到: 373 天

    [LV.Master]伴坛终老

    发表于 2020-7-8 12:39:42 | 显示全部楼层
    韦老师,您好!Linux中的多进程多线程,同步与互斥访问,一个进程的pid是怎么形成的?kill一个进程,只需要kill这个进程所对应的pid号,那这个号其本质是什么?32位系统与64位系统,所申请的pid号位数会一样长吗?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-15 00:12 , Processed in 0.357297 second(s), 60 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.