【嵌入式智能产品开发实战】(十二)—— 政安晨:通过ARM-Linux掌握基本技能【C语言程序的安装运行】

 目录

程序的安装

 程序安装的本质

在Linux下制作软件安装包


政安晨的个人主页政安晨

欢迎 👍点赞✍评论⭐收藏

收录专栏: 嵌入式智能产品开发实战

希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正!

在ARM-Linux系统中,C语言程序的安装和运行可以按照以下步骤进行

  1. 准备交叉编译工具链:由于ARM-Linux系统的体系结构和常规x86体系结构有所不同,我们需要使用特定的交叉编译工具链来编译ARM架构的C语言程序。可以在官方网站或者第三方开发者社区下载合适的交叉编译工具链。

  2. 编写C语言程序:使用文本编辑器编写C语言程序源代码,并保存为以.c为后缀的文件。

     3.使用交叉编译工具链编译程序:打开终端,并使用交叉编译工具链中的编译器(一般为arm-linux-gcc)将C语言程序源代码编译成可执行文件。

例如,使用以下命令编译程序:

arm-linux-gcc -o program program.c

这将会生成名为program的可执行文件。

        4.将可执行文件传输到ARM-Linux系统:将生成的可执行文件传输到运行ARM-Linux系统的设备上,可以使用文件传输工具(如scp)或者通过网络进行传输。

        5. 在ARM-Linux系统中运行程序:使用命令行终端进入到可执行文件所在的目录,并使用以下命令运行程序:

./program

C语言程序就会在ARM-Linux系统上运行,并输出相应的结果。

需要注意的是ARM-Linux系统中的C语言程序可能需要特定的库文件或者其他依赖项,如果程序无法正常运行,可能需要安装相应的库文件或者解决依赖关系。


程序的安装

程序的运行过程,其实就是处理器根据PC寄存器中的地址,从内存中不断取指令、翻译指令和执行指令的过程。

内存RAM的优点是支持随机读写,因此可以支持CPU随机读取指令;

内存的缺陷是RAM属于易失性存储器,一旦断电,内存中原先保存的数据都会消失。

现代计算机的存储系统一般采用ROM+RAM的组合形式ROM中存储的数据断电后不会消失,常用来保存程序的指令和数据,但ROM不支持随机存取,因此程序运行时,会首先将指令和数据从ROM加载到RAM,然后CPU到RAM中取指令就可以了。

 程序安装的本质

软件安装的过程其实就是将一个可执行文件安装到ROM的过程。

你下载的软件安装包里包含了可以在计算机上运行的可执行文件,软件开发者为了方便用户使用,将可执行文件、程序运行时需要的动态共享库、安装使用文档等打包压缩,生成可运行的自解压安装包格式。

使用安装包安装软件就是将包中的可执行文件解压出来,然后将可执行文件和动态共享库复制到指定的安装目录,并把这些安装信息告诉操作系统。

当用户要运行这个软件时,操作系统就会从安装目录找到这个可执行文件,把它加载到内存执行。无论是在Linux环境还是在Windows环境,基本上都是遵循这个套路,只不过实现的方式不同而已。

在Linux环境下,我们一般将可执行文件直接复制到系统的官方路径/bin、/sbin、/usr/bin下,程序运行时直接从这些系统默认的路径下去查找可执行文件,将其加载到内存运行。

接下来我们就做一个实验,分别在Linux和Windows环境下制作一个软件安装包,并分别安装运行。这个软件很简单,就是一个helloworld程序。

第一次看到这里的小伙伴,请参考这篇文章安装编译环境:

【嵌入式机器学习开发实战】(八)—— 政安晨:通过ARM-Linux掌握基本技能【C语言程序的编译过程】icon-default.png?t=N7T8https://blog.csdn.net/snowdenkeke/article/details/136805174比如

sudo apt install gcc-arm-linux-gnueabihf

sudo apt install vim

现在我们准备一个简单的C语言Hello world程序(我们就将文件命名为main.c):

#include <stdio.h>

int main(void)
{
    printf("hello world!\n");

    return 0;
}

在ARM-Linux环境下,我们可以使用gcc命令将其编译为一个可执行文件:a.out。完成这一步后,我们就可以给这个可执行文件制作软件安装包。

在ARM-Linux目标机上(我这里就是用的树莓派开发板),创建一个文件夹,并编译出可执行文件。

编译:

arm-linux-gnueabihf-gcc -o hello.out main.c

值得注意的是,我这里使用的是服务器版本,已经安装了gcc,所以我的执行如下:

可以看到第二行中打印出了hello world!

此时,验证可以后,咱们就可以在ARM-Linux环境下制作软件安装包了。

在Linux下制作软件安装包

Linux操作系统一般可分为两派:Redhat系和Debian系。Redhat系使用RPM包管理机制,而Debian系,像Debian、Ubuntu等操作系统则使用deb包管理机制。

我们在Linux环境下安装软件其实就是将可执行文件复制到环境变量PATH对应的官方路径下面:

常用的路径有/bin、/sbin、/usr/bin、/usr/local/bin等。

