Linux系统开发总览

Qt实现的TCP端口转发工具 使用Qt实现了一个Tcp端口转发的工具,实现功能具体如下: 本地启动一个服务,接收远端客户端的连接。同时也会连接另一个服务器,会将 接收到客户端的数据,转发到连接的服务器上面。 通过该工具的编码,也正好练习了一下Qt的socket编程(服务器/客户端),是个 不错的例子,欢迎大家来Emil索取源码,共同学习! Emil:wuquan-1230@163.com 立即下载

先列一下Linux系统开发要掌握的知识,后续有时间再一一来讲。
欢迎关注我的微信公众号:fensnote

Linux系统开发会用到什么?

C语言基础

Linux系统内核是C语言编写的,所以,Linux系统开发可能会和很多系统API打交道,需要掌握C语言基础,C语言是Linux最基础的开发语言,当然也可以用C++。一般做与系统交互的模块时,用C语言多一些,做上层业务应用时,为了开发效率,会使用C++来开发,毕竟C++是面向对象的开发语言,适合大型项目的开发,方便模块化,代码复用率高。

shell脚本

shell脚本,也就是使用Linux系统下的一系列命令,有机组合在一起,而完成预期的功能。Linux设计思想是“小即是美”,这一思想是shell脚本编程的完美体现。每个命令只完成一种功能,不同的命令组合在一起,却可以实现复杂的功能。做Linux下开发,免不了要与脚本打交道(比如测试、分析数据等)。

学会使用Makefile

Makefile是Linux程序开发时必不可少的编译管理脚本,这个里面东西也很多,不过刚开始可以简单看看,够用就行,随着项目的越做越大,代码文件与目录越来越复杂,这时候的Makefile可能就会复杂一些,牵扯到不同目录的Makefile的相互调用或者协调。
比如嵌入式系统中,一般不止一个应用程序,可能会有多个程序,在整体编译时,会包括如下内容:

  1. 各个应用程序模块的编译(需要判断是否编译成功,出现编译失败的情况停下来,抛出错误信息)
  2. 应用程序打包(做成压缩包或者分区镜像)
  3. 默认配置文件打包
  4. uboot、内核、文件系统、应用程序整体打包成一个镜像文件,大小对应flash分区的大小(大小不足需要填充空数据,保证与分区对应)。
  5. 自动版本管理,在编译完成,打包完成后,可以通过脚本来自动根据时间生成版本号。

这些东西做起来其实挺复杂的,需要Makefile与shell脚本搭配完成。

常规Linux系统编程知识都有什么?哪些常用?哪些不常用?

常规Linux编程知识
文件IO

比较常用
Linux系统下,所有的资源都是以文件的形式访问的,设备被抽象为设备文件,放于/dev目录下。
基本的访问函数:

函数名简介一般怎么用
open打开设备文件访问设备文件,首先要先打开设备
close关闭设备文件文件访问结束后,需要调用该接口,如果不关闭,会造fb耗尽
read读取数据读取数据,可以是文本文件内容,也可以是摄像头数据等
write写入数据向设备写数据,比如串口通信时,可以用write发送数据
ioctlIO操作函数该函数功能比较多,被称作杂物箱~,可以读、写数据,做驱动的同学应该很了解
fcntl属性设置函数对已经打开的设备,设置属性,比如可以设置串口读数据的阻塞和非阻塞属性
lseek改变偏移量一般用于对已打开的文件读写位置的偏移量修改
文件与目录操作

常用
系统编程少不了文件与目录的访问,比如你要读取某个目录下的所有文件名字,或者修改文件名、修改目录,移动文件等等。

函数名简介一般怎么用
stat、 fstat 、lstat获取文件状态可以获取到文件的创建、访问时间,文件大小等
access检测文件属性常用于判断文件是否存在
chmod修改文件权限一般涉及到文件访问权限修改时,会用到,比如增加可执行权限
mkdir创建目录一般在程序里判断到需要用到的目录不存在时,用此函数创建
rmdir删除目录需要删除目录时使用,一般很少用到
opendir打开目录在读取目录信息之前,需要先打开目录(类中与文件访问)
readdir读取目录内容在检索文件时,会用到,读取目录下文件列表
closedir关闭目录在读取完成后,记得关闭目录
sync同步数据到磁盘这个函数一般在修改文件,写入数据后调用,让系统把数据同步到磁盘
标准IO库

