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

server/2024/9/23 5:17:40/

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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.ppmy.cn/server/120644.html

相关文章

镜像导入、标签设置与应用、探针测试

一、镜像导入 1、master主机下载镜像并打包 [rootk8s-master ~]# docker pull nginx:1.20.0[rootk8s-master ~]# docker pull nginx:1.21.0[rootk8s-master ~]# docker pull nginx:1.25.0[rootk8s-master ~]# docker pull busybox:latest[rootk8s-master ~]# docker save -o n…

梧桐数据库(WuTongDB):PostgreSQL 优化器简介

PostgreSQL 的查询优化器是一个高度复杂且功能强大的组件,负责将 SQL 查询转换为高效的执行计划。它采用了基于代价(Cost-based)的方法来评估查询计划的执行成本,并选择代价最小的执行方案。下面详细讲解 PostgreSQL 优化器的关键…

【有啥问啥】深度剖析:大模型AI时代下的推理路径创新应用方法论

深度剖析:大模型AI时代下的推理路径创新应用方法论 随着大规模预训练模型(Large Pretrained Models, LPMs)和生成式人工智能的迅速发展,AI 在多领域的推理能力大幅提升,尤其是在自然语言处理、计算机视觉和自动决策领…

Linux驱动开发 ——架构体系

只读存储器(ROM) 1.作用 这是一种非易失性存储器,用于永久存储数据和程序。与随机存取存储器(RAM)不同,ROM中的数据在断电后不会丢失,通常用于存储固件和系统启动程序。它的内容在制造时或通过…

【YMatrix、PostgreSQL】常用SQL集-持续更新ing

查看库中所有表信息-去除多余的分区表 SELECT t.table_name FROM information_schema.tables t LEFT JOIN pg_inherits i ON t.table_name i.inhrelid::regclass::text WHERE t.table_schema public AND i.inhrelid IS NULL;使用insert插入时,忽略库中重复数据&am…

植物大战僵尸【源代码分享+核心思路讲解】

植物大战僵尸已经正式完结,今天和大家分享一下,话不多说,直接上链接!!!(如果大家在运行这个游戏遇到了问题或者bug,那么请私我谢谢) 大家写的时候可以参考一下我的代码思…

【力扣 | SQL题 | 每日三题】力扣182

1. 力扣182:查找重复的电子邮箱 1.1 题目: 表: Person ---------------------- | Column Name | Type | ---------------------- | id | int | | email | varchar | ---------------------- id 是该表的主键(具有唯…

【软件工程】系统流程图

一、定义 二、常用符号 例题 选择题