当我们在Shell终端输入命令时,Shell就会到这些默认路径下去找与该命令相对应的二进制文件,并加载到内存执行。

一个成熟的发布软件里,除了可执行文件,一般还会有配套的文档说明、图标等,程序开发者将这些文档一起打包发布,提供自动安装的功能,更方便用户下载和安装。在制作deb包时,除了可执行文件,还需要一些控制信息来描述这个安装包,如软件的版本、作者、安装包要安装的路径等,这些控制信息放在一个叫作control的文件里。

下面我们就写一个简单的helloworld程序,并为它制作一个deb包。

编译获得可执行文件后(.out),我这里没有使用后缀(不是必须的),我这里的文件名为hello:

创建一个hello同名目录,然后进入该目录,分别创建DEBIAN、usr/local/bin/目录,并在DEBIAN目录下创建control文件,将可执行文件helloworld复制到usr/local/bin/目录下,操作完成后helloworld的目录结构如下所示。

DEBIAN目录下的control文件用来记录helloworld安装包的安装信息,我们可以通过编辑这个文件来配置相关安装信息。

package:hello
version:1.0
architecture:i386
maintainer:wit
description: deb package demo

另外一个目录usr/local/bin/表示deb包的默认安装路径。

这两个文件归位后,我们就可以使用dpkg命令来制作安装包。

 dpkg -b hello/ hello_1.9_i386.deb

如果命令运行无误,就会在hello的同级目录下,生成一个名为hello_1.0_i386.deb的安装包。

接下来我们使用dpkg命令安装这个deb包,来验证一下我们制作的安装包是否正常。

安装如下

dpkg -i hello_1.9_i386.deb

安装成功后:在系统的/usr/local/bin下就会看到安装成功的hello可执行文件。

安装成功后,在Shell终端的任何目录下,直接输入hello命令都可以直接运行。当然,也可以通过dpkg命令卸载hello程序。


这就是您要知道的全部内容了,先了解即可。这些知识仅仅是为咱们后续真正的嵌入式机器学习体系的开发打些基础而已。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/506765.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习 -- 随机森林DEMO

场景 之前看一些歌手或者演员选取节目的时候&#xff0c;上面不是一个评委&#xff0c;少则三五个&#xff0c;多则几十个&#xff0c;当做重要决定时&#xff0c;大家可能都会考虑吸取多个专家而不只是一个人的意见。机器学习也是一样的&#xff0c;机器学习中分为两种&#…

开源AI引擎:自然语言处理技术在人岗匹配中的应用

一、应用场景介绍 如何从海量的求职者中精准地匹配到合适的候选人&#xff0c;是每个人力资源部门都需要解决的问题。自然语言处理&#xff08;NLP&#xff09;技术的发展为人岗匹配提供了新的解决方案。通过信息抽取和文本分类技术&#xff0c;企业可以更高效地分析职位描述和…

数据结构堆

前言&#xff1a; 在前面我们已经学习了数据结构的基础操作&#xff1a;顺序表和链表及其相关内容&#xff0c;今天我们来学一点有些难度的知识——数据结构中的二叉树&#xff0c;今天我们先来学习二叉树中堆的知识&#xff0c;这部分内容还是非常有意思的&#xff0c;下面我们…

苹果App上架指南

苹果上架要求是苹果公司对于提交应用程序到苹果商店上架的要求和规定。这些要求主要是为了保证用户体验、应用程序的质量和安全性。以下是苹果上架要求的详细介绍&#xff1a;1. 应用程序的内容和功能必须符合苹果公司的规 苹果上架要求是苹果公司对于提交应用程序到苹果商店上…

APS54083 大功率深度调光降压恒流驱动IC PWM 线性调光 车灯IC

特点 ◆ 宽输入电压范围&#xff1a;5V&#xff5e;100V ◆ 可设定电流范围&#xff1a;10mA&#xff5e;2000mA ◆ 固定关断时间控制 ◆ 内置抖频电路&#xff0c;降低对其他设备的 EMI 干扰 ◆ 过温保护 ◆ 调光功能&#xff1a;线性调光/PWM 调光 ◆ PWM 调光深度小于…

机器学习——卷积的变种

机器学习——卷积的变种 卷积神经网络&#xff08;Convolutional Neural Networks, CNNs&#xff09;是深度学习领域中最重要的技术之一&#xff0c;它在图像处理、语音识别、自然语言处理等领域取得了巨大成功。在CNN中&#xff0c;卷积层是最核心的组成部分之一&#xff0c;…

【解决方案】荣耀系统Android8.0 system目录Read-only file system

本来以为直接把Charles证书改成系统证书格式&#xff0c;然后通过mt管理器root之后移动到系统证书目录就行了&#xff0c;结果访问baidu仍然显示网络错误&#xff0c;折腾一晚上。安装为用户证书&#xff0c;又与系统证书冲突。 手机型号&#xff1a;荣耀v10 EMUI&#xff1a…

ALPHA开发板上的PHY芯片驱动:LAN8720驱动