比较常用
所谓标准IO库,其实是C语言里的文件IO,另外这里面的IO与前面提到的“文件IO”在文件的读写上有个区别,标准IO是有缓存的,而Linux系统的文件IO函数是无缓存的。
主要是文件操作函数:

函数名简介一般怎么用
fopen打开文件放文件文件前先调用fopen获取文件句柄
fclose关闭文件文件访问结束后,记得关闭文件,否则造成内存泄露
fread读取文件读取文件数据
fseek修改文件读写位置用于修改文件读写的位置偏移量
进程控制

一般
如果你不使用多进程编程的话,这一项可能就用的不多,我的代码里用的也不是太多。
这个知识点主要是进程的创建、子进程管理、进程退出资源释放等等。

线程编程

比较常用
上了系统,一般跑的任务就会比较多,线程是比较常用的,一般可以分为两种,一种是长时间运行的任务,一种是执行完任务自行退出。现在C++11已经支持了线程,使用起来非常方便。之前没有C++11时,为了方便使用,都是对pthrea_簇函数进行了二次封装。

高级IO

常用
可能你会比较奇怪,为什么这么多“IO”相关的东西:文件IO、标准文件IO、高级IO!
是的,这里的IO比较多,前两个“IO”还有点相似,这个高级IO和前面两个有点不太一样。
高级IO里主要是讲的IO操作的方式:阻塞、非阻塞控制,最主要的是通过select和poll实现IO多路复用,这样可以实现程序的异步执行。现在用的比较多的Nginx,就是使用的epoll模型,实现的高并发。

进程间通信

非常常用
一般在linux系统下面,既然是系统,就不止一个应用程序在运行,那多个应用程序,就会需要数据交互,那么,就用到了进程间通信,进程间通信有许多开源的工具(比如DBUS),这里简单介绍一下系统里提供的通信方式:

名称简介
管道一般用于父子进程间通信,有名管道可以跨程序
消息队列消息队列可以分类型,适用于数据量小的,简单通信
信号量PV操作,用于同步,可以与共享内存搭配用,写完数据,告诉另一个线程可以读取了
共享内存适用于大数据量的传输
socketsocke不仅是网络通信的接口,也可以是本地进程间通信(UNIX socke),这种方式很常用
数据库

常用
如果是存储配置参数,我不太推荐用数据库,用json就挺好。数据一般用于存储比较规则的数据,这样方便数据的管理。在嵌入式系统,用的比较多的是sqlite数据库。

串口编程

比较常用
在Linux下,特别是做嵌入式系统,这个可能是少不了的,比较常用。其实串口编程也很简单,可能200行代码就可以把串口通信建立起来了。应用层的数据通信,就是使用write、和read函数操作,但是如果想做的比较好一些,就需要花点时间去做个软件框架,比如利用前面提到的select实现异步操作(后面文章会介绍实现方式以及串口的封装)。

网络编程

超级常用
相信现在的嵌入式设备基本上都需要网络通信功能,所以,网络编程自然是非常常用的。特备是现在物联网的发展,万物互联。Linux下的网络编程,有一系列的API函数,挺多的,参数配置也比较多,刚开始会让人很头疼,不知道哪个参数设置个什么值合适(我们都是慢慢试错试出来的)。这个也不用担心,我后面会给大家分享出来我用C++封装好的网络通信库,包括TCP、UPD、UDP组播、域套接字(本地)等的封装。

结束语

后续准备按照今天列出的这几项内容,在后面的文章一一介绍,欢迎大家关注跟进。

微信公众号:
在这里插入图片描述

