构建基于Linux的嵌入式应用的一点想法

从模拟到数字的艺术:STM32 ADC与DMA如何重塑信号采集的边界 本文探讨STM32微控制器中ADC与DMA协同工作如何提升信号采集的精度与效率。通过分析多通道数据采集、硬件架构设计、噪声控制和高级配置技巧,展示了在音频处理、实时控制等高要求应用中实现高性能数据转换与传输的最佳实践。 阅读详情


一. 尽可能少的修改Linux系统的代码。

比较理想的情况是,只修改一行代码。

例如,在 /etc/rc.local脚本的最后,增加一行代码,那就是“/path/to/my_app/start.sh”。通过这一行代码就进入了我们的应用的世界。

这样的修改就很干净,而且这样的修改也很稳定,以后也基本不需要再有什么变化。


二. 不要直接启动我们的应用程序

注意,前一节启动的start.sh还不是我们的应用程序。他相当于用于发射火箭的发射架。start.sh中,可能会做很多准备工作,例如,驱动模块的加载,文件系统的mount,硬件是否就绪的检测,相关文件夹的创建,时间的同步,当前工作目录的设置等等。这些只是在应用启动时执行一次的工作,放在start.sh中做,是比较方便的。如果放在应用程序中做,不仅实现起来麻烦,维护起来也不方便(稍有变动,就得修改编译应用程序的代码)。


三. start.sh的最后一行干什么

start.sh在前面做了各种准备工作。这些都做完了,还要干什么呢?当然是拉起我们的应用程序。但是,如果想让系统的可靠性好一点的话,这里还是不要直接拉起最终的应用程序。而是拉起一个守护程序,例如,Daemon.exe。

Daemon.exe的实现逻辑要超级简单。简单到什么程度呢?简单到几乎不可能有任何bug。只有这样简单的代码,才经得起积年累月的运行而不崩溃。

那么Daemon.exe的任务究竟是什么呢?启动时,从配置文件中读取一个程序列表。将列表中的程序一个个拉起来。然后进入一个循环,监视列表中的程序有没有退出的。一旦遇到退出的程序,就再将他拉起来。


四. 应用程序的实现

上一节中,由Daemon.exe拉起来的程序列表中的程序,才是我们真正的应用程序。他可能由一个或多个可执行程序构成。这些程序的设计要注意什么呢?

1. 尽可能提供一些命令行选项

   例如,-m 5  -d 等。这样,允许我们不用修改代码就能改变系统特性。UNIX中的很多实用程序,基本都支持命令行选项。说到这里,再提一点。如果不是写临时性的非正式程序,最好不要直接使用argv[1]、argv[2]等来获得控制程序的命令行参数。因为这样做,用户就得按照顺序输入各个参数,这就会带来记忆的麻烦。另外,如果程序所需的参数个数发生了变化,可能会造成参数的输入顺序也得跟着变。

2. 通过配置文件提供丰富的特性控制

这样做,主要是提供给用户更大的灵活性。凡是容易有变化的地方,都做成配置项,放到配置文件中。程序根据配置文件的内容,决定应该如何表现。这样能更好的适应用户的需求。

也符合UNIX程序设计的哲学,程序提供的是机制,策略的事交给用户。


3. 核心程序要具有在运行时重新加载配置的能力

程序在启动时,通过配置文件读取了用户的配置,并且跑起来了。如果后面用户改变了配置,怎么办呢?有人可能想,把程序关掉,重新启动一下。对不起,有些高要求的场合是不允许这么搞地。例如,有些核心的程序,通过管道或socket为其他进程提供服务。核心程序挂了,会给使用他的服务的诸多进程造成很大麻烦。所以,核心程序不能挂。当然,使用核心程序的服务的程序可以挂。再例如,有些场合可能需要提供7*24小时不间断的服务。这个不间断,可能是几秒钟都不行哦。因此,核心程序在运行时能够重新加载配置,还是很重要的。

Vitis赋能:从零到一构建Linux嵌入式应用 本文详细介绍了如何使用Vitis工具从零开始构建Linux嵌入式应用,涵盖环境配置、工程创建、编译部署及进阶调试等关键步骤。通过实战案例展示Vitis如何解决开发环境碎片化问题,显著提升开发效率,特别适合ZYNQ等异构SoC的应用程序开发。 阅读详情

相关推荐

27、Linux内核与嵌入式应用调试全解析

