【学习记录】从0开始的Linux学习之旅——应用开发(helloworld)

一、概述

    Linux操作系统通常是基于Linux内核,并结合GNU项目中的工具和应用程序而成。Linux操作系统支持多用户、多任务和多线程,具有强大的网络功能和良好的兼容性。本文主要讲述如何在linux系统上进行应用开发。

二、概念及原理

    应用程序通过系统调用与内核进行交互,而驱动程序则提供了硬件设备的访问接口,内核本身则提供了系统调用、驱动框架等基础设施。
    驱动开发:Linux 驱动开发是指为 Linux 内核开发各种设备驱动程序,用于控制和管理硬件设备。驱动程序运行在内核空间,直接与硬件进行交互。Linux 内核提供了丰富的接口和框架,开发者可以编写各种类型的设备驱动,包括网络设备、存储设备、输入设备等。驱动程序通过内核提供的接口与用户空间的应用程序进行通信。
    应用开发:Linux 应用开发是指在 Linux 系统上开发各种类型的应用程序,包括命令行工具、图形界面应用、服务器端应用等。Linux 提供了丰富的开发环境和工具链,开发者可以使用各种编程语言和开发工具进行应用开发。应用程序运行在用户空间,通过系统调用与操作系统内核进行交互,执行各种任务和功能。
    内核开发:Linux 内核开发是指对 Linux 内核本身进行开发和维护。Linux 内核是操作系统的核心,负责管理系统资源、调度任务、提供系统调用等功能。内核开发包括对内核功能的添加和修改,修复内核漏洞,优化性能等工作。内核开发人员通常会编写和维护内核的各种子系统和模块,包括调度器、文件系统、网络协议栈等。

三、准备工作

  1. 安装虚拟机VMware
  2. 安装ubuntu 22.04
  3. 安装vim、vscode等工具
sudo apt update
sudo apt install vim code

四、操作步骤

  • helloworld应用开发

    新建一个helloworld.c,可以在界面上直接新建一个文件,也可以使用vim新建文件,vim helloworld.c,在文件中写一个最简单的代码。

#include <stdio.h>int main(void)
{printf("hello world\n");return 0;
}

    使用ubuntu系统自带的gcc编译器对helloworld.c文件进行编译,生成a.out文件。

gcc helloworld.c

    在终端中执行a.out文件,执行方式如下:

./a.out

    执行后可以看到应用程序打印出hello world,到这里最基本的应用开发就完成了。这应用开发比想像中简单。
在这里插入图片描述

    这个a.out是编译默认生成的名字,为了后期开发的便利,这里我们指定输出成和.c源文件名字一样。只要在编译的时候增加-o name就可以指定输出文件名。

gcc helloworld.c -o helloworld

在这里插入图片描述

  • 生成Makefile文件

    为了兼容Linux的编译方式,这里我们再引入Makefile的编译方式。在helloworld.c同一级目录下,新建一个Makefile文件(不需要后缀)。在文件中添加如下代码。

# 定义编译器和编译选项
CC = gcc
CFLAGS = -Wall -g# 定义目标文件和源文件
TARGET = helloworld
SRCS = helloworld.c
OBJS = $(SRCS:.c=.o)# 默认构建规则
all: $(TARGET)# 生成目标可执行文件
$(TARGET): $(OBJS)$(CC) $(CFLAGS) -o $@ $^# 生成目标文件
%.o: %.c$(CC) $(CFLAGS) -c -o $@ $<# 清理生成的文件
clean:rm -f $(OBJS) $(TARGET)

其中:

  1. 定义了编译器及编译选项:CC定义了编译器为gccCFLAGS定义了一些编译选项,如-Wall表示显示所有警告,-g表示生成调试信息。
  2. 定义了目标文件和源文件:TARGET定义了最终生成的可执行文件名为helloworldSRCS定义了源文件列表,OBJS则是所有源文件对应的目标文件列表。
  3. 定义了默认构建规则all,它依赖于目标文件$(TARGET)
  4. 定义了生成目标可执行文件的规则,使用了特殊变量$@$^,分别表示目标文件和所有依赖文件。
  5. 定义了生成目标文件的规则,使用了通配符%.o表示所有的目标文件,使用了特殊变量$<表示第一个依赖文件。
  6. 定义了清理规则clean,用于清理生成的目标文件和可执行文件。
  • make编译

    在当前文件目录下,使用make指令即可对当前目录的文件进行编译。
