当前位置: 首页 > news >正文

上位机图像处理和嵌入式模块部署(linux小系统开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        和若干年前相比较,现在嵌入式linux开发要简单得多。稍微贵一点的有树莓派,国产的有各种水果派,基本上都可以按照不太贵的价钱,就可以买到合适的开发板。这些开发板说是开发板,其实大部分内部或多或少都集成了ubuntu系统,本身系统都是带有界面的,使用十分方便。就和我们平时虚拟机安装的Ubuntu系统一样,还是比较容易上手的。

        实际生产中,不管是从成本,还是从需求的角度出来,还有一种linux裸板开发的模式,大家也需要重视一下。和ubuntu上面,大部分第三方库只需要apt-get即可下载不同,裸板里面的很多功能都是需要自己单独开发的,难度上面要稍微复杂一点。

1、大部分裸板开发都是面向单一场景

        很多linux系统只需要满足特定的功能即可,比如说安防里面的linux、数控车床上的linux、唱戏机里面的linux等等。这种情况下,嵌入式系统越简单越好,不需要额外的功能。

2、裸板开发就是最简系统+app

        这里的最简系统包括最小电路+最小软件系统。电路部分的话,就是电源、输入、输出、屏幕、usb、soc、ddr、spi nor、tf卡这些。最小系统的话,就是uboot、device tree、kernel、busybox这些。至于app,要根据客户的需求,进行对应的开发。

3、第三方库一般都需要自己编译

        由于不像ubuntu apt-get那样方便,这个时候很多的第三方库都需要自己编译。比如说常用的boost、opencv、qt等等。这些编译其实也不复杂,就是花费的时间比较长。另外也不是每次都要编译,所以整体上还是能够接受的。

4、编译需要在virtualbox虚拟机完成

        因为系统本身都是最简系统,所以也不要指望我们开发的代码可以直接在板子上编译了。这种情况下,大部分都是ubuntu交叉编译好,然后传到板子上去。编译工具的话,一般都是soc厂家提供的。

5、板子空间有限、大部分用nfs挂载调试

        很多linux裸板开发,本身的flash大小并不宽裕。如果是从tf卡启动,那空间可能还好一点。如果是spi norflash、spi nandflash,一般空间上面都不会很大。这个时候开发的话,通常都是借助于nfs系统,把虚拟机的目录挂载到板子上进行开发。这样,一方面空间没有约束,另外一方面编译和调试也很方便。

6、学会交叉编译调试方法

        之前看到大部分同学嵌入式linux调试都是看log,但是对于复杂的bug,最好还是通过gdb server+gdb的方式进行单步调试,这样效果要好得多。

7、充分发挥硬件自带的加速功能

        虽然linux生态很丰富,很多软件都有开源代码。但是要真正发挥soc的硬件性能,最好还是能够找到官方的驱动代码、官方的文档,利用硬件来做加速,这样不仅速度快,而且效果也比较好,对于cpu来说也没有负担。不同soc之间,在软件层面其实差别不大,最大的区别就是硬件能力,特别是硬件的加速能力,这一点非常重要。

8、充分发挥linux内核的能力

        既然是裸板开发,那么有的时候为了满足客户的需求,需要掌握一点魔改内核的能力。比如是不是可以节省一点内存,专门用于多进程通信使用;是不是可以使用汇编指令加速一下算法的运算;是不是复用一下gpu、dsp、mcu、mpu的资源等等,这些都是可以着墨的地方。

        另外一个常用的优化方法就是dma,这一点大部分soc都是自带的,但是很多同学还是喜欢自己用cpu把数据搬来搬去。

9、降本和提升性能并行

        目前的形势,都是以将本增效为主。指望不提升软件和嵌入式开发能力,单纯增加soc性能去满足客户需求,操作不可行,成本也没有办法稳住。这个时候,一个比较常用的办法,就是用A行业成熟的方案,去做B行业的细分客户。这个时候如果发挥硬件的能力、如何做好裸板linux的开发,就显得尤为重要了。这需要开发者既知道客户的需求,还能在soc、系统、软件和硬件层面,在成本可控的情况下,最大程度去满足客户的要求,目前来说这是非常考验人能力的。

10、常见的小系统开发

        在Linux开发这部分,目前来说个人开发主要两种类型的板子。一种是带ubuntu系统的板子,这类板子有树莓派、鲁班猫;另外一种就是今天说的linux小系统开发。这部分板子主要是以全志、海思为主。其中海思的soc和板子都不错,非常建议大家学一学,里面有不少硬件加速的资源,对于自己理解海思soc的架构很有帮助。


http://www.mrgr.cn/news/33276.html

相关文章:

  • 字符串 下【KMP再续】
  • GitHub每日最火火火项目(9.22)
  • 【Elasticsearch系列十八】Ik 分词器
  • 解锁电商新视野:京东商品详情API——您的精准商品信息探索利器
  • Java后端中的延迟队列实现:使用Redis与RabbitMQ的不同策略
  • AI学习指南深度学习篇-Adadelta简介
  • JavaScript(二)
  • 【Linux 从基础到进阶】 AWS云服务在Linux上的应用
  • C\C++内存管理详解
  • PHP在将数据存储到数据库之前如何转义数据
  • Java项目实战II基于Java+Spring Boot+MySQL的植物健康系统(开发文档+源码+数据库)
  • 算法题之每日温度
  • python发送邮件 - email smtplib
  • SOMEIP_ETS_122: SD_Interface_Version
  • Linux文件IO(七)-复制文件描述符
  • Codeforces Round 974 (Div. 3) B. Robin Hood and the Major Oak
  • 通信工程学习:什么是NFV网络功能虚拟化
  • C++primer第十一章使用类(矢量随机游走实例)
  • 详细分析Spring的动态代理机制
  • LeetCode题练习与总结:回文链表--234