别再折腾虚拟机了!手把手教你用WSL2在Windows 11上安装Kali Linux(含汉化与图形界面) 本文详细介绍了如何在Windows 11上通过WSL2安装和配置Kali Linux,包括汉化与图形界面设置。通过WSL2,用户可以享受接近原生性能的Linux体验,同时保持与Windows系统的无缝集成,特别适合网络安全爱好者和开发者。文章还提供了常见问题解决和性能优化建议,帮助用户高效使用Kali工具集。 阅读详情

相关推荐

基于任务的后勤智能体:三段构建与演进设计探究

这是系统智能化的核心难点。例如,对于一个“加强连级滩头阵地防御”子任务,系统会根据防御时长、预期敌军攻击强度、地形等因素,计算出所需的弹药(不同弹种的具体数量)、构筑工事的器材、人员的给养和饮水量、以及医疗救护的药品和血包数量。首先进行分词、词性标注等基础处理,然后利用在军事语料库上训练的命名实体识别(NER)模型,提取出关键实体,如任务类型(“夺控作战”)、作战对象(“Y岛”)、时间约束(“D日H时”、“24小时内”)、成功标准(“建立稳固滩头阵地”)、保障重点(“弹药充足”、“及时救治”)等。

weixin_49042442的博客 1088

Linux 开发

core 文件是大多数 UNIX 系统实现的一种特性, 当进程崩溃时, 操作系统会将进程当前的内存映像和一部分相关的调试信息写入 core 文件, 方便人们后面对问题进行定位。/proc/sys/kernel/core_uses_pid 可以控制产生的 core 文件的文件名中是否添加 pid 作为扩展, 如果添加则文件内容为 1, 否则为 0。如果添加了 pid, 生成的 core 文件一般为 core.xxx(xxx 为 core dump 的进程号)。默认为 0, 即不添加进程 pid.

云满笔记 3149

从ADRV9002到ADRV9003:手把手教你移植FPGA驱动,避开那些官方没说的坑

本文详细介绍了从ADRV9002到ADRV9003的FPGA驱动移植实战指南,重点解析了两者在硬件架构上的关键差异,如通道配置和DPD功能的移除。通过提供完整的移植步骤、调试技巧和性能优化建议,帮助工程师避开官方文档未提及的常见陷阱,实现高效驱动开发。

weixin_28738397的博客 176

在Linux系统进行开发常识

linux系统基本常识

Jadenlee的博客 1034

74HC165级联踩坑实录:STM32读取32路开关状态,时序调试与常见问题排查

本文详细介绍了74HC165级联在STM32读取32路开关状态时的时序调试与常见问题排查。从硬件设计的PCB布局优化、电源噪声控制,到软件时序的精确调校和数据采集策略,提供了完整的解决方案。通过逻辑分析仪和示波器的高效使用,解决了信号延迟和干扰问题,最终实现了稳定可靠的32路信号读取。

weixin_34046298的博客 313

60、磁悬浮主动隔振系统的LQR控制研究

本研究针对磁悬浮主动隔振系统,提出了一种结合ANN建模、LQR控制与MPGA优化的综合控制方案。通过建立系统的动力学与状态空间模型,利用混合训练算法的ANN精确描述MSVI的非线性和滞后特性,并设计基于最小力传递率的LQR控制器。为优化LQR的Q和R矩阵,引入多群体遗传算法(MPGA),有效克服传统GA的早熟收敛问题,提升搜索效率与控制性能。仿真结果表明,在单频、扫频、随机及冲击激励下,该方法显著降低传递力幅值,隔振效果远优于被动系统。研究验证了所提方法的有效性,为磁悬浮隔振技术的实际应用奠定了基础,并展望

linux6sysadmin的博客 127

Linux 上的编程

在 Linux 下,大多编程语言都会提供一套适合命令行的、简单便捷的工具链。善于运用这些工具,能够极大地提升你的开发效率,支持你完成自己的项目。外部包引用和依赖管理是程序开发中必不可少的部分。如果官方有成熟的方案,跟随他们是明智的选择。否则则需根据实际情况,按需选用。

白话机器学习 532

STM32驱动HC-SR04超声波模块

