linux
文章平均质量分 77
zhangatong
这个作者很懒,什么都没留下…
展开
-
由于 SIGPROF 信号,clone() 系统调用无限重启
最近遇到一个c++ 代码里调用system函数然后没返回的问题,此时调用进程所在CPU占用率100%。通过 strace 和ftrace工具跟踪系统调用,以及查看内核源码,发现 此时,进程会一直不停的调用 clone系统调用,而 clone系统调用一直返回出错。strace :ftrace:内核添加打印:根据错误 ERESTARTNOINTR在 内核代码里找到报错的地方:系统调用时,检测到信号导致系统调用中断返回 ERESTARTNOINTR 错误值,处理信号后重新调用该系统调用。原创 2023-09-08 10:32:25 · 244 阅读 · 0 评论 -
如何跟踪Linux内核中的write系统调用?
在 current_tracer 文件中写入所需的跟踪类型。现在您可以根据需要运行程序,并在完成后禁用跟踪。将您选择的事件写入set_event。dhsable 跟踪事件。确定您要跟踪的跟踪类型。原创 2023-09-07 20:25:18 · 216 阅读 · 0 评论 -
制作ubifs和ubi镜像
#!/bin/bash#Author:allen.zhang#Date: 20211218# This variable will be populated during installationSCRIPT_PATH=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P)# The following variables are populated during the SDK build.原创 2021-12-18 11:42:18 · 582 阅读 · 0 评论 -
futex机制介绍
1、概念futex: a sort of fast, user-space mutual exclusion primitive.Futex是一种用户态和内核态混合的同步机制。首先,同步的进程间通过mmap共享一段内存,futex变量就位于这段共享的内存中且操作是原子的,当进程尝试进入互斥区或者退出互斥区的时候,先去查看共享内存中的futex变量,如果没有竞争发生,则只修改futex,而不用再执行系统调用了。当通过访问futex变量告诉进程有竞争发生,则还是得执行系统调用去完成相应的处理(wait 或.转载 2021-09-22 15:39:38 · 318 阅读 · 0 评论 -
ethtool 的工作原理
原文链接:https://blog.csdn.net/Longyu_wlz/article/details/103232812ethtool 是如何工作的?源码之前,了无秘密。要知道 ethtool 是如何工作的,我们需要获取到它的源码。如何获取 ethtool 的源码?这可以通过在网络上搜索来完成,但是我这里有一个非常简单的方法。由于我使用的是 debian 系统,我执行如下命令获取 ethtool 工具的源码:sudo apt-get source ethtool执行完上述命令之后转载 2021-09-02 08:53:25 · 1109 阅读 · 0 评论 -
显存(Video Memory)
闲话在从事图形优化工作之前,一直对显存(Video Memory)充满了好奇,很想了解其管理方式、基本原理、与内存的区别等,但一直没有时间和机会去研究,现在工作需要,逐渐开始接触和了解,这里也顺便记录,以免后续忘记。什么显存?显存,即Video Memory,简单来说,就是位于显卡的内存,其主要用途当然是用作图形显示了,现在的家用pc中基本都配置了独立显卡,即使是集成显卡,也有一定的显存,否则一些游戏玩起来可能就费劲了。为什么需要显存?随着计算机硬件的飞速发展,现代的CPU、内存能力已经转载 2021-06-02 10:42:04 · 2901 阅读 · 0 评论 -
Linux下的OpenGL——Mesa和GLX简介
一.什么是Mesa和GLX众所周知,OpenGL作为图形界的工业标准,其仅仅定义了一组2D和3D图形接口API,而对于窗口管理、IO消息响应等并没有规定。也就是说,OpenGL依赖各平台提供用于渲染的context以及具体实现方式,而各平台提供的实现不尽相同。这些实现主要有:Windows平台下的WGL、Linux下的Mesa/GLX、Mac OS X下的Cocoa/NSGL,以及跨平台的GLUT、GLFW、SDL等等。Mesa是Linux下的OpenGL实现。它提供了对AMD Radeon系列、N转载 2021-05-27 16:07:27 · 12034 阅读 · 0 评论 -
MBR GPT BIOS UEFI
1 磁盘分区格式 一般来说,磁盘分区表有两种格式:MBR和GPT。1.1 MBR磁盘的0号扇区(第一个扇区)也叫主引导扇区,它包含主引导程序、分区表DPT、硬盘有效标志。 早期磁盘的扇区大小为512B 主引导程序:记录主引导加载程序,也叫第一阶段引导加载程序(Initial Program Loader,IPL),446B。主要作用是: 检查硬盘分区表是否完好。 在分区表中寻找可引导的“活动”分区。 将活动分区的第一逻辑扇区内容(也叫分区引导记录,PBR)装入内存。在转载 2021-05-27 16:05:59 · 283 阅读 · 0 评论 -
使用systemd-analyze 工具来分析各个服务进程的启动性能
systemd-analyze是一个分析启动性能的工具,用于分析启动时服务时间消耗。默认显示启动是内核和用户空间的消耗时间:使用systemd-analyze plot > boot.svg生成一张启动详细信息矢量图,然后用图像浏览器或者网页浏览器打开查看 。 [root@localhost~]#systemd-analyzeStartupfinishedin818ms(kernel)+6.240s(initrd)+32.979s(userspace)=40.038s 和使用systemd.转载 2021-05-24 15:59:40 · 1517 阅读 · 0 评论 -
ubuntu上安装meson & 如何使用meson编译C代码
一· 搭建meson环境并简单编译:1. 什么是mesonMeson 旨在开发最具可用性和快速的构建系统。提供简单但强大的声明式语言用来描述构建。原生支持最新的工具和框架,如 Qt5 、代码覆盖率、单元测试和预编译头文件等。利用一组优化技术来快速变异代码,包括增量编译和完全编译。2. 安装meson 注意:meson安装前必须确认是否已经安装python3.5及以上版本;因为meson依赖于python3和ninja 2.1 安装python3和ninja: sudo ...转载 2021-05-07 11:08:08 · 2622 阅读 · 0 评论 -
Ubuntu 20.04 VNC 安装与设置
VNC是一个远程桌面协议。按照本文的说明进行操作可以实现用VNC对Ubuntu 20.04进行远程控制。一般的VNC安装方式在主机没有插显示器的时候是无法使用的。下面的操作可以在主机有显示器和没有显示器时都能够正常工作。首先安装x11vncsudo apt-get install x11vnc -y设置vnc密码sudo x11vnc -storepasswd /etc/x11vnc.pass 创建x11vnc自启动服务创建/etc/systemd/system/x11vn.转载 2021-04-28 15:02:55 · 1373 阅读 · 0 评论 -
如何在Ubuntu 20.04上使用Perf Performance Analysis Tool
如何在Ubuntu 20.04上使用Perf Performance Analysis ToolPerf是用于基于Linux的操作系统的简单但功能强大的性能监视工具。 它用于跟踪或计数硬件和软件事件。 它提供了许多子命令,并且能够对整个系统进行统计分析。 它可以帮助您识别和解决与性能相关的问题。在本教程中,我们将向您展示如何在Ubuntu 20.04上安装和使用Perf性能监视工具。先决条件运行Ubuntu 20.04服务器的服务器。 在服务器上配置了root密码。安装性能默认情况下转载 2021-03-30 16:38:21 · 6988 阅读 · 2 评论 -
在Ubuntu 18.04系统中使用Netplan工具配置网络
Netplan 是一款使用在终端的配置网络工具,本文介绍在 Ubuntu 18.04 系统中使用 Netplan 来配置网络,新的配置文件、网络设备名称、配置静态 IP 地址、测试配置并应用、配置 DHCP。前言多年以来 Linux 管理员和用户们以相同的方式配置他们的网络接口。例如,如果你是 Ubuntu 用户,你能够用桌面 GUI 配置网络连接,也可以在 /etc/network/interfaces 文件里配置。配置相当简单且可以奏效。在文件中配置看起来就像这样:auto enp10.转载 2021-03-30 14:53:29 · 1738 阅读 · 0 评论 -
ubuntu 自动安装
ubuntu安装程序介绍debian-installer:Debian 系统的安装程序,使用preseed机制进行自动安装。ubiquity:ubiquity是Ubuntu的live CD图形安装程序,主要使用Python编写,使用debian-installer(d-i)作为其许多功能的后端,同样使用preseed机制进行自动安装。This is a simple live CD installer designed to integrate well with Debian- and Ubun原创 2021-03-27 19:19:35 · 2873 阅读 · 0 评论 -
Ubuntu PPA 使用指南
如果你一直在使用 Ubuntu 或基于 Ubuntu 的其他 Linux 发行版,例如 Linux Mint、Linux Lite、Zorin OS 等,你可能会遇到以下三种神奇的命令:sudo add-apt-repository ppa:dr-akulavich/lighttablesudo apt-get updatesudo apt-get install lighttable-installer许多网站推荐使用类似于以上几行的形式在 Ubuntu 中安装应用程序。这就是所谓的使用 .转载 2021-03-25 09:33:44 · 234 阅读 · 0 评论 -
【转载】ubuntu下图形程序自启动的几种方法
目录0.前言 1.带桌面环境的自动启动 1.1Ubuntu 1.2 openbox 2.使用登录管理器启动应用 2.1 窗口管理器 2.2 登录管理器 2.2.1 没有窗口管理启动应用程序 2.2.2 登录管理器自动登录配置 2.3 xorg 2.3.1 xinit(startx) 2.3.2 xserverrc 2.3.3没有窗口管理器启动应用程序 0.前言在嵌入式的场合通常会让Linux只执行某一个特定的人机交互应用程序,比.转载 2021-03-09 20:13:13 · 1086 阅读 · 0 评论 -
ubuntu 内核版本降级
1.添加软件源:sudo vim /etc/apt/sources.list在最后一行:deb http://security.ubuntu.com/ubuntu trusty-security main2.访问源列表里的每个网址,并读取软件列表,然后保存在本地电脑apt-get update3.搜索你想要的版本sudo apt-cache search linux-image | grep 4.15.0-554.安装对应版本内核:sudo apt-get install linux原创 2021-03-09 14:43:24 · 842 阅读 · 2 评论 -
Ubuntu 18.04 LTS Server服务器安装图文教程
官方文档:https://ubuntu.com/server/docs/install/step-by-stepUbuntu 18.04 LTS Server服务器安装图文教程:https://blog.csdn.net/tjsxin/article/details/93199595Ubuntu18.04 Server版安装及使用(图文):https://www.jb51.net/article/177497.htm安装中的问题:1.安装到最后不提示成功而是直接跳转到重新安装界面可能是网络问原创 2021-03-03 19:02:21 · 2359 阅读 · 1 评论 -
Ubuntu安装和配置ssh教程
一般Ubuntu都会默认安装openssh-client,但是没有安装openssh-server。安装ssh服务器sudo apt install openssh-server安装ssh客户端sudo apt install openssh-client配置ssh客户端,去掉PasswordAuthentication yes前面的#号,保存退出sudo vi /etc/ssh/ssh_config配置ssh服务器,把PermitRootLogin prohibit-..转载 2021-02-28 16:07:45 · 523 阅读 · 0 评论 -
Linux X Window System运行原理与启动过程
本文主要说明X Window System的基本运行原理,其启动过程,及常见的跨网络运行X Window System。一) 基本运行原理 X Window System采用C/S结构,但和我们常见的C/S不同。常见的C/S结构中,称提供服务的一方为server,即服务器端(如HTTP服务,FTP服务 等),使用服务的称为client,即客户端。但在X Window System中,client是执行程序的一方,在上面执行各种X程序,而server则是负责显示client运行程序的窗口的一方。...转载 2021-02-27 18:03:47 · 610 阅读 · 0 评论 -
对于Linux内核tty设备的一点理解
http://blog.chinaunix.net/uid-20543672-id-3225777.html转载 2020-12-21 17:55:00 · 90 阅读 · 0 评论 -
“undefined reference to“ 问题解决方法
最近在 Linux 下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误:(.text+0x13): undefined reference to `func’关于undefined reference这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。1. 链接时缺失了相关目标文件(.o)测试代码如下:然后编译。gcc -c test.cgcc –c main.c得到两个 .o 文件,.转载 2020-09-15 15:42:24 · 1876 阅读 · 0 评论 -
给 Systemd service配置环境变量
事件起因,新加了个vncserver服务需要链接某个共享库,这个共享库放在自定义的库路径中,需要在服务启动前设置LD_LIBRARY_PATH环境变量。把export LD_LIBRARY_PATH加到了 /etc/profile.d/中,直接在终端上运行vncserver是可以运行的。但是运行systemd vncserver服务提示找不到库,所以有疑问,systemd需要如何配置所需的环境变量。在网上翻了一下文档,总结如下:1、/etc/profile或者/etc/security/li原创 2020-09-03 17:15:12 · 5640 阅读 · 0 评论 -
CMake 链接第三方的库 和 添加C++11的支持
这里的例子, 是链接libev , 如下:我的CMake 版本是3.10# CMake 最低版本号要求cmake_minimum_required (VERSION 2.8)# 项目信息project (server)# 查找当前目录下的所有源文件# 并将名称保存到 DIR_SRCS 变量aux_source_directory(. DIR_SRCS)# 添加第三方的库set(INC_DIR /usr/local/include/)set(LINK_DIR /usr/lo.转载 2020-09-03 14:39:46 · 610 阅读 · 0 评论 -
configure 添加--enable-xxx --with-xxx 参数选项
如果要给configure生成像--enable-XXXX,--disable-XXXX,--with-XXXX,--without-XXXX这样的参数,就需在configure.ac里用到AC_ARG_ENABLE和AC_ARG_WITH这两个宏,AC_ARG_ENABLE和AC_ARG_WITH语法如下:AC_ARG_ENABLE(option-name, help-string, action-if-present, action-if-not-present)AC_ARG_WITH (pac原创 2020-07-31 15:14:37 · 3106 阅读 · 0 评论 -
autogen.sh
autogen.sh是个shell脚本,用来简化生成configure的。下面是常用的autogen.sh内容,可以看出就是检查环境并依次调用 aclocal、autoconf、autoheader、libtoolize、automake 这些命令来生成configure,把这些命令封装、不需要一条条执行,只需要执行autogen.sh脚本即可。[root@localhost autogen_test]# vim autogen.sh [root@localhost autogen_test]#原创 2020-07-29 15:29:44 · 2963 阅读 · 1 评论 -
用automake建立共享库(动态链接库)Makefile
生成configure过程中各文件之间的关系图详细介绍autoscan: 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是configure.ac的一个雏形。aclocal:根据已经安装的宏,用户定义宏和acinclude.m4文件中的宏将configure.ac文件所需要的宏集中定义到文件 aclocal.m4中。aclocal是一个perl 脚本程序,它的定义是:“aclocal - create aclocal.m4 by s原创 2020-07-29 15:09:13 · 512 阅读 · 2 评论 -
Linux 大页面使用与实现简介
转自:https://www.ibm.com/developerworks/cn/linux/l-cn-hugetlb/index.html引言随着计算需求规模的不断增大,应用程序对内存的需求也越来越大。为了实现虚拟内存管理机制,操作系统对内存实行分页管理。自内存“分页机制”提出之始,内存页面的默认大小便被设置为 4096 字节(4KB),虽然原则上内存页面大小是可配置的,但绝大多数的操作系统实现中仍然采用默认的 4KB 页面。 4KB 大小的页面在“分页机制”提出的时候是合理的,因为当时的内存大小转载 2020-06-19 13:59:24 · 946 阅读 · 0 评论 -
Linux系统之进程状态
转自:https://www.cnblogs.com/littlecharacter/p/12154588.html一、进程状态↑D:uninterruptible sleep (usually IO) R:running or runnable (on run queue) S:interruptible sleep (waiting for an event to complete) T:stopped by job control signal t:stopped by debug转载 2020-06-06 18:26:27 · 259 阅读 · 0 评论 -
Linux 进程间通信系列之 信号
转自:https://www.cnblogs.com/mingfeng002/p/6927893.html信号(Signal)信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;Linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数)信号种类转载 2020-06-06 18:22:47 · 176 阅读 · 0 评论 -
arm-linux ntfs移植
内核支持fuseFile systems ---><*> FUSE (Filesystem in Userspace) support<*> Character device in Userspace support库和工具编译从http://www.tuxera.com/community/ntfs-3g-download下载最新的ntfs-3g源码包tar zxvf ntfs-3g_ntfsprogs-2017.3.23.tgz -C ./...原创 2020-06-03 18:11:55 · 371 阅读 · 0 评论 -
USB2.0如何区分low speed、full speed 和high speed
USB2.0如何区分low speed、full speed 和high speed连接过程区分:low speed: D-高D+低;full / high speed:D-低D+高;区分full / high speed1、Device接入后,Host会通过SE0对设备进行重置,若Device是high speed设备,那么它内部的电流源会向D-注入的17.78mA电路与其H/LS Driver(等同于45Ω电阻)形成约800mV的电压,也即Chirp K,在2.5μs内,若host支转载 2020-05-20 16:31:46 · 3896 阅读 · 1 评论 -
USB通信协议包格式
0. 基本概念 一个【传输】(控制、批量、中断、等时):由多个【事务】组成;一个【事务】(IN、OUT、SETUP):由一多个【Packet】组成。USB数据在【主机软件】与【USB设备特定的端点】间被传输。【主机软件】与【USB设备特定的端点】间的关联叫做【pipes】。一个USB设备可以有多个管道(pipes)。1. 包(Packet) 包(Packet)是USB系统中信息传输的基本单元,所有数据都是经过打包后在总线上传输的。数...转载 2020-05-20 16:28:19 · 1603 阅读 · 0 评论 -
Linux中的USB XHCI HOST TRANSFER RING的相关数据结构
xHCI的工作流程:xHC有三条类型的操作队列,一条是整个HOST的命令队列(command ring),一条是每一个EP对应的传输队列(transfer ring),还有一条是整个HOST的事件队列(event ring). 与这个问题相关的是后面两条.软件作为生产者(这里就是Windows8 xHCI HOST DRIVER)将需要传输的内容以TRB(transfer request block)的形式放入transfer ring. xHC host作为消费者,取出这些TRB,进行相应的数据传输操转载 2020-05-20 16:08:47 · 3122 阅读 · 0 评论 -
ioremap和memremap
原文:https://lwn.net/Articles/653585/下面翻译自google:像用户空间一样,内核通过页表访问内存。因此,当内核代码需要访问内存映射的I / O设备时,必须首先设置适当的内核页面表映射。长期以来,用于该工作的内核工具是ioremap(),它具有许多变体。事实证明,其中一些变体并非总是适合此工作的工具,从而导致内核中存在一定数量的变通方法。但是,这种情况...转载 2020-04-27 18:02:46 · 5325 阅读 · 0 评论 -
Linux kmap和kmap_atomic解析
原文链接:https://blog.csdn.net/zhanghaiyang9999/article/details/82143032名为解析,名不符实,简单记录一下。首先得知道这个函数的主要目的是实现page 到 vaddr的转化。kmap函数将分配到的高端内存映射到永久内存映射区域(PKMap Region)。kmap函数不能用于中断处理程序, 因为它可能进入睡眠状态。...转载 2020-04-27 11:34:01 · 636 阅读 · 0 评论 -
Linux内核内存管理架构
转自:https://www.cnblogs.com/wahaha02/p/9392088.html内存管理子系统可能是linux内核中最为复杂的一个子系统,其支持的功能需求众多,如页面映射、页面分配、页面回收、页面交换、冷热页面、紧急页面、页面碎片管理、页面缓存、页面统计等,而且对性能也有很高的要求。本文从内存管理硬件架构、地址空间划分和内存管理软件架构三个方面入手,尝试对内存管理的软硬件架...转载 2020-04-27 11:19:50 · 164 阅读 · 0 评论 -
kernel如何保证cache数据一致性
转自:kernel如何保证cache数据一致性在嵌入式系统中,cache位于CPU与DDR之间,是一段SRAM,读写性能远高于DDR,利用cache line提供了预取功能,平衡CPU与DDR之间的性能差异,提高系统的性能。据我了解,ARM/PPC/MIPS三款主流嵌入式处理器都是软件管理cache,即有专门的指令来进行cache操作,如PPC的iccciicbi,ARM的CP15协处理...转载 2020-04-26 19:11:55 · 2152 阅读 · 0 评论 -
linux iotable_init 静态映射与内核页表的建立
arm32 linux3.18 mach-vexpress常用的ioremap或者of_iomap都是动态映射,静态映射的接口是iotable_initvoid __init iotable_init(struct map_desc *io_desc, int nr);struct map_desc { unsigned long virtual; unsigned l...转载 2020-04-23 18:31:18 · 302 阅读 · 0 评论 -
linux virtual page pfn physical的关系
phys:物理地址pfn:原创 2020-04-23 17:59:08 · 1694 阅读 · 0 评论