Linux
文章平均质量分 71
hc-斌斌
这个作者很懒,什么都没留下…
展开
-
rt-thread调度锁与关闭中断深度探究
1.说明对于使用rt-thread操作系统的人来说,我提出一个问题?什么时候用到调度锁,又什么时候用到关闭中断?很多人初次学习rtt操作系统的时候都没有深入的去思考这些问题,以及关闭调度器后可以做什么事情,关闭中断后又能做什么事情?本文从解决这些问题的角度出发,从实际应用的角度去分析这些问题。2.调度锁与关闭中断在rt-thread中,保护临界区的方法除了IPC线程间通信机制,然后就是调度锁与关闭中断了。调度锁rt-thread调度锁的目的是让调度器停止工作,这时不进行线程的切换工作..转载 2021-12-04 19:00:05 · 1458 阅读 · 5 评论 -
udev与devfs文件系统
devfs(设备文件系统)是由Linux2.4内核引入的,它的出现主要使得设备驱动程序能够自主管理自己的设备文件。具体来说,devfs具有如下优点: 可以通过程序在设备初始化时在/dev目录下创建设备文件,卸载设备时将它删除。 设备驱动程序可以指定设备名、所有者和权限位,用户空间程序仍可以修改所有者和权限位。 不再需要为设备驱动程序分配主设备号以及处理次设备号,在程序中可以...转载 2020-05-06 15:55:36 · 334 阅读 · 0 评论 -
I/O端口和I/O内存
每个外设都是通过读写它的寄存器来控制的。通常,通过内存地址空间或I/O地址空间进行访问(计算机组成原理里面的统一编址和IO独立编址)。在硬件层面上,I/O区域与内存区域(DRAM)在概念上没有区别,它们都是通过在地址总线和控制总线上触发电信号来进行读写操作。根据处理器的不同,有些处理如X86拥有独立的外设地址空间,以区别普通的内存地址空间。针对I/O端口,会提供特殊的CPU访问指令。而有些处理器则...转载 2020-05-06 15:51:22 · 368 阅读 · 0 评论 -
uboot详细分析
uboot使用uboot控制台,倒计时命令: 调试,操作一些硬件setenv printenv saveenvnand erasenand writetftp 20008000 zImagehelp: uboot可以提供哪些命令setenv == set == sete == seten环境变量: 为命令提供参数serve...转载 2020-04-22 18:45:43 · 4029 阅读 · 0 评论 -
如何快速搞懂代码调用流程
例如想搞懂wget这个软件的代码实现:下载wget 源码 编译debug版本的binary (取消编译优化选项) 导出函数符号 $ nm wget | grep '[0-9a-z] [tT]' > wget.map gdb 7.0 以后版本支持python 扩展,可用python 脚本调用gdb 命令。 写个简单的 gdb_wget.py,目的是将所有的函数打上断点,断住后打...转载 2020-04-22 14:48:18 · 581 阅读 · 0 评论 -
性能内存优化
整个对于Linux代码的优化,应该区分为从整个层面的系统优化,和从模块角度的算法性能优化。最终追寻的优化是原来原理层面的追寻。Linux系统的优化也是,属于系统层面的优化。针对特定的场景要求根据优先级做出取舍关系。二、CPU运行性能性能优化也就是下面的几个策略:1:用空间换时间。各种cache如CPU L1/L2/RAM到硬盘,都是用空间来换时间的策略。这样策略...原创 2020-03-24 18:28:17 · 126 阅读 · 0 评论 -
configure时,Cannot find install-sh, install.sh, or shtool in ac-aux解决办法
在集群上面安装软件,./configure报错如下:Cannot find install-sh, install.sh, or shtool in ac-aux解决方法:执行如下操作(Ubuntu)sudo apt-get install automake autoconf libtool./configure, make all, make install或者,加$ autor...转载 2020-03-13 12:27:38 · 9160 阅读 · 0 评论 -
linux 设备树格式详解
1. Linux设备树的起源在Linux 2.6中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾,如板上的platform设备、resource、i2c_board_info、spi_board_info以及各种硬件platform_data。常见的s3c2410、s3c...原创 2020-01-04 14:19:06 · 800 阅读 · 0 评论 -
linux 总线的横向对比
从上述表格中,我们不难看出,总线:mybus(自己写的),platform(平台总线),IIC总线都是基于bus----driver----device的模型对于总线而言,无非就是从struct bus_type派生出来的一个实例;对于driver而言,基本都是继承struct device_driver而扩展出来的;对于device而言,无非就是从struct device而扩...原创 2020-01-04 14:15:24 · 320 阅读 · 0 评论 -
linux 驱动总线
1. 总线的基本概念1.1 Linux设备驱动模型的由来 实现入口函数xxx_init()和卸载函数xxx_exit() 申请设备号register_chrdev(与内核相关) 利用udev/mdev机制创建设备文件(节点)class_create, device_create(与内核相关) 硬件部分初始化 io资源映射 ioremap,内核...原创 2020-01-04 14:09:45 · 629 阅读 · 0 评论 -
linux 驱动中断与IO
中断的基本概念 中断号的获取方式 中断申请 中断处理 上传数据给用户 IO模型 异步信号 中断下半部1. 中断的基本概念参考裸机开发中的相关资料2. 中断号的获取方式设备树:dts 设备树源码设备树里面一些通用的定义,提取出,形成类似c 头文件,dtsi 称之为:设备树的头文件,#include "xxx.dtsi"dtc 把dts编译成二进制文件(dtb) 给...原创 2020-01-04 14:00:45 · 1316 阅读 · 0 评论 -
linux驱动基础(一)
目录:开发环境搭建 利用source insight创建Linux源码工程 驱动模块开发基础 字符设备驱动基础开发环境搭建一、tftp 服务器搭建(ubuntu版)1.安装tftp-serversudo apt-get install tftpd-hpa2.配置TFTP服务器sudo vim /etc/default/tftpd-hpa将原来的内容改为:...原创 2020-01-04 13:58:47 · 259 阅读 · 0 评论 -
linux使用pkg-config写简单的Makefile
dpkg -L xxx 查询某个安装库的信息pkg-config 描述了如下功能 检查库的版本号。如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件。 获得编译预处理参数,如宏定义,头文件的位置。 获得链接参数,如库及依赖的其它库的位置,文件名及其它一些连接参数。 自动加入所依赖的其它库的设置。 比如将要编译的代码如下, ...原创 2019-12-01 19:03:03 · 1124 阅读 · 0 评论 -
再谈互斥锁与条件变量!
pthread_cond_wait总和一个互斥锁结合使用。在调用pthread_cond_wait前要先获取锁。pthread_cond_wait函数执行时先自动释放指定的锁,然后等待条件变量的变化。在函数调用返回之前,自动将指定的互斥量重新锁住。int pthread_cond_signal(pthread_cond_t * cond);pthread_cond_signal通过条件变量...原创 2019-11-30 21:53:21 · 80 阅读 · 0 评论 -
curl 参数配置详解
第一类:对于下面的这些option的可选参数,value应该被设置一个bool类型的值:CURLOPT_AUTOREFERER当根据Location:重定向时,自动设置header中的Referer:信息。CURLOPT_BINARYTRANSFER在启用CURLOPT_RETURNTRANSFER的时候,返回原生的(Raw)输出。CURLOPT_COOKIESESSION启用时curl会仅...原创 2019-11-30 21:49:13 · 2032 阅读 · 0 评论 -
静态库.O链接
a 文件的结构和.tar文件就没有什么区别。 x 命令解出来, a 命令添加, t命令列表假设A.a, B.a C.a 在/usr/local/lib目录下mkdir /tmp/libABCcd /tmp/libABCar x /usr/local/lib/A.aar x /usr/local/lib/B.aar x /usr/local/lib/C.aar cru libABC.a...转载 2019-11-12 16:18:32 · 199 阅读 · 0 评论 -
Linux下库相关命令
Linux下库相关命令g++(gcc)编译选项l -shared :指定生成动态链接库。l -static :指定生成静态链接库。l -fPIC :表示编译为位置独立的代码,用于编译共享库。目标文件需要创建成位置无关码, 念上就是在可执行程序装载它们的时候,它们可以放在可执行程序的内存里的任何地方。l -L. :表示要连接的库所在的目录。l -l:指定链接时需要的...原创 2019-01-12 13:47:08 · 279 阅读 · 0 评论 -
使用QtCreator作为嵌入式Linux的IDE及可视化调试工具
Qt Creator For 嵌入式Linux搭建流程1.安装QtCreator 2.编译Qt for embbed 3.编译gdb及gdbserver 4.使用QtCreator创建C++工程 5.远程调试嵌入式Linux中的程序1.安装QtCreator首先从Qt官网下载最新的QtCreator离线安装包,使用目前最新的3.5.1版本。下载地址:https://www....转载 2019-01-26 13:59:01 · 2133 阅读 · 0 评论 -
Alsa音频编程
一、前序这里了解一下各个参数的含义以及一些基本概念。声音是连续模拟量,计算机将它离散化之后用数字表示,就有了以下几个名词术语。样本长度(sample):样本是记录音频数据最基本的单位,计算机对每个通道采样量化时数字比特位数,常见的有8位和16位。通道数(channel):该参数为1表示单声道,2则是立体声。帧(frame):帧记录了一个声音单元,其长度为样本长度与通道数的乘积,...转载 2019-01-28 17:02:55 · 677 阅读 · 0 评论 -
Linux 线程相关
int pthread_create( pthread_t *tid, const pthread_attr_t *attr, void*(*start_routine)(void*), void *arg );转载 2018-01-11 13:27:59 · 156 阅读 · 0 评论 -
理解 Linux 的硬链接与软链接
从 inode 了解 Linux 文件系统硬链接与软链接是 Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称 inode),而索引节点对象是 Linux 虚拟文件系统 (VFS) 的四个基本概念之一。通过剖析硬链接与软链接的联系与区别,我们可更好的了解 Linux 中 VFS 这一通用文件模型。并让 Linux 普通用户和系统管转载 2015-11-03 11:45:54 · 293 阅读 · 0 评论 -
libiconv1.15库裁剪
从网上下载了libiconv-1.14,编译后发现生成的库文件有1.2M之多,感觉太大了,自己认为在库中数据占很大部分,因为iconv支持世界上几乎所有常见语言的编码转换,但是我只需要UTF-8转换为GB2312,所以有必要裁剪一下。 在对libiconv-1.14裁剪时遇到了很多错误,特别是canonical.h的一大串错误,感觉canonical.h是由其它地方生成的文件,不太好解决...转载 2018-11-24 13:37:53 · 1004 阅读 · 0 评论 -
linux configure 交叉编译 配置参数
设置编译器:--build = 软件在什么平台下编译--host = 软件在什么平台下运行--target = 软件为什么平台服务(仅限开发工具链)host= 后面的参数是四个部分:架构-厂商-内核-标准库 eg. i686-pc-linux-gnu在./configure的时候,将CC参数放入configure之前,并且要制定cache file,才能完全即时识别编译器:CC=X...转载 2018-11-24 10:55:14 · 2075 阅读 · 0 评论 -
MAKE FILE 相关
CFLAGS 表示用于C编译器的选项 CXXFLAGS 表示用于C++编译器的选项 这两个变量实际上涵盖了编译和汇编的两个步骤CFLAGS:指定头文件(.h)的路径,如:CFLAGS=-I/usr/include -I/path/include 。相同地,安装一个包时会在安装路径下建立一个include文件夹,当安装过程中出现故障时,试着把曾经安装的包的include文件夹增加到该变量...转载 2018-08-29 15:37:12 · 139 阅读 · 0 评论 -
Linux Socket详解 <大全> 基础知识
1. Socket基础概念:1.1:形象类比:Socket和电话网络的概念可以做一个很好的类比:Linux 编程中所说的socket就如同一个端点,类比到电话网中,它就如同一个电话机。 而Socket地址就如同电话网中的电话号码。。1.2:socket地址和地址格式:Berkeley小组在构思BSD socket时, TCP/IP协议也正在发展,转载 2017-05-25 19:51:45 · 1913 阅读 · 0 评论 -
poen 用法
相关函数:pipe, mkfifo, pclose, fork, system, fopen头文件:#include 定义函数:FILE * popen(const char * command, const char * type);函数说明:popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c 来执行参数command 的指令。参数原创 2017-05-25 19:31:57 · 10577 阅读 · 0 评论 -
实际用户ID,有效用户ID及设置用户ID详解
实际用户ID,有效用户ID和设置用户ID 看UNIX相关的书时经常能遇到这几个概念,但一直没有好好去理清这几个概念,以致对这几个概念一直一知半解。今天好好区分了一下这几个概念并总结如下。说白了这几个UID引出都是为了系统的权限管理。 下面分别用RUID, EUID,SUID来表示实际用户ID,有效用户ID,设置用户ID。另外用户ID是个整型数,为了说转载 2016-10-12 13:52:55 · 1628 阅读 · 0 评论 -
Linux Shell脚本编程基础
我们可以使用任意一种文字编辑器,比如gedit、kedit、emacs、vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行):# !/bin/sh…注意:最好使用“!/bin/bash”而不是“!/bin/sh”,如果使用tc shell改为tcsh,其他类似。符号#!用来告诉系统执行该脚本的程序,本例使用/bin/sh。编辑结束并保存后,如果转载 2015-11-03 11:47:22 · 334 阅读 · 0 评论 -
Linux设置环境变量小结
1、总结背景在linux系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现“command not found”的提示内容。如果每次都到安装目标文件夹内,找到可执行文件来进行操作就太繁琐了。这涉及到环境变量PATH的设置问题,而PATH的设置也是在linux下定制环境变量的一个组成部分。本案例基于RedHat AS4讲解环境变量定制的问题。2、变量简介Linux是转载 2015-10-30 13:54:05 · 287 阅读 · 0 评论 -
Linux系统目录结构
/bin 这里存放了标准的linux的工具、shell脚本和一些可执行文件,比如像“ls”、“vi”还有“more”等等。通常这个目录已经包含在“path”系统变量里面了。也就是当你在终端里输入ls,系统就会去“/bin”目录下面查找是不是有ls这个程序。/boot 启动文件,所有与系统启动有关的文件都保存在这里。例如有各个内核版本的引导项grub的管理文件还有memu.lst 之原创 2015-10-16 14:13:16 · 262 阅读 · 0 评论 -
VI文本编辑器
转载 2015-08-19 14:10:53 · 281 阅读 · 0 评论 -
Linux Shell编程入门
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用。深入地了解和熟练地掌握Shell编程,是每一个Linux用户的必修 功课之一。Linux的Shell转载 2015-08-17 16:20:14 · 249 阅读 · 0 评论 -
LINUX图文教程
Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。这个是我将鸟哥书上的进行了一下整理的,希望不要涉及到版权问题。1、显示日期的指令: date2、显示日历的指令:cal3、简单好用的计算器:bc转载 2015-08-13 17:04:24 · 372 阅读 · 0 评论 -
UNIX_SOCKET 进程间通信
使用socket实现进程间通信:(UNIX domain中面向连接通信) 使用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通信,且建立的通信是双向的通信。man unix内容如下:NAME( 名称) unix, PF_UNIX, AF_UNIX, PF_LOCAL, AF_LOCAL ? 用于本地内部进程通讯的套接 字。SYNOP转载 2017-05-19 16:05:12 · 388 阅读 · 0 评论 -
Linux的SOCKET编程详解
Linux的SOCKET编程详解1. 网络中进程之间如何通信进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal)UNIX system V有转载 2017-05-19 18:06:38 · 235 阅读 · 0 评论 -
select, poll和epoll的区别
select()系统调用提供一个机制来实现同步多元I/O:#include #include #include int select (int n,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,struct timeval *timeout);FD_CLR(int fd, fd_set *set转载 2017-05-19 18:08:07 · 225 阅读 · 0 评论 -
Linux根文件系统制作与各种挂载方式的实现
Linux根文件系统的制作什么是文件系统计算机的文件系统是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数据实际保存在硬盘(或者光盘)的地址为多少的数据块上,只需要记住这个文件的所属目录和文件名。在写入新数据之前,用户不必关心硬盘上的那个块地址没有被使用,硬盘上的存...转载 2018-02-28 18:05:32 · 10696 阅读 · 0 评论 -
线程同步
1.互斥量互斥变量用pthead_mutex_t数据类型来表示,在使用互斥变量之前,必须首先对它进行初始化,可以把它置为常量PTHREAD_MUTEX_INITIALIZER(只对静态分配的互斥量),也可以能过调用pthread_mutex_init函数进行初始化。如果动态地分配互斥量(例如通过调用malloc)函数,那么释放内存前需要使用pthread_mutex_destr转载 2018-01-11 13:37:01 · 178 阅读 · 0 评论 -
线程属性
一.线程属性 线程具有属性,用pthread_attr_t表示,在对该结构进行处理之前必须进行初始化,在使用后需要对其去除初始化。我们用pthread_attr_init函数对其初始化,用pthread_attr_destroy对其去除初始化。 名称::pthread_attr_init/pthread_attr_destroy转载 2018-01-11 13:35:50 · 1039 阅读 · 0 评论 -
互斥锁属性
使用互斥锁(互斥)可以使线程按顺序执行。通常,互斥锁通过确保一次只有一个线程执行代码的临界段来同步多个线程。互斥锁还可以保护单线程代码。要更改缺省的互斥锁属性,可以对属性对象进行声明和初始化。通常,互斥锁属性会设置在应用程序开头的某个位置,以便可以快速查找和轻松修改。表 4–1 列出了用来处理互斥锁属性的函数。表 4–1 互斥锁属性例程操作相关函数说明转载 2018-01-11 13:34:53 · 225 阅读 · 0 评论