在这里插入图片描述
    同样的,使用以下指令即可调用应用程序。

./helloworld

在这里插入图片描述

五、相关链接

【学习记录】从0开始的Linux学习之旅——驱动模块编译与加载
【学习记录】从0开始的Linux学习之旅——编译linux内核

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

今日现货黄金最新建议

近期现货黄金价格再度逼近历史高位&#xff0c;很多本来在场外观望的投资者&#xff0c;都纷纷希望进场一试身手。然而大涨大跌的行情并不是很适合新手投资者参与&#xff0c;如果大家还没做好技术上的准备&#xff0c;可以多听听正规交易平台的专业人士的意见。 在正式入市之前…

【LeetCode每日一题合集】2023.11.20-2023.11.26 (二叉树中的伪回文路径)

文章目录 53. 最大子数组和解法1——DP解法2——分治&#xff08;维护区间、类似线段树的思想&#xff09; 2216. 美化数组的最少删除数&#xff08;贪心&#xff09;2304. 网格中的最小路径代价1410. HTML 实体解析器&#xff08;模拟&#xff09;2824. 统计和小于目标的下标对…

jsp前端输入中文数据传到controller变成问号?的解决办法

还是写老师布置的实验的时候&#xff0c;解决了xml文件找不到的问题之后又遇到新的问题&#xff1a;前端登录处输入用户名和密码&#xff0c;结果明明输入的用户名是对的密码也是对的&#xff08;输入的用户名是中文&#xff09;&#xff0c;它就是显示用户名或密码错误。然后我…

mac 系统 vmware 安装centos8

选择镜像 安装系统 依次设置有告警的项目 设置用户名密码 设置root密码 重启系统 重启成功进入下面界面 勾选&#xff0c;点击done 点击箭头所指按钮 输入密码登录 安装成功了 设置网络 打开终端 切换root用户 输入下面指令 su root 输入root的密码 安装git

【Cisco Packet Tracer】交换机 学习/更新/泛洪/VLAN实验

交换机的功能是连接计算机、服务器、网络打印机、网络摄像头、IP电话等终端设备&#xff0c;并实现与其它交换机、无线接入点、路由器、网络防火墙等网络设备的互联&#xff0c;从而构建局域网络&#xff0c;实现所有设备之间的通信。 本文使用Cisco Packet Tracer仿真软件&…

DynamicDataSource

DynamicDataSource 多数据源&#xff0c;读写分离&#xff0c;主从数据库

算法题--排椅子(贪心)

题目链接 code #include<bits/stdc.h> using namespace std;struct node{int indx;//用来存储数组下标int cnt;//用来计数 };bool cmp(node a,node b){ //判断是否是数字最大的一个就是经过最多谈话人的道return a.cnt>b.cnt; } node row[2010],cow[2010];bool cmp…

润和软件HopeStage与深信服终端安全管理系统完成产品兼容性互认证

近日&#xff0c;江苏润和软件股份有限公司&#xff08;以下简称“润和软件”&#xff09;HopeStage 操作系统与深信服科技股份有限公司&#xff08;以下简称“深信服”&#xff09;终端安全管理系统完成产品兼容性测试。 测试结果表明&#xff0c;企业级通用操作系统HopeStage…

Elasticsearch 优化查询中获取字段内容的方式,性能提升5倍!

1、背景 集群配置为&#xff1a;8 个 node 节点&#xff0c;16 核 32G&#xff0c;索引 4 分片 1 副本。应用程序的查询逻辑是按经纬度排序后找前 200 条文档。 1、应用对查询要求比较高&#xff0c;search 没有慢查询的状态。 2、集群压测性能不能上去&#xff0c;cpu 使用未打…