一. 简介 前面文章了解到&#xff0c;Linux内核是有提供 PHY通用驱动的。 本文来简单了解一下ALPHA开发板上的 PHY网络芯片LAN8720的驱动。是 LAN8720芯片的公司提供的 PHY驱动。 二. ALPHA开发板上的PHY芯片驱动&#xff1a;LAN8720驱动 我 们 来 看 一 下 LAN8720A 的 …

Linux系统下安装ElasticSearch

一、228环境ES使用安装 1、检验ES服务是否安装成功的方法 &#xff08;1&#xff09;查看Elasticsearch进程是否成功 ps -ef|grep elasticsearch &#xff08;2&#xff09;linux elasticsearch下访问&#xff08;curl带认证访问&#xff09; curl --user elastic:Zhes.13…

基于ssm的企业台账管理平台(java项目+文档+源码)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的企业台账管理平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 管理员&#xff1a;首页、个人…

使用argocd作为cd流程

一、前言 讲述关于argocd在cicd流程中的使用&#xff0c;ci这里使用gitlabjenkins流水线的方式&#xff0c;jenkins用于拉代码打包、构建镜像、变更yaml文件的镜像、推送变更的yaml文件到gitlab的gitops仓库中&#xff0c;最后再有argocd实现cd流程&#xff0c; 二、使用 关于…

抢占AI算力头筹,宁畅发布全局智算新战略AI算力栈

1、在以大模型为焦点的新一轮AI竞赛中&#xff0c;智能计算作为推动产业发展的关键引擎&#xff0c;已经不再局限于算力性能这一单一竞争要素。 2、算法协同优化、数据处理能力、模型可解释性以及与特定行业应用的融合度&#xff0c;都成为了智能计算能否成功推动技术创新和实际…

用可视化案例讲Rust编程5.用泛型和特性实现自适配绘制和颜色设置

上一节我们讲了用泛型实现返回结果&#xff0c;这一节我们来讲讲在函数签名里面使用泛型来对输入参数进行自适配。 先看UML设计图&#xff1a; 好吧&#xff0c;看起来有点复杂&#xff0c;我们一个个来解释。 首先定义的是一个生成绘图元素需要的参数结构,并且定义个特性&am…

紫外线吸收剂为光稳定剂代表产品 塑料及化妆品领域为其主要需求端

紫外线吸收剂为光稳定剂代表产品 塑料及化妆品领域为其主要需求端 紫外线吸收剂指能吸收阳光及荧光光源中的紫外线部分的一种光稳定剂。紫外线吸收剂具有热稳定性好、可吸收紫外线、化学稳定性好、能增强目标物色泽稳定性、毒性低等优势&#xff0c;在塑料、化妆品、纺织品、涂…

大厂级别交互设计秘籍:一篇读懂

交互式设计属于UI设计之一&#xff0c;也是当今流行的设计之一。许多大型工厂非常需要交互式设计人才&#xff0c;这一趋势也引起了许多毕业生和UI设计爱好者的广泛关注&#xff0c;那么你知道大型工厂设计师必要的交互式设计是什么吗&#xff1f;这篇文章将带你了解。 什么是…

【PFA树脂交换柱】实验室高纯PFA材质过滤柱耐受电子级氢氟酸含氟树脂层析柱

PFA离子交换柱&#xff0c;也叫PFA层析柱、PFA过滤柱等&#xff0c;其原理是利用吸附剂对不同化合物有不同吸附作用和不同化合物在溶剂中的不同溶解度&#xff0c;用适应溶剂使混合物在填有吸附剂的柱内通过&#xff0c;使复杂的混合物达到分离和提纯的目的。 柱体为透明PFA材…

再生式收音机填坑记

年前踩坑再生式收音机&#xff0c;还是得找机会把坑填上&#xff0c;最终选定了K8TND的方案&#xff0c;其实与Mr. Kitchen的也基本差不多。电路图如下&#xff1a; 实物图如下&#xff1a; 实际接收效果还不错&#xff0c;但是感觉频段上哪哪都是中国之声&#xff0c;对这种…

牛仔裤什么牌子的好?国产质量最好牛仔裤大汇总

现在的裤子款式多到可以每天不重样&#xff0c;但大家总是买不到合适。现在虽然裤子款式非常多&#xff0c;但是大部分的裤子版型设计有很多问题&#xff0c;甚至还有一些商家为了利润而不断压缩成本&#xff0c;采用劣质面料&#xff0c;导致出现各种问题。 今天我就结合我的专…

openGauss 6.0.0-RC1 版本正式发布!

openGauss 6.0.0-RC1版本正式上线&#xff01; openGauss 6.0.0-RC1是社区最新发布的创新版本&#xff0c;版本生命周期为0.5年。&#xff08;创新版本命名&#xff1a;由原方案 XX.1.0 Preview (例&#xff1a;5.1.0 preview&#xff09;&#xff0c;调整为现方案 XX.0.0-RCx&…

scRNA+bulk+MR:动脉粥样硬化五个GEO数据集+GWAS,工作量十分到位

今天给大家分享一篇JCR一区&#xff0c;单细胞bulkMR的文章&#xff1a;An integrative analysis of single-cell and bulk transcriptome and bidirectional mendelian randomization analysis identified C1Q as a novel stimulated risk gene for Atherosclerosis 标题&…