本文深入解析了Linux内核与嵌入式应用调试的关键技术和方法,涵盖了KGDB、GDB、printk等工具的使用,以及交叉开发环境下的远程调试技巧。同时,文章总结了内核和应用调试中的常见问题及解决方案,并通过实际案例展示了调试的完整流程。适用于Linux开发人员和嵌入式系统工程师提升调试技能。

ee345的博客 116

第4篇:嵌入式Linux应用开发基础知识

嵌入式Linux应用开发基础知识

qq_42733748的博客 2302

Linux发展到6.0了,其在嵌入式应用中,实时性方面有没有一些改进?

各专栏更新如下👇Linux内核发展到6.0及更新的版本,在实时性方面确实取得了,其中最核心的改进是长期存在的。这对于嵌入式应用意味着,无需再费力地给内核打补丁,你就能直接使用一个具备“硬实时”潜力的Linux系统。

十年通信老兵的技术修炼之路——从3G到5G,从地面基站到卫星通信。 928

嵌入式Linux应用程序开发详解

 第二章 Linux基础命令这一章没什么好说的,记录几个自己以前不知道的。1.常见环境变量:HOME 根目录HISTSIZE 保存历史命令记录的条数LOGNAME 当前用户的登录名HOSTNAME 主机名2.设置环境变量的几种方法 echo, export, env(显示所有环境变量),set(显示所有本地定义的Shell变量),(unset清除所有环境变量)3

m_zhao的专栏 2457

嵌入式Linux开发全攻略:从原理到应用实践

嵌入式系统是专为执行独立、特定功能而设计的计算机系统。它们被广泛用于各种设备中,从家用电器到工业设备,以及汽车和通信基础设施。嵌入式系统的定义可从其关键要素——专用性、实时性和资源受限性——来理解。在嵌入式系统中,选择合适的文件系统类型对于系统的稳定性和性能至关重要。不同的文件系统类型适用于不同的应用场景,它们各有优劣。ext4: 是Linux中广泛使用的文件系统,具有良好的性能和稳定的特性。它支持大容量存储和多种高级特性,如扩展属性、快照等。JFFS2。

weixin_42462474的博客 1486

梦幻西游端游脚本开发实战:从易语言到大漠多线程全解析

本文详细解析了梦幻西游端游脚本开发的全流程,从易语言基础入门到大漠插件多线程实战。重点介绍了易语言中文编程优势、大漠插件图色识别技术,以及多线程控制台开发技巧,帮助开发者高效实现游戏自动化,提升脚本稳定性和执行效率。

weixin_29251567的博客 1061

【嵌入式Linux应用开发基础】进程实战开发

在嵌入式Linux系统中,进程是系统资源分配和调度的基本单位。每个进程都有自己的地址空间和系统资源,通过进程间的通信和同步机制,可以实现不同进程间的数据交换和协作。进程管理对于嵌入式系统的性能和稳定性至关重要。

byte轻骑兵的技术小窝 1698

【GNSS/Linux】BKG Ntrip Client (BNC) 的编译与安装

【GNSS/Linux】BKG Ntrip Client (BNC) 的编译与安装 1. BNC软件 1.1 软件介绍 The BKG Ntrip Client (BNC) is an Open Source multi-stream client program designed for a variety of real-time GNSS applications. It was primarily designed for receiving data streams from any Ntrip

小马甲的新马甲 7808

嵌入式应用Linux裁减的初次尝试

  前段时间因为嵌入式应用开发的需要,对Linux进行了一次大幅度的裁减。由于是初次接触Linux启动的核心部分,所以基本上还是对网上各种裁减方案的拼凑和整理,包含自己理解的部分实在很少。总的来说效果不算理想,后面还有很长的路要走。  这里就大致说说目前这个Linux裁减方案的“雏形”吧。  1. 内核裁减对Linux内核部分的裁减主要根据实际需求进行了重编译,去掉了大部分用不上的

流氓兔子的嵌入式生活 1344

海康/大华设备如何接入GB28181平台?最新2022版互联避坑指南

本文详细解析了海康/大华设备接入GB28181平台的最新2022版互联避坑指南,涵盖参数配置、实时视音频点播协议交互及典型故障排查。重点介绍了GB/T28181-2022标准下的设备编码规范、SIP服务器配置及媒体流保活机制,帮助工程团队高效解决设备离线和媒体流中断等问题。

weixin_30733003的博客 688

STM32 DMA串口重定向printf:高效调试与性能优化实战