本篇文章将带大家使用HAL库驱动HC-SR04超声波模块。超声波模块作为智能小车必备的模块,要学习智能小车的同学是必须掌握好这个模块的使用的。HC-SR04是一种常用的超声波传感器模块,也被称为超声波测距模块,广泛应用于各种自动化控制和测距系统中。它通常由超声波发射器、接收器、控制电路和外壳组成,可以实现非接触式的距离测量。下面是HC-SR04超声波模块的一些特性和技术参数:距离测量范围:2cm ~ 400cm(可调)。测量精度:0.3cm。工作电压:DC 5V。工作电流:15mA。

m0_49476241的博客 7684

嵌入式Linux系统开发笔记(七)

嵌入式Linux U-Boot基础

SudekiMing的博客 6439

手把手教你学Simulink--基于Simulink的高增益DC-DC变换器仿真建模

特点高电压增益:可以在不使用变压器的情况下实现较大的电压升压比。适用于低电压源:如太阳能电池板、燃料电池等提供的低压直流电源。效率问题:设计时需特别注意提高效率,减少能量损失。挑战电路复杂性:通常涉及多个电感和电容,以及复杂的开关模式。元件选择:合适的元件参数对于达到理想性能至关重要。控制策略:确保高效稳定运行的同时,适应负载变化。首先明确要模拟的任务内容。实现特定的电压增益比(例如从24V升至380V)。根据预期的输入输出电压确定合适的电路拓扑和元件值。

MHD0815的博客 173

RH850从0搭建Autosar开发环境系列讲解 - 总目录

Davinci Autosar实战开发从0构建开发能力。OS,COM,DCM,BSWMM,ECUM,VLINK,XCP,MEMMAP等模块配置,带你熟悉运行的autosar代码,包括MICROSAR的启动运行,使用GreenHills生成运行的hex。

weixin_42412049的博客 1万+

一文搞懂Linux系统开发

先列一下Linux系统开发要掌握的知识,后续的文章中,会一 一讲解。 欢迎关注我的微信公众号:fensnote 文章目录Linux系统开发会用到什么?C语言基础shell脚本慢慢学会使用Makefile常规Linux系统编程知识都有什么?哪些常用?哪些不常用?常规Linux编程知识文件IO文件与目录操作标准IO库进程控制高级IO进程间通信数据库串口编程网络编程结束语 Linux系统开发会用到什...

风声的专栏 5061

10倍开发者的 Dify 魔法书:从零构建全栈 AI 应用

“不懂底层算法,也能开发爆款 AI 应用吗?” 答案是:绝对可以。 Dify 正在重新定义 AI 应用的开发范式——通过可视化的低代码平台,将原本需要数周的开发周期压缩到几小时。无论你是前端、后端、产品经理,还是渴望破局的独立开发者,这都是你不可错过的红利。 我们将手把手教你利用 Dify 快速接入百模大战,零代码搭建企业级知识库,并一键发布你的专属 AI 助手、智能客服和自动化工作流。 告别重复造轮子,掌握 Dify,一个人就是一支 AI 团队。现在上车,开启你的 10 倍速开发之旅!

davidwang456的专栏 683

OK6410A 开发板 (八) 78 linux-5.11 OK6410A 文件系统启动总览

文件系统初始化分为两个阶段,时间点如下 1. start_kernel -> kernel_init // .s 到 start_kernel 没有 文件系统 什么事 2. kernel_init -> ... 且我们讨论的时候,以 无 init_xxx 技术的启动流程为准 一二阶段概览 第一阶段 start_kernel vfs_caches_init_early vfs_caches_init mnt_init init_rootfs //注册 rootfs..

u011011827的博客 201

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

本地Linux环境连接管理开发者空间 - 云开发环境

通过本案例的学习,开发者能够掌握在Linux系统创建云开发环境,选择更适合自己的方式进行程序开发和调试。

华为云官方博客 949

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

linux SD卡驱动

Linux SD卡驱动开发(一) —— SD 相关基础概念 https://blog.youkuaiyun.com/zqixiao_09/article/details/51039378 Linux SD卡驱动开发(二) —— SD 卡驱动分析HOST篇 https://blog.youkuaiyun.com/zqixiao_09/article/details/5103...

