![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 91
faihung
这个作者很懒,什么都没留下…
展开
-
linux-signal 信号的处理机制
最近同事的程序设计过程中用到了Linux的signal机制,从而引发了我对Linux中signal机制的思考。Signal机制在Linux中是一个非常常用的进程间通信机制,很多人在使用的时候不会考虑该机制是具体如何实现的。signal机制可以被理解成进程的软中断,因此在实时性方面还是相对比较高的。Linux中signal机制的模型可以采用下图进行描述。 每个进程都会采用一个进程控制块对其进行描述,进程控制块中设计了一个si...转载 2020-07-11 17:04:23 · 581 阅读 · 0 评论 -
Linux IO模式及 select、poll、epoll详解
一、前言注:本文是对众多博客的学习和总结,可能存在理解错误。请带着怀疑的眼光,同时如果有错误希望能指出。同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的。所以先限定一下本文的上下文。本文讨论的背景是Linux环境下的network IO。二、概念说明在进行解释之前,首先要说明几个概念:用户空间和内核空间 进程切...转载 2020-04-25 17:09:10 · 233 阅读 · 0 评论 -
ubuntu 16.04 出现failed to start session解决方法
一般出现这种状况是有与电脑在配置什么环境的时候,强制关掉或者是重启机器的时候出现的。1. 使用ctrl + alt + f1进入命令界面2. 输入用户名与密码3. 再使用sudo apt-get install ubuntu-desktop(等待的时间有点长)如果已安装,请尝试重新安装:sudo apt-get install --reinstall ubuntu-de...原创 2018-09-28 15:06:28 · 17993 阅读 · 4 评论 -
Yocto之目录结构说明
以下结构为yocto工程的一些通用的结构。实际工程中,各个厂商可能根据自己的需要进行剪裁,但是整体的结构以及每个目录存放的内容大体上是一致的。顶层文件结构bitbake bitbake工具目录。bitbake,是一metedate解释器,读取metedate并执行定义的task。执行bitbake命令时,其实执行的就是bitbake/bin/下面的文件。build ...原创 2018-09-14 10:54:36 · 5084 阅读 · 1 评论 -
Linux内核与根文件系统的关系详解
Linux内核与根文件系统的关系 开篇题外话:对于Linux初学者来说,这是一个很纠结的问题,但这也是一个很关键的问题!一语破天机: “尽管内核是 Linux 的核心,但文件却是用户与操作系统交互所采用的主要工具。这对 Linux 来说尤其如此,这是因为在 UNIX 传统中,它使用文件 I/O 机制管理硬件设备和数据文件。”一.什么是文件系统文件系统指文件存在的物理空间,linux系统...转载 2018-09-14 06:41:16 · 9266 阅读 · 9 评论 -
OPKG 软件包管理
Opkg 是一个轻量快速的套件管理系统,目前已成为 Opensource 界嵌入式系统标准。常用于路由、交换机等嵌入式设备中,用来管理软件包的安装升级与下载。常用命令opkg update 更新可以获取的软件包列表 opkg upgrade 对已经安装的软件包升级 opkg list 获取软件列表 opkg install 安装指定的软件包 opkg remove 卸载已经安装的指...转载 2018-09-18 10:32:18 · 8514 阅读 · 0 评论 -
嵌入式Linux文件系统的介绍
学习Linux都是跟文件打交道,却不知道文件系统下的目录存放的内容,有点说不过去,特意准备了这篇文章供大家阅读,哪怕有一点点帮助,都是对我的鼓励。根文件系统一般应该比较小,因为包括严格的文件和一个小的不经常改变的文件系统不容易损坏。损坏的根文件系统一般意味着除非用特定的方法(例如从软盘)系统无法引导。根目录一般不含任何文件,除了可能的标准的系统引导映象,通常叫/vmlinuz 外,所有其他...转载 2018-09-12 17:00:48 · 350 阅读 · 0 评论 -
Linux kernel中module相关命令集
Linux的kernel能够以动态的方式加载,卸载模块,以达到减小内核的大小,复杂度,以及增加内核的灵活性。目前,我知道的有lsmod,insmod,rmmod,modprobe四条命令,现在分别总结记录这四条命令,命令后的模块名称均不加后缀(如.ko或.o)。1:lsmod 即list modules的简称功能说明:显示已载入系统的所有模块。语法:lsmod 模块名称说明:执行lsm...转载 2018-09-11 14:08:54 · 2585 阅读 · 0 评论 -
飞思卡尔IMX6处理器的GPIO配置方式
在linux或android系统中,假如我们要配置飞思卡尔iMX6处理器的GPIO管脚,比如是GPIO_19这个管脚,那么要像这样:#define MX6Q_PAD_GPIO_19__GPIO_4_5 \ (_MX6Q_PAD_GPIO_19__GPIO_4_5| MUX_PAD_CTRL(NO_PAD_CTRL))其中...原创 2018-08-19 18:58:34 · 1898 阅读 · 0 评论 -
Linux spi设备端驱动编写(基于linux4.9的内核)
目录前序1. 在dts中对应的设备树节点2. 重要的数据结构与核心层API3. 实例前序linux下写驱动是站在巨人的肩膀上做开发,不用完全从头做起,甚至你不需要懂SPI时序,照样能写出可用的驱动,原因是:控制器驱动一般芯片商早已写好(linux4.9中针对imx系列cpu是 drivers/spi/spi-imx.c),怎么发、怎么操作CPU寄存器这些细节都是控制器驱动干...转载 2018-08-19 18:20:06 · 2956 阅读 · 0 评论 -
Linux 内核编译指南
编译原则确定 的功能一定编译进内核 可能 的功能编译为模块 不确定 的功能保留默认值,或编译为模组 选择 双号 版本内核,忽略 单号 内核准备工作# 下载Linux内核源代码(Gentoo)emerge -av vanilla-sources# 切换到所需内核源代码eselect kernel listeselect kernel set 2cd /usr/src/l...转载 2018-09-28 16:33:42 · 266 阅读 · 0 评论 -
Linux-4.4-x86_64 内核配置选项简介
Linux-4.4-x86_64 内核配置选项简介作者:金步国64-bit kernelCONFIG_64BIT编译64位内核.本文仅讲述x86_64(AMD64)平台的内核编译,所以这个是必选项.General setup常规设置Cross-compiler tool prefixCONFIG_CROSS_COMPILE交叉编译工具前缀(比如"arm-linux...转载 2018-10-15 19:57:50 · 4930 阅读 · 0 评论 -
linux程序后台运行且将打印信息保存在文件中
在跑比较时间比较长的程序,或者是打印信息比较多的程序时,一般都会后台运行程序,然后把打印信息保存在文件中,等程序运行结束后再检查输出日志。完成该功能可以用如下命令:nohup python3 -u test.py > test.log 2>&1 &最后一个“&”表示后台运行程序 “nohup” 表示程序不被挂起( 嵌入式linux系统可能没...原创 2019-08-27 16:38:53 · 3847 阅读 · 0 评论 -
ubuntu下安装boost
boost中,用到了别的函数库,所以为了使用boost中相应的功能,需要先安装系统中可能缺失的库。第一步: 安装依赖库sudo apt-get install mpi-default-dev #安装mpi库 sudo apt-get install libicu-dev #支持正则表达式的UNICODE字符集 sudo apt-get install python-d...原创 2019-03-04 18:31:58 · 19273 阅读 · 6 评论 -
如何在Linux Kernl中添加spidev的设备节点
目录1. spidev介绍2. 配置spidev设备步骤2.1 配置dts支持spi2.2 配置 imx6q-ecspi 的支持2.3 spidev驱动2.4 错误信息1. spidev介绍如果在内核中配置spidev,会在/dev目录下产生设备节点,通过此节点可以操作挂载在该SPI总线上的设备。用户空间通过该节点可以访问内核空间。2. 配置spidev设备步骤...转载 2018-08-19 22:13:07 · 5257 阅读 · 0 评论 -
ubuntu16.04查看软件的安装位置
以chromium-browser为例find命令 totoro@SWH:~$ sudo find / -name chromium-browser /usr/lib/chromium-browser /usr/lib/chromium-browser/chromium-browser /usr/bin/chromium-browser /usr/share/doc/chromium...转载 2018-11-15 11:42:31 · 9389 阅读 · 0 评论 -
配置Ubuntu虚拟CAN驱动程序(vcan)
sudo modprobe vcan# Create a vcan network interface with a specific namesudo ip link add dev vcan0 type vcansudo ip link set dev vcan0 downsudo ip link set vcan0 mtu 72 支持CAN FDsudo ip link set ...原创 2018-11-21 09:19:31 · 6241 阅读 · 2 评论 -
Linux下用ifconfig命令设置IP、掩码、网关
设置IP和掩码ifconfig eth0 192.168.5.40 netmask 255.255.255.0设置网关route add default gw 192.168.5.1转载 2018-10-17 16:48:32 · 11695 阅读 · 0 评论 -
Embeded linux之网卡驱动
一、配置菜单Device Drivers[*] Network device support --->网络设备驱动、网卡驱动< > Bonding driver support 功能:多网卡绑定具体操作为:将多个以太网通道绑定为一个,也就是两块网卡具有相同的IP地址并且聚合成一个逻辑链路工作,可以用来实现负载均衡或硬件冗余< >...转载 2018-10-17 09:50:12 · 1075 阅读 · 0 评论 -
linux CAN操作命令
1.sudo modprobe vcan加载虚拟can模块2.sudo ip link add dev vcan0 type vcan添加vcan0网卡3.ifconfig -a 可以查到当前can网络 can0 can1,包括收发包数量、是否有错误等等//ip link set can0 type can --help4.ip link set can0 up type ca...转载 2018-10-19 09:45:10 · 12772 阅读 · 1 评论 -
linux-4.1.15移植yaffs2 之编译
1.下载yaffs2源码git clone git://www.aleph1.co.uk/yaffs22.补丁到linux4.1.15内核cd yaffs2./patch-ker.sh cm ~/home/xxx/imx6ul-qt5.6/linux-4.1.15(这里根据你内核的路径进行修改)3.直接修改目标deconfig文件后编译进内核4.或是通过make men...转载 2018-08-14 13:36:18 · 818 阅读 · 2 评论 -
如何在Linux内核中设置打印日志时间戳
在编译Linux内核:make menuconfig ---> Kernel hacking -->printk and dmesg options--> show timing information on printks选上show timing information on printks如下图所示:之后重新编译内核,然后启动即可。...原创 2018-08-14 13:25:24 · 2627 阅读 · 0 评论 -
Linux vim 命令详解
命令历史以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。启动vim 在命令行窗口中输入以下命令即可vim直接启动vim vim文件名打开vim并创建名为filename的文件文件命令打开单个文件vim文件同时打开多个文件vim file1 file2 file3 ... 在vim窗口中打开一个新文件:open file 在新窗口中打开文件:split file ...原创 2018-08-14 12:58:33 · 398 阅读 · 0 评论 -
linux-signal 信号基本概念和类型
信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念。信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。本节先介绍信号的一些基本概念,然后给出一些基本的信号类型和信号对应的事件。基本概念对于理解和使用信号,对于理解信号机制都特别重要。下面就来看看原创 2017-03-30 23:03:06 · 656 阅读 · 0 评论 -
linux中select函数分析.socket
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式转载 2017-03-13 07:31:56 · 588 阅读 · 0 评论 -
Linux下UART串口的测试小程序
Linux下关于关于UART方面的东西,其实很多芯片厂家已经帮我们把内核驱动模块给做好并加载进去了,这个代码是我参考IBM上的应用测试代码:#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <termios.h>#include <stdio.h>#define BAUDRATE B11原创 2017-03-06 21:50:33 · 8832 阅读 · 1 评论 -
Linux的select IO复用机制
#include int FD_ZERO(int fd, fd_set *fdset); int FD_CLR(int fd, fd_set *fdset); int FD_SET(int fd, fd_set *fd_set); int FD_ISSET(int fd, fd_set *fdset);在Linux中,我们可以使用select函数实现I/O端口的复用,转载 2017-03-09 22:28:18 · 349 阅读 · 0 评论 -
Linux 数据流重定向
一、什么是数据流重定向在说数据流重定向之前,先来说说数据流的概念吧。数据流分为三种:标准输入(stdin),标准输出(stdout)和标准错误输出(stderr)。简单来说,标准输出指的是命令执行所回传的正确信息,而标准错误输出指的是命令执行失败后,所回传的错误信息。这些信息默认是打印在屏幕上的。那么什么时数据流重定向呢?从字面上理解就是改变数据流的流向,使之流转载 2017-03-06 22:28:35 · 638 阅读 · 0 评论 -
Linux串口(serial、uart)驱动程序设计
一、核心数据结构 串口驱动有3个核心数据结构,它们都定义在<#include linux/serial_core.h> 1.uart_driver uart_driver包含了串口设备名、串口驱动名、主次设备号、串口控制台(可选)等信息,还封装了tty_driver(底层串口驱动无需关心tty_driver)。struct uart_driver { struct module转载 2017-03-05 18:19:12 · 6024 阅读 · 5 评论 -
如何在Linux检查并使用串口
如何根据不同的需求(如modem,连接空的module或连接到一个dumb终端)在Linux下检查并配置串口呢?Linux 提供了各种工具, Linux 使用 ttySx 作为一个串口设备的名称。例如,COM1 (DOS/Windows 名字) 是 ttyS0, COM2 是 ttyS1 等等。任务: 显示检测到的系统串口支持简单的运行 dmesg 命令$ dmesg | gr转载 2017-03-05 17:49:19 · 2637 阅读 · 0 评论 -
Linux探秘之用户态与内核态
一、 Unix/Linux的体系架构 如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核)。内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环境。用户态即上层应用程序的活动空间,应用程序的执行必须依托于内核提供的资源,包括CPU资源、存储资源、I/O资源等。为了使上层应用能够访问到这些资源,内核必须为上层应用提供转载 2017-03-04 23:45:56 · 418 阅读 · 0 评论 -
Linux进程间通信——使用消息队列
下面来说说如何用不用消息队列来进行进程间的通信,消息队列与命名管道有很多相似之处。一、什么是消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。Linu转载 2017-03-14 22:37:30 · 436 阅读 · 0 评论 -
Linux 信 号 机 制
前面介绍了信号的基本概念,在这一节中,我们将介绍内核如何实现信号机制。即内核如何向一个进程发送信号、进程如何接收一个信号、进程怎样控制自己对信 号的反应、内核在什么时机处理和怎样处理进程收到的信号。还要介绍一下setjmp和longjmp在信号中起到的作用。 1、内核对信号的基本处理方法 内核给一个进程发送软中断信号的方法,是在进程所在的进程表项的信号域设置对应于该信号的位。这原创 2017-03-31 23:06:05 · 447 阅读 · 0 评论 -
Linux 多线程编程(三)
1 线程安全多线程编程环境中,多个线程同时调用某些函数可能会产生错误结果,这些函数称为非线程安全函数。如果库函数能够在多个线程中同时执行并且不会互相干扰,那么这个库函数就是线程安全( thread-safe)函数 。2 互斥量2.1 临界区 在计算机系统中有许多共享资源不允许用户并行使用。例如打印机设备,如果它同时进行两份文档打印,它的输出就会产生交错,从而都无法获得正确的文档。像打印机这样的共享...原创 2018-06-01 18:03:34 · 4566 阅读 · 1 评论 -
Linux 多线程编程(二)
线程管理线程管理包含了线程的创建、终止、等待、分离、设置属性等操作。1 线程 ID线程 ID 可以看作为线程的句柄,用来引用一个线程。Pthreads 线程有一个 pthread_t 类型的 ID 来引用。线程可以通过调用 pthread_self()函数来获取自己的 ID。 pthread_self()函数原型如下:pthread_t pthread_self(void);该函数返回调用线程的线...原创 2018-06-01 16:00:52 · 1256 阅读 · 0 评论 -
Linux 多线程编程(一)
多线程编程是项目中常用技术。本章先介绍线程的基础知识,接着讲解 Pthread 的线程管理,互斥量、条件变量等函数。Linux 多线程概述1 什么是线程线程( thread)是包含在进程内部的顺序执行流,是进程中的实际运作单位,也是操作系统能够进行调度的最小单位。一个进程中可以并发多条线程,每条线程并行执行不同的任务。2 线程与进程的关系线程与进程的关系可以归结于以下几点:一个线程只能属于一个进程...原创 2018-06-01 16:00:27 · 894 阅读 · 0 评论 -
程序破解及ELF文件格式分析
程序破解NOP、JNE、JE、JMP、CMP汇编指令的机器码NOP:NOP指令即“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。(机器码:90)JNE:条件转移指令,如果不相等则跳转。(机器码:75)JE:条件转移指令,如果相等则跳转。(机器码:74)JMP:无条件转移指令。段内直接短转Jmp short(机器码:EB)段内直接近转移Jmp...转载 2018-03-09 22:48:13 · 3674 阅读 · 0 评论 -
USB协议架构及驱动架构
1. USB协议1.1 USB主机系统在USB主机系统中,通过根集线器与外部USB从机设备相连的处理芯片,称为USB主机控制器。USB主机控制器包含硬件、软件和固件一部分。1.2 USB设备系统USB设备按功能分为两部分:集线器(Hub)和功能部件。从下图可知,主机通过根集线器连接到各种外围设备(集线器和功能部件)。 1.3 主机和设备之间通信模型上图展示了USB主机和USB设备之间的数据传输过程转载 2017-12-26 16:51:31 · 1964 阅读 · 1 评论 -
Eclipse控制台输出信息的控制
当你在Eclipse中 running/debugging一个应用程序的时候,有关该应用程序的运行调试信息及日志信息都会输出到控制台(console )显示,但是Eclipse只会显示最后一部分的日志信息,如果你的应用程序会产生大量的运行调试信息及日志信息,你可能会想保持这些信息到文件中,以便查看分析。有三种方法仅供参考:(1)、我们可以设置Eclipse保存控制台文件。打开Run转载 2017-06-20 13:27:29 · 7968 阅读 · 1 评论 -
Eclipse CDT环境下编写、调试、运行C++程序详谈
前面在《Eclipse下编写C++程序——CDT环境搭建》博文中详细介绍了如何在Eclipse中安装CDT插件搭建C/C++开发环境,考虑到C/C++运行程序与Java、Python有一定的差异,也即在运行之前需要手动编译。下面就详细介绍如何手动编译与运行Eclipse-CDT环境下的C/C++程序(前提是C/C++的编译器MinGW已经在系统中安装成功,推荐下载地址:http://sourcef转载 2017-06-20 13:26:39 · 3584 阅读 · 1 评论