初学linux
theboynoName
我不是码农,是有情怀的画家。
展开
-
make使用总结(2)-Makefile介绍
make使用总结(2)-Makefile介绍之前已经提到了,make使用Makefile文件来描述工程中文件的组织关系以及gcc编译时的依赖关系。因此我们需要为工程项目编写一个或多个Makefile文件。下面就介绍Makefile相关的语法。Makefile主要由显式规则、隐晦规则、变量定义、指示命令和注释五个部分组成。下面将一一介绍。注释makefile使用#作为注释符号。显式规则与隐式规则规则是make的核心。make规则的格式如下:[目标] : [依赖][tab键] [shell命令]原创 2020-12-21 15:32:14 · 254 阅读 · 0 评论 -
make使用总结(1)-make介绍
make使用总结(1)-make介绍参考资料如下:Make官网文档: http://www.gnu.org/software/make/manual/make.htmlmake学习参考: https://blog.csdn.net/oxuzhenyi/article/details/77922773在学习make之前首先需要了解如下知识:gcc:编译工具链。用于将我们的源程序编译成最后可执行的二进制文件。shell命令:我们在使用make时会用到一些常见的shell命令。什么是make原创 2020-12-21 12:40:47 · 721 阅读 · 0 评论 -
linux 的调度策略与优先级
linux 的调度策略与优先级参考资料如下:man手册man 7 sched内核文档 Documentation/scheduler。首先需要说明,我们常说的进程调度器是传统的说法,但是实际上进程是资源管理的单位,线程才是调度的单位.有时也会说任务调度等。linux的调度机制由调度策略(policies)和优先级(priority)两个属性共同决定.其中调度策略又可以分为实时调度策略和通用调度策略(非实时)。其中通用调度策略的优先级值为0.而实时调度策略的优先级取值范围为1~99.可以看出,实原创 2020-12-09 21:44:31 · 2044 阅读 · 0 评论 -
linux线程特有数据(key)与线程局部存储(__thread)
线程特有数据(key)与线程局部存储(__thread)要了解线程特有数据与局部存储的特性。首先需要了解什么是线程安全函数,什么是非线程安全函数。线程安全函数:函数可同时供多个线程安全调用.即可重入,函数重入时不会造成函数的逻辑混乱。非线程安全函数:如果不是线程安全函数,那么他就是非线程安全函数。导致非安全的主要原因是函数使用了全局变量,内存分配等,在多线程并行访问此函数时,会造成此函数的逻辑错误。将一个非线程安全函数转换为线程安全函数的方法很多,如:使用互斥量。对函数中的共享资源进行保护,原创 2020-12-06 19:12:18 · 369 阅读 · 0 评论 -
linux线程的创建与删除
linux线程的创建与删除使用linux线程时,编译时需要包含-pthread选项。Linux通用API返回0表示成功,返回-1表示失败,并设置errno以标识错误原因。但Pthreads相关的API却与之不同,返回0 表示成功,返回正值表示失败,正值的含义与errno相同。我们可以使用pthread_create()来创建线程。创建成功后的线程可以使用如下几种方式终止:线程主函数中执行return语句并返回指定值。调用pthread_exit()函数终止线程调用pthread_cancel(原创 2020-12-06 12:41:18 · 2226 阅读 · 0 评论 -
linux线程间同步(互斥量与条件变量)
linux线程间同步(互斥量与条件变量)linux的线程有两个重要的同步方式。分别为互斥量(mutex)和条件变量(condition variables).其中linux下互斥量功能类似RTOS下的互斥量。用于防止多个线程同时访问同一共享资源。而条件变量在共享资源发生变化时用来通知其他线程。互斥量与条件变量结合使用时类似RTOS下的事件。互斥量(mutex)linux的互斥量机制与RTOS下的互斥量机制一样。主要用于防止多个线程同时访问同一共享资源。初始化条件变量时可以使用静态初始化和动态初始化:原创 2020-12-05 12:19:05 · 359 阅读 · 0 评论 -
linux进程间通信--消息队列(POSIX 版本)
linux进程间通信–消息队列(POSIX 版本)参考文件:man mq_overview。由于System V消息存在一些缺点。因此POSIX标准又重新定义了一套消息队列接口。下面将详细介绍POSIX接口下的消息队列。消息队列有如下的特点:适用于任何进程将数据交互。以消息为单位进行数据交互。可以使用异步的信号通知。POSIX消息队列的每个消息都可以设置优先级。范围为0 ~ MQ_PRIO_MAX-1。值越大优先级越高。消息队列与系统相关的一些杂项说明:系统会限制所有的消息队列最多可原创 2020-12-01 13:20:10 · 743 阅读 · 0 评论 -
linux进程间通信--信号量(POSIX 版本)
linux进程间通信–信号量(POSIX 版本)System V信号量是通过标识符而不是大多数UNIX I/O 和IPC所采用的文件描述符来引用的。由于这些潜在的缺点,因此POSIX标准又重新定义了信号量API。POSIX标准信号量semaphore不仅可用于同一进程下的各个线程同步,也可以用于不同进程间同步。主要用于协调进程线程对共享资源的访问。libc库实现了POSIX和System V两种接口标准的信号量API。这里主要讨论POSIX接口的信号量API.信号量的原理与使用:信号量只能进行两种操原创 2020-11-30 11:02:04 · 361 阅读 · 0 评论 -
linux进程间通信--共享内存(POSIX 版本)
linux进程间通信–共享内存(POSIX 版本)System V共享内存模型使用的是key和标识符,这与标准的UNIX I/O模型使用文件名和描述符的做法不一致。这种差异导致System V共享内存段需要一整套全新的系统调用和命令。由于这些潜在的缺点,因此POSIX标准又重新定义了共享内存API。共享内存的使用:共享内存被映射到进程的虚拟地址空间之后,就可以跟正常的进程空间内存一样进行各种操作了。其他说明:共享内存并未提供同步机制。所以我们通常需要用其他的机制来同步对共享内存的访问,例如信号量.原创 2020-11-29 22:52:20 · 317 阅读 · 0 评论 -
linux进程间通信--管道(PIPE & FIFO)
linux进程间通信–管道(PIPE & FIFO)参考资料:overview of pipes and FIFOs:man 7 pipe《The Linux Programming inTerface》管道一般分为无名管道pipe和有名管道mkfifo.都用于进程之间的通信。下面将一一介绍它们。无名管道无名管道(pipe)一般用于关联进程(如父子进程)之间的通信。它的使用类似文件,但他不是普通文件,不属于某种文件系统。我们最常见的pipe使用是shell命令,如ls | wc -l原创 2020-11-28 15:42:20 · 551 阅读 · 0 评论 -
syslog日志介绍
syslog日志介绍要使用syslog日志前,我们必须回答下面这个问题:syslog日志和我们自己定义一个日志文件,并向其写日志有何区别?回答:syslog是面向管理员、面向整个系统的。一般syslog监控的是整个系统的状态,而我们自定义的日志一般只面向我们使用的进程。如果使用自定义日志文件,可以选择开源的easyloger日志库)。为什么要使用linux自带的log日志?回答:为了维护方便,我们使用日志输出时,需要有输出级别控制、输出信息定位字段选择(如时间、函数)等功能。syslog原创 2020-05-15 11:53:04 · 7660 阅读 · 1 评论 -
linux中_临时文件接口tmpfile函数和mkstemp函数的使用
linux下临时文件使用总结临时文件的创建建议使用推荐函数tmpfile()和mkstemp()。临时文件的读写操作和普通文件的操作一样,都是调用write()、read()、fwrite()等系统接口。下面是相关的函数接口说明。临时文件相关的系统宏(在stdio.h,stdlib.h中):P_tmpdir系统宏:指定临时文件存放的目录位置,默认为/temp。TMP_MAX系统宏,系统最...原创 2020-04-11 12:11:02 · 1391 阅读 · 0 评论 -
errno变量以及相关函数的使用
系统错误处理介绍在写应用程序时,我们总是要处理一些函数调用时返回的错误。分析错误原因用的最多的就是errno.如当linux系统函数遇到错误时,大多数函数会返回-1,并通过设置全局变量error指出错误的原因。下面就介绍一下它以及它相关的函数使用。volatile int errno全局变量描述:最近一次调用函数出错时的错误码。用户也可以修改它。有关错误代码的宏定义在errno.h文件...原创 2020-04-07 21:54:40 · 1201 阅读 · 0 评论 -
argc,argv参数解析函数getopt(),getopt_long()介绍
命令选项参数解析我们都是知道程序在启动时是可以接收命令参数的。通过main(int argc,char **argv)函数的argc和argv来传入命令参数。这时我们需要解析。当然glibc库中包含了相关函数来方便我们解析命令参数。为了表述方便,我们用命令gcc -o exefile test.c来举例说明。其中gcc是运行命令(可执行文件),-o exefile test.c是它的参数。各个...原创 2020-04-06 20:51:45 · 754 阅读 · 0 评论 -
linux环境变量相关命令及函数接口
系统环境变量相关的访问接口关于什么是环境变量,以及它的作用。笔者就不解释了,自行百度吧,下面总结了有关环境变量的一些命令以及函数接口。控制台下操作环境变量相关命令printenv命令:打印所有的环境变量。env命令:在修改某些环境变量后执行指定的命令。格式:env [OPTION]… [-] [NAME=VALUE]… [COMMAND [ARG]…][]表示可选的选项。所以可以忽...原创 2020-04-04 22:18:32 · 456 阅读 · 0 评论 -
linux中标准接口函数——时间和日期
21. 时间和日期谈到时间(包括日期),必须先明确下面的概念:格林威治时间(Coordinated Universal Time).世界标准时间(UTC).这里面需要知道下面一些概念:时区(time zone):由于世界各国家与地区经度不同,地方时也有所不同,因此将其划分为24个时区,其中UTC(Coordinated Universal Time,世界标准时间)(以前称为格林威治时间...原创 2020-04-03 11:34:55 · 1178 阅读 · 0 评论 -
linux内核是如何操作文件的
linux文件操作深层分析谈到linux的文件操作。我们第一反应是open()``read()等。但事实上文件操作并没有那么简单。我们先做个测试:下面的程序输出值是多少?(如果读者的答案正确,说明对linux文件操作的理解认识正确,当然就没有必要看这篇文章了,否则,建议研磨一下下面的几个程序例程。)//程序1:一个进程中打开同一个文件2次。int main(void){ int ...原创 2020-03-26 16:54:32 · 472 阅读 · 0 评论 -
linux信号(signal)详解.md
linux信号(signal)详解信号(signal)可以看作是进程级别的中断。(这样说主要是为了区别内核级别的硬件中断和软件中断)。它允许进程和内核中断其他进程。信号的功能当然就是发送通知事件了。我们可以使用man 7 signal命令查看关于信号的详细信息。用命令kill -l直接查看所有的信号的number。在版本的慢慢迭代下,linux的信号分为了两种:标准信号:信号值为1~31...原创 2020-03-25 21:30:01 · 1584 阅读 · 0 评论 -
如何截获linux的库函数--库打桩机制
linux中的库打桩机制库打桩(library interpositioning):简单的说就是要自己的函数替换库中相应的函数。比如我们想知道程序总共调用了多少次malloc().在程序已经写好的情况下,库打桩测试是一个很好的方式。使用打桩机制,可以追踪某个特殊库函数的调用次数、验证并追踪其输入输出,甚至把它替换成一个完全不同的实现。在程序编译、链接、运行等过程都可使用库打桩机制。下面将一一介绍...原创 2020-03-23 21:43:32 · 797 阅读 · 0 评论 -
linux中的静态库、动态库详解
linux中的静态库、动态库详解要说linux中的库使用,首先还得从gcc的编译流程说起。不然,总是说不清,理还乱,读完似懂非懂不如不看。可执行文件的编译过程在使用gcc编译程序时,编译过程可以被细分为4个阶段:预处理(Pre-Processing):编译(Compiling)汇编(Assembling)链接(Linking)而我们通常使用gcc -o hello hello....原创 2020-03-22 20:12:53 · 290 阅读 · 0 评论 -
linux下如何转换文本的字符编码
linux下如何转换文本的字符编码linux提供了将文本从一个字符集编码转换成另一种字符集编码的相关命令和函数。查看系统的编码方式与修改locale命令可以查看系统当前的编码方式。如LANG=en_US.UTF-8.代表语言是en_US(美式英语),编码是UTF-8。可以通过修改/etc/sysconfig/i18n文件中的具体段修改编码方式。字符编码转换命令iconv描述:...原创 2020-03-16 15:57:58 · 982 阅读 · 1 评论 -
KConfig使用介绍
Kconfig语法介绍语法文档位置:linux源码目录Documentation/kbuild/kconfig-language.txt。语法例程:linux源码下的所有KConfig文件。在项目开发中我们通常需要对一个工程根据不同的需求进行配置、裁剪。通常做法是专门定义一个config_xxx.h的文件,然后再文件中使用#define CONFIG_USING_XX等宏进行配置和裁剪。...原创 2020-03-15 16:14:55 · 1939 阅读 · 1 评论 -
MMU相关概念及工作原理介绍
MMU相关概念及工作原理介绍笔者这篇文章主要从使用者的角度介绍MMU的相关概念和工作原理。一. MMU是什么,为什么要用它在了解MMU之前需要了解下面几个概念:物理地址(Physical Address):简写为PA.我们在STM32等MCU上见到的全是物理地址。像内存等的访问需要物理地址。物理地址是实际存在的。虚拟地址(virtual Address):简写为VA.是假地址,只有cp...原创 2020-03-11 21:27:47 · 6101 阅读 · 6 评论 -
cache相关概念及工作原理介绍
cache相关概念及工作原理介绍笔者这篇文章主要从使用者的角度介绍cache的相关概念和工作原理。一. cache是什么,为什么要用它关于cache是什么,为什么要用它。我们从这个表格说起。下图是典型的memory大小和访问时间memory类型典型大小典型的访问时间(周期)寄存器(r0-r15等)128B1L1 cache32KB1~2L2 cac...原创 2020-03-10 11:31:30 · 7259 阅读 · 2 评论 -
Linux资源管理之cgroups简介
groups 是Linux内核提供的一种可以限制单个进程或者多个进程所使用资源的机制,可以对 cpu,内存等资源实现精细化的控制,目前越来越火的轻量级容器 Docker 就使用了 cgroups 提供的资源限制能力来完成cpu,内存等部分的资源控制。另外,开发者也可以使用 cgroups 提供的精细化控制能力,限制某一个或者某一组进程的资源使用。比如在一个既部署了前端 web 服务,也部署了后端...转载 2020-03-07 11:32:16 · 223 阅读 · 0 评论 -
linux manpages中文手册安装与使用
linux manpages中文手册安装我们日常使用man命令查看命令、函数等内容都为英文,阅读不太方便。所以下面就介绍如何安装中文的man手册。中文manpage手册github项目网址:https://github.com/man-pages-zh/manpages-zh,关于此项目的详细信息请参看此项目的readme.下面为ubuntu下安装的步骤sudo apt updates...原创 2020-03-07 10:40:28 · 2303 阅读 · 0 评论 -
linux中软件触发中断SGI(IPI)的使用
软件触发中断SGI的使用什么是SGISGI:软件触发中断(Software Generated Interrupt)。在arm处理器中,SGI共有16个,硬件中断号分别为ID0~ID15。它通常用于多核间通讯。SGI在Linux内核中通常被用作IPI中断(inter-processor interrupts).在linux内核中,已经定义了如下的IPI中断,所以用户使用自定义的IPI中断时,...原创 2019-12-13 11:58:31 · 6754 阅读 · 5 评论 -
在win10中的vscode下在线调试arm板中的linux程序
在windows中的vscode下在线调试arm板中的linux应用程序想要在window下的vscode中在线调试arm板中运行的linux程序。需做到一下三点arm能运行gdbserver程序。用于向gdb客户端传输调试数据。linux端需要运行arm-linux-gnueabihf-gdb.这也就是我们所说的gdb客户端,用于和gdbserver交换调试数据。vscode需要将ar...原创 2019-11-27 15:39:39 · 3780 阅读 · 0 评论 -
arm板gdb调试移植
arm板gdb调试移植arm板上对程序在线调试,一般使用的就是gdb+gdbserver。而我们的交叉编译工具链中,都带有gdb(arm-linux-gnueabihf-gdb),所以我们移植的时候,只需要移植gdbserver就行。下面是两者的关系。arm-linux-gnueabihf-gdb 即gdb,运行在电脑端,人机交互界面。arm板端不需要,所以不用移植到arm板中。gdbse...原创 2019-11-26 10:47:46 · 1243 阅读 · 0 评论 -
shell脚本基本语法(3)
shell脚本基本语法(3)流程控制语句if条件语句if语句的格式如下:# 格式1if 条件then 代码块fi# 格式2if 条件; then 代码块fi# 格式3if 条件; then 代码块1else 代码块2fi# 格式4if 条件; then 代码块1elif 条件; then 代码块2elif 条...原创 2019-11-24 16:11:04 · 88 阅读 · 0 评论 -
shell脚本基础语法(2)
shell脚本基础语法(2)shell中的变量shell中的变量没有类型。如a=1234既可以当作十进制整数1234参与整数运算。也可以当作字符串,做字符串操作。作用域:分为全局变量和局部变量。变量默认为全局变量,局部变量必须用local关键字来声明。如local value="local variable".变量使用时不需要声明,赋值时直接使用变量名。引用变量时使用$.如echo $s...原创 2019-11-24 15:25:13 · 190 阅读 · 0 评论 -
shell脚本基础语法(1)
shell脚本基础语法(1)linux下的shell类似windows中的bat,都是脚本(script)文件.主要用于批处理操作。shell文件的编写格式如下:第一行注明执行shell的路径,用#!开始。如#!/bin/bash.(此项是必须项)。第二行注明此shell需要完成的功能。(此项是可选项)。使用字符#作为注释符。如# this is a shell example..sh...原创 2019-11-24 11:02:23 · 187 阅读 · 0 评论 -
开发板ssh移植、搭建
开发板ssh移植、搭建1. 在ubuntu中下载ssh相关源码包openssh-7.3p1安装包.下载地址如下官网下载地址:https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssl-1.0.1t安装包.下载地址如下官网下载地址:https://www.openssl.org/source/openssl-1.0.1...原创 2019-11-18 09:29:36 · 1256 阅读 · 1 评论 -
设置登录用户和登录密码
设置登录用户和登录密码在根文件系统刚做好之后,是没有登录用户和密码的,我们需要进行添加。根文件系统中,根用户和密码有关的文件有三个。分别是/etc/passwd。用来存放用户信息.当/etc/shadow文件不存在时也会存放密文密码。它的文本格式为name:password:uid:gid:comment:home:shell。如:root:x:0:0:Linux User,,,:/r...原创 2019-11-08 13:32:39 · 1281 阅读 · 0 评论 -
驱动学习02_应用程序调用驱动模块
应用程序调用驱动在驱动学习1里学习了驱动模块的基本框架。但没有涉及到应用程序调用驱动以及驱动如何控制硬件。下面就是它两者的使用。I/O内存访问函数读操作函数读字节。u8 readb(const volatile void __iomem *addr)读16位数。u16 readw(const volatile void __iomem *addr)读32位数。u32 readl(c...原创 2019-11-07 20:06:01 · 338 阅读 · 0 评论 -
驱动学习01—模块编写、使用流程
简单linux驱动模块编写、使用流程使用流程编写模块程序。参见下面的驱动模块基础框架。编译,编译方式参看下面的驱动模块编译。挂载。使用insmod命令挂载。使用方式参看下面的模块相关命令。卸载。使用rmmod命令卸载。驱动模块基础框架模块驱动可以按挂载时有无参数,分为不带参的驱动模块和带参的驱动模块。带参的驱动模块使用module_param(变量名,类型,访问掩码)宏来声明。...原创 2019-11-06 21:46:49 · 337 阅读 · 0 评论 -
ubuntu下tftp服务器搭建
tftp服务器搭建1.安装相关软件sudo apt-get install xinetdsudo apt-get install tftp tftpd2. 配置创建tftp服务器文件夹,用于存放共享文件。mkdir /xxx/tftpserverpathsudo chmod 777 /xxx/tftpserverpath编写tftp配置文件表。sudo vim /etc...原创 2019-11-06 10:19:42 · 180 阅读 · 1 评论 -
ubuntu下NFS服务器配置
ubuntu下NFS的相关配置1. 安装NFS服务器相关软件sudo apt-get install nfs-commonsudo apt install nfs-kernel-server2. ubuntu中NFS服务器配置打开文件sudo vim /etc/exports.在文档末尾添加 NFSfile *(rw,sync,no_root_squash)sharefile...原创 2019-11-05 20:14:18 · 152 阅读 · 0 评论 -
busyBox制作根文件系统
busyBox制作根文件系统busybox下载官网地址https://busybox.net/制作步骤下载busybox-1.29.1.tar.bz2.解压busybox源码包。tar -jxvf busybox-1.29.1.tar.bz2.因为我们是要做嵌入式的根文件系统,所以要修改顶层Makefile中的工具链.修改MakeFile 191行的体系结构。 将AR...原创 2019-11-05 16:50:59 · 333 阅读 · 0 评论 -
交叉编译工具链的安装
交叉编译工具链的安装交叉编译工具链arm-linux-gnueabihf下载网址:https://www.linaro.org/downloads/arm-linux-gnueabihf和armeb-linux-gnueabihf之间的区别armeb中的 eb(big-endian)指大端的意思.默认是小端,所以不标识,即arm。gnueabihf中各个字符的含义:hf指支持硬浮点。...原创 2019-11-05 16:39:18 · 1934 阅读 · 1 评论