Linux C开发
文章平均质量分 96
Tasdily
脚踏实地,砥砺前行!程序猿最帅气课代表。。。
展开
-
柔性数组详解
1 零长度数组概念众所周知, GNU/GCC 在标准的 C/C++ 基础上做了有实用性的扩展, 零长度数组(Arrays of Length Zero) 就是其中一个知名的扩展.多数情况下, 其应用在变长数组中, 其定义如下struct Packet{ int state; int len; char cData[0]; //这里的0长结构体就为变长结构体提供了非常好的支持};123456首先对 0长度数组, 也叫柔性数组 做一个解释 :用途 : 长度...转载 2021-05-27 16:31:08 · 2496 阅读 · 1 评论 -
运用paramiko远程执行命令报错:TypeError: from_buffer() cannot return the address of the raw string withi....
问题描述:运用paramiko远程执行命令报错:from cryptography.hazmat.backends import default_backendNo handlers could be found for logger "paramiko.transport"Traceback (most recent call last): File "test.py", line 17, in <module> ssh() File "test.py", lin原创 2020-10-14 12:08:59 · 2298 阅读 · 2 评论 -
C++文件编译不报错运行程序报错:undefined symbol 问题的查找、定位与解决方法
程序执行中报错,报错内容如下XXXX:symbol lookup error:/home/....../libpdfium.so:undefined symbol:CRYPT_MD5Generate报错分析: 这个问题表明是符号未定义的问题,而且直接定位于产品链接的第三方动态库libpdfium.so中,于是从libpdfium.so中着手。因为有这个第三方库的源码,给错误的查找提供了可能。错误定位: 但是这个符号未定义的错误很头疼,因为在我原来的想法...转载 2020-09-26 22:27:10 · 15469 阅读 · 1 评论 -
linux下运行c语言程序报Segmentation Fault错误原因总结即解决办法汇总
最近在项目上遇到了Segmentation Fault的错误,一直调试不出来是哪里出了问题,对于刚接触嵌入式的,也不知道该如何去调试一个项目,定位内存问题,纠结了好几天,好阿红整理下自己的思路。从头开始。 以下内容只为整理来自己使用的,大多来源于网络,感谢大家的分享: http://www.cnblogs.com/no7dw/archive/2013/02/20/2918372.html http://blog.chinaunix.net/uid-20780355-id-538814.ht转载 2020-06-04 22:31:54 · 5483 阅读 · 2 评论 -
用码云导入github创建为自己的仓库从而解决git clone很慢甚至导致失败的问题
码云导入github登录码云注册账号。导入想要clone的仓库:建议公开,不然私有的还要秘钥,麻烦。导入成功后把这个自己的仓库的地址链接在linux中clone就好了到此就可以愉快的克隆了。...原创 2020-05-20 23:24:40 · 1483 阅读 · 0 评论 -
编译grpc的过程中缺少库zlib package,报错:Package zlib, required by grpc, not found
问题描述在安装grpc的时候发现缺少相关依赖环境,报错:configure: error: Package requirements (grpc++ >= 1.17.0 grpc >= 7.0.0) were not met:Package 'zlib', required by 'grpc', not found到网上搜了相关教程,感觉杂乱不堪,摸索中安装特此记录安装过程:ubuntu下安装使用zlib库zlib是提供数据压缩用的函式库,我们先要在官方下载zli.原创 2020-05-20 22:50:53 · 3437 阅读 · 0 评论 -
pip3下载很慢的解决办法
pip3下载很慢,这个和pip3的国外服务器连接不稳定有关,需要按以下步骤更新pip源:在/root以及/home/[username]目录下先输入如下命令,创建相关配置文件:mkdir.pipcd.pipvipip.conf更换为较为稳定的阿里云下载源,粘贴保存:[global]index-url=http://mirrors.aliyun.com/pypi/s...原创 2020-03-18 09:30:06 · 4682 阅读 · 0 评论 -
系统调用函数mmap和内核驱动mmap之间的联系与区别以及mmap原理详解以及实现内核用户空间之间的共享内存
mmap基础概念如果没有mmap,只有ioremap:那么将内核空间虚拟地址映射到物理内存/设备内存后,这段虚拟内存若想被用户空间使用,必然存在一个"从内核空间向用户控件内存拷贝"的过程。(深入linux设备驱动内核机制ch10.)malloc一般就是通过系统调用brk()+mmap()实现的mmap是一种内存映射文件的方法,即将一个文件或一块设备内存(如设备寄存器)映射到进程的地...转载 2019-12-06 20:46:02 · 2281 阅读 · 0 评论 -
Linux命令之md5sum的作用以及使用方法(md5是什么?)
1. 背景在网络传输、设备之间转存、复制大文件等时,可能会出现传输前后数据不一致的情况。这种情况在网络这种相对更不稳定的环境中,容易出现。那么校验文件的完整性,也是势在必行的。md5sum命令用于生成和校验文件的md5值。它会逐位对文件的内容进行校验。是文件的内容,与文件名无关,也就是文件内容相同,其md5值相同。md5值是一个128位的二进制数据,转换成16进制则是32(1...转载 2019-12-05 11:37:48 · 9973 阅读 · 0 评论 -
Linux驱动mmap内存映射详解及例子实现
mmap在linux哪里?什么是mmap?上图说了,mmap是操作这些设备的一种方法,所谓操作设备,比如IO端口(点亮一个LED)、LCD控制器、磁盘控制器,实际上就是往设备的物理地址读写数据。但是,由于应用程序不能直接操作设备硬件地址,所以操作系统提供了这样的一种机制——内存映射,把设备地址映射到进程虚拟地址,mmap就是实现内存映射的接口。操作设备还有很多方法,如ioctl...转载 2019-11-24 19:51:06 · 4339 阅读 · 3 评论 -
KVM详解,教科书般的经典讲解
KVM 介绍(1):简介及安装http://www.cnblogs.com/sammyliu/p/4543110.html学习 KVM 的系列文章:(1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分配和 SR-IOV (5)libvirt 介绍 (6)No...转载 2019-11-14 17:11:01 · 3408 阅读 · 0 评论 -
关于epoll通俗易懂的详解
这两天在看项目的数据结构定义及关系,遇到一些关于socket的知识点,还有一些C++的知识点,下面总结下:1.structepoll_event结构体epoll_event被用于注册所感兴趣的事件和回传所发生待处理的事件,定义如下: typedef union epoll_data{ void*ptr;intfd; __uint32_t u...转载 2019-11-13 11:33:53 · 1244 阅读 · 1 评论 -
零拷贝原理详解
引言传统的 Linux 操作系统的标准 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行传输。这样做最大的好处是可以减少磁盘 I/O 的操作,因为如果所请求的数据已经存放在操作系统的高速缓冲存储器中,那么就不需要再进行实际的物理磁盘 I/O 操作。但是数据传输过程中的数据拷贝操作却导致了极大的 CPU 开销,限制了操...转载 2019-11-11 20:21:37 · 60075 阅读 · 6 评论 -
epoll概述和epoll内核源码分析(epoll最全讲解)
epoll概述epoll是linux中IO多路复用的一种机制,I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。当然linux中IO多路复用不仅仅是epoll,其他多路复用机制还有select、poll,但是接下来介绍epoll的内核实现。网上关于epoll接口的介绍非常多,这个不是我关注的重点,但是还...转载 2019-11-11 16:28:49 · 1781 阅读 · 0 评论 -
epoll事件通知机制详解,水平触发和边沿触发的区别
看到网上有不少讨论epoll,但大多不够详细准确,以前面试有被问到这个问题。不去更深入的了解,只能停留在知其然而不知其所以然。于是,把epoll手册翻译一遍,更深入理解和掌握epoll事件处理相关知识,也涉及到了操作系统内核的知识。EPOLL(7) Linux Programmer's Manual NAMEepoll - I/O...转载 2019-11-11 16:26:13 · 1680 阅读 · 0 评论 -
Linux下DIR,dirent,stat等结构体详解
copy from点击打开链接最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅。首先说说DIR这一结构体,以下为DIR结构体的定义: struct__dirstream { void*__fd; char*__data; int__entry_data;...转载 2019-11-10 22:12:22 · 868 阅读 · 0 评论 -
socket、sock、sk_buff的关系
在Linux2.6中,struct sk_buf承担了socket的输入输出的传输缓存的任务。首先,还是先看struct socket的定义 /** * struct socket - general BSD socket * @state: socket state (%SS_CONNECTED, etc) * @type: socket type (...转载 2019-11-06 10:03:30 · 1604 阅读 · 0 评论 -
ioctl详解(Linux设备驱动程序模块)
我这里说的ioctl函数是指驱动程序里的,因为我不知道还有没有别的场合用到了它,所以就规定了我们讨论的范围。写这篇文章是因为我前一阵子被ioctl给搞混了,这几天才弄明白它,于是在这里清理一下头脑。一、 什么是ioctl ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个...转载 2019-10-18 12:01:31 · 1548 阅读 · 0 评论 -
伪线程使用注意事项
1)由于伪线程机制中的线程并非真正意义上的操作系统线程,因此某个伪线程挂住将使得伪线程调度器无法再继续运行,也就会造成相应的操作系统进程或线程挂住。因此,如果要求操作系统进程或线程不挂住,那么伪线程的处理中不能有挂起操作。在设计考虑的时候,通过伪线程调度机制一般情况下可以做到伪线程的处理不挂起。例如,对于socket读写操作,不再使用原先的直接尝试去阻塞读写的方式,而是添加一个读或写伪线程,伪线程...原创 2019-10-17 22:44:14 · 1154 阅读 · 0 评论 -
Linux网络设备驱动-驱动模型
Linux素来以其强大的网络功能著名,同时, 网络设备也作为三大设备之一, 成为Linux驱动学习中必不可少的设备类型, 此外, 由于历史原因, Linux并没有强制对网络设备贯彻其"一切皆文件"的思想, 网络设备不以/dev下的设备文件为接口,用户程序通过socket作为访问硬件的接口。本文以Linux3.14.0内核为例, 讨论Linux中的网络驱动模型Linux的网络设备并不使用文件作为用...转载 2019-09-20 11:25:11 · 615 阅读 · 0 评论 -
Linux源码Kconfig文件语法分析
Kconfig是我们进行内核配置的关键文件,用于生成menuconfig的界面并生成最终确定编译选项的.config文件。关于Kconfig文件的编写规则,在Documentation/kbuild/kconfig-language.txt有详尽的叙述。这里主要用实例进行语法分析。config确定了条目前面是否有选项,menuconfig界面中的条目中一共有3种主动选项,分别是[ ],&l...转载 2019-09-20 14:27:04 · 340 阅读 · 0 评论 -
Encountered a section with no Package: header错误解决方法
在Ubuntu的终端中安装某个软件时遇到如下问题:E: Encountered a section with no Package: headerE: Problem with MergeList /var/lib/apt/lists/cn.archive.ubuntu.com_ubuntu_dists_quantal_multiverse_i18n_Translation-zhE: 无...原创 2019-09-24 13:49:45 · 1537 阅读 · 0 评论 -
把编译好的ko文件加载模块时出错:Error: could not insert module hello_world.ko: Invalid module format
编译一个打印helloworld信息驱动模块的时候遇到问题:insmod: ERROR: could not insert module hello_world.ko: Invalid module format问题应该是编译模块时选择的Linux头文件目录与当前运行的系统版本不匹配,使用命令:uname -r查看当前运行的内核版本,然后选择正确的Linux头文件路径,也可以下载和机器内核...原创 2019-09-24 15:40:18 · 55941 阅读 · 13 评论 -
DPDK的Ubuntu16.04版本安装全教程,包括遇到问题解决和helloworld例子测试等,另附分配大页和绑定网卡驱动脚本
环境搭建:虚拟机的CPU数量不能超过真实的机器,因此暂时无法模拟出NUMA的环境;dpdk需要至少两块网卡,eth0和eth1用于dpdk使用,eth2用于跟主机通信;打开虚拟机的配置文件, xxx.vmx,把所有网卡都设置成e1000ethernet0.present = "TRUE"ethernet0.connectionType = "hostonly"eth...原创 2019-09-27 22:09:29 · 2668 阅读 · 0 评论 -
UIO用户空间的简单程序经典案例——熟悉UIO程序工作原理以及编译运行过程
1、UIO背景第一,硬件设备可以根据功能分为网络设备,块设备,字符设备,或者根据与CPU相连的方式分为PCI设备,USB设备等。它们被不同的内核子系统支持。这些标准的设备的驱动编写较为容易而且容易维护。很容易加入主内核源码树。但是,又有很多设备难以划分到这些子系统中,比如I/O卡,现场总线接口或者定制的FPGA。通常这些非标准设备的驱动被实现为字符驱动。这些驱动使用了很多内核内部函数和宏。而这些...原创 2019-09-30 10:15:56 · 1843 阅读 · 0 评论 -
Linux设备驱动-platform设备驱动
在Linux设备模型的抽象中,存在着一类称作“Platform Device”的设备,内核是这样描述它们的(Documentation/driver-model/platform.txt):Platform devices are devices that typically appear as autonomous entities in the system. This includes...转载 2019-09-02 16:01:02 · 636 阅读 · 0 评论