li5830的博客 1332

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

8.input子系统基础之按键

《5.linux驱动开发-第5部分-5.8.input子系统基础之按键》 第一部分、章节目录 5.8.1.什么是input子系统 5.8.2.input设备应用层编程实践1 5.8.3.input设备应用层编程实践2 5.8.4.input子系统架构总览1 5.8.5.input子系统架构总览2 5.8.6.输入核心层源码分析1 5.8.7.输入核心层源码分析2 5.8.8.输入事件驱动层源码分析...

阿路 372

Linux中常用的查看系统信息的命令

Linux中常用的查看系统信息的命令

ZhangJunhao_net的博客 1188

嵌入式linux开发 (三) B盘资料总览

不感兴趣

u011011827的博客 207

Linux引导过程总览

目录一、引导过程1.引导过程总览2.systemd进程3.target单元二、服务配置1.修复MBR扇区故障修复MBR扇区故障修复GRUB 引导故障GRUB配置文件2.忘记root密码3.系统服务控制4.linux系统运行级别5.优化启动过程ntsysv工具chkconfig工具5.优化启动过程ntsysv工具chkconfig工具 一、引导过程 1.引导过程总览 开机自检(BIOS) MBR引导 GRUB菜单 加载内核(Kernel)与内存文件系统 加载硬件驱动与初始化进程

肥猫警长的博客 1787

Linux操作系统笔记总览

Linux操作系统笔记总览 用户管理与权限设定 文件的权限与其更改 一些常用的Linux基本知识 系统结构与寻址方式 vim管理 输入输出管理 进程管理 用户登录审计,ssh服务与一些系统控制命令 文件传输、归档与压缩 磁盘管理与分区划分 管理系统存储之磁盘加密、RAID与用户配额 逻辑卷管理LVM vsftpd服务 软件安装 网络管理1 网络管理2拓展 DHCP服务器的搭建 延时任务和定时任务...

kuanyew的博客 479

Linux系统包管理与安装方式总览

apt、dpkg、yum、rpm、snap、pip等安装方式总览

qq_54707941的博客 1022

Linux——操作系统启动总览

针对linux启动的bootloader和内核进行分析

知识,既贵,又便宜。 3607

三大操作系统比较,为什么开发要用Linux系统?(推荐)

 windows, macOS,linux是当今主流三大操作系统,普通用户一般是选择windows或macOS, linux主要是占据服务器领域市场。这三个操作系统给人的感觉是:windows经济适用,档次较低; macOS高端大气上档次; Linux是极客专用,一个黑乎乎的窗口,各种花花绿绿的指令在闪烁,对着键盘噼里啪啦一通乱敲,就能窃取各种机密...         普通用户对于操作系统的选...

Juunnry的博客 7万+

嵌入式linux系统开发教程

在学习嵌入式开发的过程中,尤其是开始入门时,包括各种各样的教程,都是在讲学习linux,很少讲如何利用linux来开发属于自己的嵌入式项目,也就是没有一个全局的概念,简单理解,大概流程如下: 一、建立开发环境 操作系统当然是LInux,或者在win系统下安装虚拟机,通过网络下载相应的GCC交叉编译器进行安装,或者安装产品厂家提供的交叉编译器。 这一步,就相当于在win系统下,要安装一个IDE开发环境,如MDK,IAR等。 二、配置开发主机 主要是配置minicom,也就是串口助手,minicom

manongxianfeng的博客 1万+

深入解读Linux内存管理系列(总览)

日期 内核版本 CPU架构 作者 2019.04.06 Linux-4.4 PowerPC LoneHugo 系列文章 文章 概要 深入解读Linux内存管理系列(1)——系统启动阶段的操作 系统启动阶段需要完成的工作以及内存状态 深入解读Linux内存管理系列(2)——内存节点的添加 识别并添加物理内存,初始...

Hugo的博客 2951
下一篇: 《共享内存》Linux进程间通信入门
fensnote
博客等级 码龄7年 11粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值