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

【学习记录】从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.kler.cn/a/153352.html

相关文章:

  • 目标检测YOLO系列从入门到精通技术详解100篇-【自动驾驶】激光雷达
  • 自动驾驶学习笔记(十二)——定位技术
  • 基于Springboot的在线问卷调查系统(有报告)。Javaee项目,springboot项目。
  • TCP三次握手过程
  • 目标检测——Fast R-CNN算法解读
  • R语言阶段复习一
  • Elasticsearch:LangChain 是什么?
  • Java 配置文件的使用(附代码信息讲解)
  • 【稳定检索|投稿优惠】2024年生物神经工程与健康大数据国际会议(ICBNHBD 2024)
  • [github全教程]github版本控制最全教学------- 大厂找工作面试必备!
  • [每周一更]-(第75期):Go相关粗浅的防破解方案
  • 【数字图像处理】边缘检测
  • 如何在手机上打开电脑端本地的网页
  • Mendix UI页面布局以案说法
  • uniapp实现文件预览过程
  • Spring中的事务管理
  • 【RedisTemplate】SpringDataRedis(Spring中对Redis模块的整合)
  • 4-Docker命令之docker kill
  • 基于Intel Ai Analytics Toolkit 及边缘计算的溶氧预测水产养殖监测方案
  • Python---文件和文件夹操作