【已解决】如何打开设置了密码的7Z压缩文件?

7Z是一种常见的压缩文件格式&#xff0c;相比RAR和ZIP格式&#xff0c;它的压缩率更高&#xff0c;可以压缩出更小的文件体积&#xff0c;也同样可以设置密码保护&#xff0c;那设置了密码的7Z压缩文件要如何打开呢&#xff1f; 我们知道&#xff0c;7Z压缩文件设置密码保护后…

【Redis】Redis高并发高可用(集群方案)

Redis集群 Redis Cluster是Redis的分布式解决方案,在3.0版本正式推出,有效地解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构方案达到负载均衡的目的。之前,Redis分布式方案一般有两种: 1、客户端分区方案,优点是分区逻辑可控,缺…

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-C卷

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-C卷 2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-C卷A模块基础设施设置/安全加固&#xff08;200分&#xff09;A 模块基础设施设置/安全加固&#xff08;200 分&am…

java+springboot停车场小区车库租赁预订系统ssm+jsp

该平台为客户和业主提供等信息服务平台的运营方&#xff0c;管理方&#xff0c;如何通过车库平台建立实现优化管理的方法提供参考。能够实现在一个相对广阔的地域内&#xff08;例如一座城市)的多个停车场的随意停车。管理平台会统一调度车位资源&#xff0c;自动进行交易结算。…

密码学概论之基本概念

本人信息安全专业&#xff0c;大三&#xff0c;为着将来考研做准备&#xff0c;打算按照自己目前的理解给大家唠唠密码学。 这个专栏我将从以下七个章节来聊聊密码学&#xff0c;若有不当之处&#xff0c;敬请指出。 • 密码学概论 • 流密码 • 分组密码 • 公钥密码 •…

Hdoop学习笔记(HDP)-Part.13 安装Ranger

十三、安装Ranger 1.安装服务 (1)Choose Services (2)Assign Masters (3)Assign Slaves and Clients 选择不安装Ranger Tagsync (4)Customize Services 设置RANGER ADMIN DB FLAVOR&#xff1a;选择MySQL&#xff0c;依据ambari使用的数据库来定 Ranger DB name&#xff…

16、什么是损失函数

上一节介绍了训练的过程,一个模型在训练的过程中,每一轮训练数据计算到到最后一层时,都会输出本轮的预测值,那么如何将本轮的预测值与标签中的真实值进行对比呢? 这就要用到损失函数(Loss function)。 什么是损失函数 损失函数是用来衡量模型预测结果与真实标签(grou…

ansible模块

目录 一、ansible的command模块 1.ad-hoc 2.playbook 3.command模块 二、ansible的shell模块 1.shell模块帮助 2.shell模块支持的参数和解释 3.简单试验 4.批量远程执行脚本 三、script模块 1.script模块帮助 2.shell模块支持的参数和解释 3.实践 四、ansible文件…

Spring AOP 代码案例

目录 AOP组成 通知的具体方法类型 引入Spring AOP依赖 定义AOP层 UserController Postman测试 AOP工作流程 AOP组成 切面 : 切⾯&#xff08;Aspect&#xff09;由切点&#xff08;Pointcut&#xff09;和通知&#xff08;Advice&#xff09;组成&#xff0c;它既包含了…

搭建nfs文件目录共享

搭建nfs文件目录共享 一、简介 NFS&#xff0c;英文全称是Network File System&#xff0c;中文全称是网络文件系统&#xff0c;是FreeBSD支持的文件系统中的一种&#xff0c;它允许网络中的计算机之间通过TCP/IP网络共享资源&#xff0c;在NFS应用中&#xff0c;本地NFS的客…

如何选择 Facebook 代理?

Facebook上从事业务推广、广告或资料推广以及群组的用户需要高质量且可靠的代理。使用代理&#xff0c;用户可以在账号被封锁的情况下访问自己的资料&#xff0c;同时与多人进行即时通信&#xff0c;并能够&#xff1a; 自动发送邀请参加各种活动&#xff1b; 通过特殊的机器人…