Linux
文章平均质量分 52
SoldierJazz2021
横眉冷对千夫指,俯首甘为扫地僧。
展开
-
OpenWrt 之 MT7628 移植第三方SPI驱动
1、在OpenWrt系统上移植SPI驱动前,首先要确保SPI相关引脚未被复用为其他功能,比如GPIO;以下操作已假定该条件成立,否则请修改相关dts和c文件中复用配置;2、打开dts配置文件进行修改,这里我是用的硬件为WRTNODE2R,所以文件路径为:/target/linux/ramips/dts/WRTNODE2R.dts。在SPI控制器节点下添加与我们要添加的SPI设备及驱动匹配的信息...原创 2020-03-26 16:21:47 · 2751 阅读 · 0 评论 -
The futex facility returned an unexpected error code
在 linux 程序执行中若遇到该错误,考虑下是否是如下变量使用了强制内存对齐导致。比如:在将如上变量包含到结构体中,强制1字节或2字节内存对齐。如:信号量相关 struct semaphore,线程相关的 pthread_mutex_t,以及 pthread_cond_t 等等。解决办法:1、取消强制内存对齐;2、不要包含在结构体中或类中;...原创 2020-02-11 10:18:29 · 6699 阅读 · 0 评论 -
C程序中如何获取shell命令执行结果和返回值
如果在C程序中调用了shell命令,那么往往希望得到输出结果以及命令执行的返回布尔值。在这里分为两步来处理: 1.使用 popen 与 pclose 来执行shell命令; 2.使用‘echo $?’来获取上一条指令执行状态,如果为0那么标识成功执行,否则标识执行出错;代码如下:#include <stdio.h>#include <stdlib.h>#include <string.h>原创 2016-10-24 18:55:10 · 7221 阅读 · 1 评论 -
POSIX 串口编程指南
介绍第一章 串口通信基础什么是串口通信什么是 RS-232信号定义异步通信什么是全双工和半双工流控Break信号同步通信操作串口串口文件打开串口写数据到串口从串口读取数据关闭串口第二章 配置串口POSIX 终端接口控制选项本地选项输入选项输出选项控制字符第三章 MODEM 通信什么是 MODEM与翻译 2017-05-20 09:41:56 · 1044 阅读 · 0 评论 -
VMware打开虚拟机黑屏
排除系统崩溃的情况,比如开机输入密码之后系统黑屏,此原因是由于显示选项开启了3D加速导致的,具体修改步骤: VM->Settings->Hardware->Display 在右面的内容栏中将 Accelerate 3D graphics 取消打勾,然后重启即可;原创 2016-08-31 01:06:35 · 37955 阅读 · 3 评论 -
Linux 如何加载并口/打印口驱动
实际上Linux是自带并口驱动的,因此不需要再使用第三方驱动编译加载了。设置并口的具体步骤如下:rmmod lprmmod parport_pcinsmod /usr/lib/modules/$(shell uname -r)/kernel/drivers/parport/parport_pc io=0xb000 irq=10或者 modprobe parport_pc io=0...原创 2017-03-30 14:06:45 · 4179 阅读 · 2 评论 -
modprobe: FATAL: Module xxx.ko not found in directory /lib/modules/$(uname -r)
如果遇到此错误,首先要检查要加载的驱动是否已经存在与系统默认驱动路径/lib/modules/$(uname -r) 下面,确认拷贝完成后,需要在加载模块之前建立该模块的依赖关系。也即必须用 depmod 来更新一下/lib/modules/$(uname -r)/modules.dep 文件。之后再执行指令 modprobe xxx.ko 就可以了。具体步骤:root@ubuntu:原创 2017-04-11 15:07:56 · 17714 阅读 · 10 评论 -
MT7628如何控制GPIO
查看datasheet和确认GPIO复用引脚scheme通过查看mt7628 datasheet可以明确复用关系:在这里我以I2S对应的GPIO引脚为例。查看 mt7628an.dtsi 文件中对gpio的注册$(TOPDIR)假定为宿主机上 OpenWrt 的编译目录。在$(TOPDIR)/target/linux/ramips/dts/mt7628an.dtsi原创 2017-03-23 10:35:45 · 9839 阅读 · 3 评论 -
Linux文件去掉^M
1. 直接用 vim 编辑器打开文件,然后把字符串 "^M" 替换成空的就可以了。命令如下:输入 : 号进入底行模式,然后输入: %s/\r//g ,再 Enter 就可以了。2. 使用现成的工具。命令如下:dos2unix hello.c 新系统如果没有这个工具,可以安装:apt-get install tofrodos使用介绍:Use "fromdos"原创 2017-03-21 21:11:22 · 712 阅读 · 0 评论 -
Linux 内核打印级别
printk的打印级别#define KERN_EMERG "" /* system is unusable */#define KERN_ALERT "" /* action must be taken immediately */#define KERN_CRIT "" /* critical conditions */#define KERN_ERR "" /* er原创 2017-02-25 15:00:42 · 1179 阅读 · 0 评论 -
TCPDUMP/LIBPCAP 3-PCAP 中文手册(1)
SYNOPSIS#include DESCRIPTIONPCAP提供为抓包系统提供高级接口。网络上的所有数据包,即使是发往其他主机的数据包,都可以通过这种机制访问。它还支持将捕获的数据包保存到“savefile”,和从“savefile”中读取数据包。Opening a capture handle for reading调用 pcap_create()原创 2017-02-21 22:30:18 · 1505 阅读 · 0 评论 -
undefined reference to
关于undefined reference这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。1. 链接时缺失了相关目标文件(.o) 测试代码如下: 然后编译。gcc -c test.c gcc –c main.c 得到两个 .o 文件,一个是 main.o,一个是 te转载 2017-04-25 17:25:12 · 667 阅读 · 0 评论 -
epoll为什么比select和poll效率更高
基于 select 和 poll 方法的程序中,因为大量操作的消耗与当前连接数 n 成线性相关,从而导致单个任务的资源消耗和当前任务的关系是 O(n)。所以随着连接数目增大,积累起来的资源消耗很大,结果就是系统吞吐量和机器性能不匹配。为了解决该问题,进而发展出了 epoll、kqueue 和 /dev/poll 这三套利器。epoll 已经成为处理并发、高性能的代表。他们的工作原理:一是避原创 2017-04-26 09:29:05 · 1519 阅读 · 0 评论 -
Libusb开发教程<二> API介绍与使用
背景介绍上一篇博文主要介绍了 Libusb 在 Linux 系统下的详细安装过程,除了 libusb-1.0.9.tar.bz2 离线包之外,还安装了 libusb-compat-0.1.4.tar.bz2。顾名思义,第二个是先前版本的兼容包,因此在使用过程中,开发者就需要区分引用不同的 lib 版本了。libusb 较大版本变动以 V1.0 为分界线,访问官网:http://libusb.i原创 2017-05-11 00:51:16 · 11196 阅读 · 3 评论 -
Android/Linux 系统添加对多点触摸屏的支持
含有 HID 多点触摸控制器的触摸屏、触摸板在 Android 和 Linux 内核中都是由 "hid-multitouch" 驱动进行支持的。因此如果你的系统连接触摸屏没有反应,问题基本都出于驱动未加载或者与触摸屏的 VID 与 PID 不适配。以下分情形讨论:1、系统中已存在“hid-multitouch”驱动 若“hid-multitouch”驱动是以内核模块的方式存在于系统里...原创 2018-07-06 09:52:12 · 4812 阅读 · 8 评论 -
Windows与Linux下tftp服务的使用
tftp 协议是基于 udp 的,轻量小巧,用在局域网和嵌入式上很顺手。大部分帖子把在 linux 上配置的过程描述的过于复杂,其实只是个工具而已。研究协议抓下包对比协议内容也可以满足需求了,下面进入正文。分别讲下在 linux 以及 windows 环境下的tfpd使用教程。1. windows 工具链接下载地址:Tftpd32 链接2. Linux 软件包安装sudo apt-get inst原创 2017-12-06 15:22:35 · 6570 阅读 · 1 评论 -
虚拟机找不到/mnt/hgfs挂载目录
如果在安装好 VMware Tools 并在设置里面设定好共享目录之后仍然找不到 /mnt/hgfs 默认挂载目录,那么尝试以下步骤:1. 确认VMware Tools 和共享目录设定已经完成:2. 如果操作结果如上所示,那么表示前提条件准备充足啦,因为原创 2017-02-10 22:35:10 · 41102 阅读 · 27 评论 -
Libusb开发教程<一> 安装
1. 从官网下载需要使用的离线资源包:进入 libusb.org下载 libusb-1.0.9.tar.bz2 下载 libusb-compat-0.1.4.tar.bz22. 实验平台OS: Ubuntu16.04Kernel: 4.4.03. 安装过程 拷贝步骤一中的离线包到 Linux 系统目录,一般拷贝至 /opt 目录,我在 PC 下新建了一个 Tool原创 2017-02-25 16:55:25 · 4598 阅读 · 3 评论 -
循环队列及C语言实现<三>
在之前的博客中给出了设计循环队列的思路以及源码,这些可都是经过我长期大数据测试的验证哦。当然,现在的很多开源项目和一些封装好的类或接口也都有类似的队列实现方法,之所以我还在使用自己写的这一套方法,主要是因为灵活性较大,我可以定制出适合自己的接口。而且在其上的操作逻辑和结果我也心知肚明。 好了,之所以隔了这么久写这个第三篇文章,主要是考虑到以下因素: <1> 队列并发操作的同步问题;(安全性)原创 2016-12-28 20:12:56 · 1644 阅读 · 0 评论 -
循环队列及C语言实现<二>
在我的上一篇博文中已经讲到循环队列的特点作用以及C语言实现,当然实现和操作的方式比较简单,在实际项目应用中略显粗糙。因此,这一篇提供一个进阶篇的实现与操作接口。具体函数作用可以参见我的注释部分,也是比较简单的小程序,使用的时候直接把里面的接口函数放在一个头文件里面直接调用就可以啦,十分方便易用。需要注意的地方包括:<1> 缓冲区空间完全利用,利用其他标志而不是上一篇中判断首尾位置的方式 “q->fr原创 2016-09-22 20:51:00 · 2844 阅读 · 1 评论 -
Linux 驱动编译报错:error: macro "__DATE__" might prevent reproducible builds [-Werror=date-time]
编译驱动时遇到这个错误提示,表示当前编译环境中将关于 DATE 以及 TIME 的警告也作为错误来进行处理的。有如下几种方法可以参考:1. 在编译驱动的相应 Makefile 中增加一行:CFLAGS += -Wno-error=date-time,然后保存重新 make;2. 若 CFLAGS 不生效,将关键字替换为 EXTRA_FLAGS;3. 修改 /lib/modules/原创 2017-07-17 11:32:18 · 7536 阅读 · 1 评论 -
Linux termios 串口编程之 VTIME与VMIN
在Linux TTY编程时会涉及到 termios 结构,其中c_cc数组里面,有 VTIME 和 VMIN 下标。关于他们的使用经常令人迷惑,查阅了不少博客,上面的讲解也有不少误区。在这里重新对这二者关系进行介绍。结合实验会令人记忆更深刻。VTIME 和 VMIN 的值只能用于非标准模式,两者结合起来共同控制对输入的读取。此外,两者结合使用还能控制在一个程序试图读取与一个终端关联的文件描原创 2017-02-17 13:37:09 · 4945 阅读 · 0 评论 -
tty,串口,控制台与驱动程序
tty 设备的名称是从过去的电传打字机缩写而来,最初是指链接到 Unix 系统上的物理或者虚拟终端。随着时间的推移,当通过串行口能够建立起终端连接后,这个名字也用来指任何的串口设备。物理 tty 设备的例子有串口、USB 到串口的转换器,还有需要特殊处理才能正常工作的调制解调器(比如传统的 WinModem 类设备)等。tty 虚拟设备支持虚拟控制台,它能通过键盘及网络连接或者通过 xterm原创 2017-05-17 15:13:14 · 1320 阅读 · 0 评论 -
iSCSI 2-环境搭建<二>
iSCSI initiator 环境配置原创 2017-01-20 16:04:45 · 487 阅读 · 0 评论 -
调用 usb_control_msg 返回错误值 -32, Broken pipe, 对 hidraw write时 返回错误值 -32, Broken pipe
如题,使用 libusb 对 hid 类设备进行控制传输的时候,有时会遇到此错误,但是实际上传输是成功的,用usb分析仪等工具和程序中验证,比如发送数据成功后,让设备返回给主机,主机读取数据后验证数据正确性。由此看来,该错误是内核返回出现了错误,并不是指实际的通讯异常。现在在使用其他HID类设备在进行测试,发现有些HID类设备不会出现类似的报错,因此写程序模拟该设备通讯过程,尝试与主机通讯,依原创 2017-02-28 20:11:07 · 3213 阅读 · 6 评论 -
OPENWRT使用命令行设置无线和有线网络
在我们将路由器固件刷成开源的基于Linux内核的openwrt系统后,由于openwrt默认未安装WEB管理界面,所以我们需要先通过SSH或者telnet对路由器进行网络设置,设置完成后可通过openwrt的软件包管理opkg安装web设置界面Luci。 设置lan ip(即访问路由的ip) Shell代码 uci set network.lan.ipaddr=[lan ip] 使用pppo转载 2016-09-05 15:01:11 · 6706 阅读 · 0 评论 -
Linux计算求取文件长度
在文件IO的编程过程中,经常会遇到如何求取文件长度的问题,这里将工积累的一些常用方法写出来与大家分享。第一类:lseek/fseek1、lseekint GetFileSize(char *_pName) { int iFd = -1; int iLen = 0; if (_pName == NULL) { return -1; }转载 2016-09-02 17:53:33 · 1310 阅读 · 0 评论 -
Linux 统计文件行数,字节数。
语法:wc [选项] 文件…说明:该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。该命令各选项含义如下: - c 统计字节数。 - l 统计行数。 - w 统计字数。这些选项可以组合使用。输出列的顺序和数目不受选项的顺序和数目的影响。总是按下述顺序显示并且每项最多一列。行数、字数、字节数、文原创 2016-09-01 17:17:05 · 1303 阅读 · 0 评论 -
不带缓存的I/O和标准(带缓存的)I/O
首先,先稍微了解系统调用的概念: 系统调用,英文名system call,每个操作系统都在内核里有一些内建的函数库,这些函数可以用来完成一些系统系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序,如果没有系统调用和内核函数,用户将不能编写大型应用程序,及别的功能,这些函数集合起来就叫做程序接口或应用编程接口(Application Programmi转载 2016-09-01 14:30:14 · 543 阅读 · 0 评论 -
如何安装sshd服务用于远程登录
此博文前提是系统默认没有安装openssh-server,而且现在大部分系统默认只包含openssh-client,这对于需要远程调试和管理的开发者们很不方便,因此本文探讨如何离线安装sshd服务,对于可以在线安装的就比较方便了,可参阅其他博客,本文就不探讨啦~~1.首先登录openssh官网:www.openssh.com;2.找到离线安装包:openssh-7.3p1.tar.gz;具体版本可以原创 2016-08-31 14:53:08 · 4611 阅读 · 0 评论 -
Linux下如何安装最新版本工具
此博文主要考虑到两个方面的需求: 1.主机处于离线状态,需要离线安装相关工具包; 2.主机的软件源不是最新的,通过在线更新无法达到需求的版本;此文以获取openssh相关工具包,其他工具包原理类似: 1.首先找到工具包的官网地址,这里是:www.openssh.com;2.根据导航找到需要的离线资源包,这个因网站而异,有的在网址首页,有的在Download/Source等目录下,这里的链接为:原创 2016-08-31 13:49:19 · 655 阅读 · 0 评论 -
linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结
Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进 行压缩了,所以首先就来讲讲tar命令的基本用法: tar命令的选项有很多(用man tar可以查看到),但常用的就那么几个选项,下面 来举例说明一下: # tar -cf all.tar *.jpg转载 2016-09-11 23:29:39 · 582 阅读 · 0 评论 -
VIM选择文本块/复制/粘贴
在正常模式下(按ESC进入)按键v进入可视化模式,然后按键盘左右键或h,l键即可实现文本的选择。 其它相关命令: v:按字符选择。经常使用的模式,所以亲自尝试一下它。V:按行选择。这在你想拷贝或者移动很多行的文本的时候特别有用。CTRL+v:按块选择。非常强大,只在很少的编辑器中才有这样的功能。你可以选择一个矩形块,并且在这个矩形里面的文本会被高亮。值得注意的是如果VIM中使用自动换行,那么直到转载 2016-09-11 23:08:40 · 842 阅读 · 0 评论 -
网卡混杂模式介绍与设置
1.混杂模式介绍混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包。默认情况下网卡只把发给本机的包(包括广播包)传递给上层程序,其它的包一律丢弃。简单的讲,混杂模式就是指网卡能接受所有通过它的数据流,不管是什么格式,什么地址的。事实上,计算机收到数据包后,由网络层进行判断,确定是递交上层(传输层),还是丢弃,还是递交下层(数据链路层、MAC子层)转发。2.网卡工作模式网卡具有如下的几种工作模原创 2016-08-30 11:58:42 · 18943 阅读 · 0 评论 -
原始套接字抓取所有以太网数据包与分析
If you have any idea, just send comments to me.1.原始套接字介绍关于socket使用客户机/服务器模型的 SOCK_STREAM 或者 SOCK_DGRAM 用于 TCP 和 UDP 连接的应用更为普遍一些,而如果考虑到从网卡中直接捕获原始报文数据就需要用到原始套接字 SOCK_RAW 类型了。其中原始套接字根据 socket 选项可以工作在网络不同层原创 2016-08-30 11:38:37 · 4864 阅读 · 1 评论 -
linux 进程开始与终止
exit(0) 表示程序正常退出; exit(1)/exit(-1) 表示程序异常退出; exit() 结束当前进程/当前程序/,在整个程序中,只要被调用就结束,返回参数值; return() 是当前函数返回,当然如果是在主函数main, 自然也就结束当前进程了,如果不是,那就是退回上一层调用。在多个进程时.如果有时要检测上进程是否正常退出的.就要用到上个进程的返回值.进程开始:C程序是从m转载 2016-08-26 18:44:02 · 730 阅读 · 0 评论 -
linux系统libpcap安装方法
依次执行下列三条命令即可安装,但如果希望libpcap能在linux上正常工作,则必须使内核支持”packet”协议,也即在编译内核时打开配置选项 CONFIG_PACKET(选项缺省为打开)。 然后,执行以下命令: (sudo) ./configure (sudo) make (sudo) make install 1、打开网址:www.tcpdump.org/ 下载 libpc转载 2016-09-20 08:45:03 · 2383 阅读 · 0 评论 -
linux input/output error
在操作linux系统的时候有时候会遇到这个错误提示,那么首先要确定之前有没有操作过分区表,修改过磁盘配置等。尤其在虚拟机环境下改动后直接操作都会出现这个错误,此时尝试以下方法:1. reboot 2. 确定报错的挂载目录对应的分区,通过 df -Th查看。 然后修复模式进入系统,执行:e2fsck -a /dev/sdb4 (sdb4 为假设的问题分区)有其他出错情形与方法,可原创 2017-01-21 17:19:05 · 32065 阅读 · 1 评论 -
iSCSI 2-环境搭建<一>
实验环境操作系统:CentOS release 6.5 (Final)iSCSI Target:10.0.0.11 (#yum install scsi-target-utils)iSCSI Initiator 1:10.0.0.12 (#yum install iscsi-initiator-utils)iSCSI Initiator 2::10.0.0.13 (#yu原创 2017-01-20 16:06:51 · 1155 阅读 · 0 评论 -
Linux LVM-删除卷组逻辑卷物理卷
查看卷组相关信息[root@localhost /]# vgscan Reading all physical volumes. This may take a while... Found volume group "VolGroup00" using metadata type lvm2查看卷组VolGroup00包含的PV、LV信息。[root@localhost原创 2017-01-20 15:09:03 · 16436 阅读 · 0 评论