本文详细介绍了STM32 DMA串口重定向printf的实现方法与性能优势。通过对比传统方式的CPU高占用问题,阐述了DMA技术如何实现高效数据传输,大幅降低CPU负载。文章包含完整的代码实现、缓冲区管理技巧及实战调试方案,帮助开发者优化嵌入式系统调试效率。

lake5的博客 99

Linux内核实战全指南:从裁剪到优化的嵌入式应用实践

版本控制:使用git管理内核修改增量开发:小步快跑,频繁测试文档记录:记录所有配置变更和优化参数性能基线:建立性能基准以便比较优化效果安全考量:生产环境关闭调试接口推荐学习路径从LTS内核开始学习先理解现有驱动再尝试修改参与邮件列表讨论从小补丁开始贡献通过本指南的系统学习,开发者可以掌握从内核裁剪到深度优化的完整技能栈,构建出高性能、高可靠的嵌入式Linux系统。记住内核开发是持续学习的过程,保持与社区同步才能掌握最新技术动态。资源汇总内核源码:https://kernel.org。

niuTyler的博客 1159

Simulink实例--电动汽车充电站与微电网协同运行仿真

​电网负荷剧增:单站1000台车同时充电需150MW功率(超配电网容量30%)​能源孤岛问题:传统充电站仅作为单向负荷,无法参与电网调频​可再生能源消纳:光伏/风电波动导致充电站功率波动±40%​多目标矛盾:充电效率、电网稳定性、设备寿命的协同优化​节能效果:每百万辆车年节电1.8GWh​成本回收:投资回报周期<4年(IRR>25%)​减排效益:每年减少CO₂排放12万吨。

xiaoheshang_123的博客 330

利用RTLinux开发嵌入式应用程序

         对于中国工程师来说,利用实时Linux开发嵌入式应用程序是他们面临的困难之一,本文以RTLinux为例,并结合最为业界关注的是RTAI进行讨论,尽管这两种实现方式在句法细节上存在差异,但工作方式基本一样,因此所讲述的内容对两者都适用。 在实时任务与用户进程相互通信的过程中,有些实时应用程序无需任何用户界面即可在后台平静地运行,然而,越来越多的实时应用程序确实需要一个用户界面及其它

ZCatLinux --资讯与技术社区--Open Source World----Linux/Shell/DevOPS-- 2411

056:vue+openlayers 风场快速移动效果(图文代码)

本示例的目的是介绍演示如何在vue+openlayers中使用wind插件来实现风场快速移动的效果。

大剑师兰特的GIS世界 1583

基于CNN-LSTM融合模型的环卫车动态称重算法研究:从频率感知到精准质量估计

摘要: 针对环卫车辆动态称重需求,本研究提出一种基于CNN-LSTM融合网络的频率分析方法。通过在实验室构建振动频率采集系统,获取不同载重下的结构响应数据,经MATLAB进行信号处理和特征提取后,建立频率-质量的非线性映射模型。实验表明,该算法在静态和模拟动态场景下平均绝对误差小于1.5%,显著优于传统方法,为环卫车智能化管理提供了高精度实时称重方案。 关键词: 动态称重;深度学习;频率分析;CNN-LSTM;MATLAB。

AI的内部世界的博客 375

关于LINUX与M$ WINDOWS的一点想法

近日对开源社区特别感兴趣,一直在网上的一些著名的开源社区逛。看了许多文章后,LINUX FANSER们的确热情有加,虽然我并不算一个FANSER,但一直在找机会尝试,现在正在学用gVim,算是一个开始吧.. :)不过,关于LINUX 和M$ 的WINDOWS,我也有一些自己的看法。相对于WINDOWS,LINUX等开源的OS有几个常被提到的优势,如廉价,安全,开源等。安全? 对于普通的用户

loneststar的专栏 1271

ESP-IDF OTA升级过程中遇到的“esp_transport_read returned:-1 and errno:128”问题(4)

ESP-IDF OTA升级过程中遇到的“esp_transport_read returned:-1 and errno:128”问题(4)

phmatthaus的专栏 1533

acer软件保护卡清除工具clear_基于linux的嵌入式应用工具类库源码分享,常用模块都有...

Embedme项目简介Embedme是一个基于linux的嵌入式应用工具类库,包括线程,线程池,Coroutine,定时器,消息队列,socket,Tuple,文件,目录,内存池,串口,CANSocket等嵌入式开发中常用的模块。Embedme集成了cJSON、sqlite、tinyxml、libconfig++、yaml-cpp、libev等优秀的开源库。它可以帮助您快速的构建稳定的嵌入式应用程...

weixin_29064103的博客 432

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

linux中tcp/ip协议实现及嵌入式应用 下载,Linux中TCP/IP协议实现及嵌入式应用

《Linux中TCP/IP协议实现及嵌入式应用》共分9章。第1章简单介绍了嵌入式Internet的基本技术和TCP/IP协议。第2~8章全面介绍了TCP/IP协议在Linux中的实现,其中:第2章的内容是Linux中与TCP/IP协议实现密切相关的内核技术;第3章的内容是网络编程与套接字的实现;第4~7章系统分析了TCP/IP的实现;第8章是有关网络设备的介绍。第9章介绍了嵌入式网络的开发与TCP...

weixin_42515181的博客 418

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

如何系统的学习linux 系统学习Linux的十一点建议

linux太难用了!(一通鼠标点击,进入/etc)学习linux,你忘记windows的思维方式了吗?怎么安装软件阿?那一堆文件是干什么的阿?学习linux,你还在浮躁吗?进入linux,随便按了几下.赶紧重启进入win学习linux,你用心了吗?.......你我共勉之作者:GuCuiwen email:win2linux@163.com版权声明:本文档可以在网络上在非商业范围内自由转载,转载请

luofeng2006的专栏 4405

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

关于转嵌入式的一点想法

一方面,我们要拥抱AI,利用AI带来的机会,提高个人的生产力,创业创新。为了稳住当前的工作,保证生活质量,我们需要提前规划,及时调整自己的技术路线,摒弃一些相对简单重复,技术含量不高的工作,要么转型项目管理,要么转向受AI影响较小的更底层的开发。当然,我个人也是对嵌入式技术栈很感兴趣,方向和机会很多,自己要多思考,做出更优的选择。普通人能做的只有拥抱AI,拥抱趋势。AI的发展,让软件开发的门槛越来越低了,软件开发人员的护城河即将被攻破,软件研发行业不再会像十几年前那么安逸了,传统红利已不复存在。

撬动未来的支点的专栏 276

关于Linux的一些这想法

什么是操作系统?(仅代表个人想法) 就linux而言,我的理解是其实还是使用函数堆出来一个庞大的“进程“,当然权限和功能绝对是用户态进程比不了的。多核的SOC那是不是可以理解为多进程(享有更多的资源)。系统的产生对于我们的操作进行了一些规范和限制,让我们的使用更加高效与安全。linux系统包含进程管理、内存管理、文件系统、设备控制、网络。 linux系统为什么需要分用户态和内核态? 首先我们知道linux内核就是linux_kernel,作为内核文件载体,作为内核态的主要操作。个人理解分层的原因:主要

奇怪的博客 1360

关于泛设备系统的一点想法

“泛设备系统”这个名词,是笔者生编硬造的一个词语,指的是可以在不同平台设备上运行的、基于同一设计和系统组件(如内核)的系统。它是来源于一点新闻(有关报道如《谷歌证实Chrome OS将与Android合并》 http://homepage.yesky.com/98/118295

书剑_技术博客 343

嵌入式应用程序开发

转自:http://blog.youkuaiyun.com/WolfFlower/archive/2008/03/22/2207348.aspx嵌入式应用程序开发实验目的:1.      编写程序,用交叉工具链编译连接2.      将嵌入式应用程序下载到开发板上执行实验原理:1.      嵌入式应用程序的开发一般都在宿主机平台上进行,利用交叉编译器编译,生成可以在目标平台上运行的可

DGerome的专栏 882

关于linux的一些想法

一. 理解 1.众所周知,windows系统可分区且可分盘. 然而linux没有分区一说,我们所听到的分区不过是逻辑概念. 也即是linux只能占用磁盘一块区域,且只能在一块硬盘上. 2./根目录与/dev /media等只是节点之间的联系,并不会实现空间的共享.若安装系统时给定了/home和/usr的容量,那么它们与根目录之间也没有空间共享,其中一个空间不足就会报错.若没有给定,则系统给它们动态...

Carina_Cao的博客 332
上一篇: DOS命令及批处理脚本杂记
下一篇: 一个简单的Linux C程序开发框架—linux-dev-framework
无忧老猪
博客等级 码龄18年 200粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值