![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
aningxiaoxixi
此人很聪明,一看就会,所以不写
展开
-
Linux 目录遍历文件
【代码】Linux 目录遍历文件。原创 2023-01-10 21:51:53 · 338 阅读 · 0 评论 -
linux 任务调度 sched_setscheduler
我们考虑一种很坏的情况,如果有若干相同优先级的线程等待执行,然而最早执行的线程无终止或者阻塞动作,那么其他线程是无法执行的,除非当前线程调用如pthread_yield之类的函数,所以在使用SCHED_FIFO的时候要小心处理相同级别线程的动作。它是默认的线程分时调度策略,所有的线程的优先级别都是0,线程的调度是通过分时来完成的。请注意,这种调度策略也是抢占式的,当高优先级的线程准备运行的时候,当前线程将被抢占并进入等待队列。这种调度策略仅仅决定线程在可运行线程队列中的具有相同优先级的线程的运行次序。转载 2022-09-17 19:01:27 · 1209 阅读 · 0 评论 -
linux内核 /proc/interrupts
读取到的内容从左到右,分别为:1、逻辑中断号,2、中断在各CPU发生的次数,3、中断所属设备类名称,4、硬件中断号,5、中断处理函数。已经注册的中断为什么在proc/interrupts中不存在时,因为注册的中断注销了。原创 2022-09-02 00:16:52 · 1595 阅读 · 0 评论 -
设备树dts(devices tree)及其语法、知识点
聊聊Linux 运行时设备树原创 2022-09-01 23:56:50 · 205 阅读 · 0 评论 -
地址映射 ioremap (物理地址转换为虚拟地址)
但是CPU不会为这些已知的外设IO内存资源预先指定虚拟地址的值,所以驱动程序不可以直接就通过外设的物理地址访问到IO内存,而必须要将其映射到虚拟地址空间(通过页表),然后才能根据内核映射过后的虚拟地址来通过内存指令访问这些IO内存,并对其进行操作。在驱动开发过程中一般使用内存映射方式。IO映射方式(IO-mapped):比较典型的有X86处理器为外设专门实现了一个单独的地址空间,称为“IO端口空间”或者“IO地址空间”,此时CPU可以通过专门的指令(比如X86的IN和OUT)来访问这个“IO端口空间”。..转载 2022-08-28 18:10:00 · 1221 阅读 · 0 评论 -
kernel: kmalloc
可以看出,每一个不同的order,都会对应一个free_area,然后同一个order,同一个free_area下,再有每一个不同的 MIGRATE_TYPES ,都会对应一个free_list,即一个链表,我们可以视为一个内存池,这个链表具体是指向struct page的lru域。接着就是针对order>=1的情况,调用__rmqueue_smallest(),将会在zone中寻找能够满足order要求的,存在的,最小的对应内存块。如果释放超过一个page,则会使用正常的buddy算法。......转载 2022-08-16 19:39:04 · 203 阅读 · 0 评论 -
linux内核 内存管理
1 slab分配器是使用伙伴系统分配出来的实际的物理地址,不过slab分配器在连续的物理页面上,对小内存进行管理。伙伴系统在分配内存的时候是以page为单位的,但是实际上可能需求是以Byte为单位的,所以使用slab来管理小块内存。2 kmalloc 函数用来创建通用的缓存,使用slab 机制。3 Linux 支持单个最大的 slab 缓存大小为32MB。相反则是 free函数。............原创 2022-08-15 23:53:24 · 159 阅读 · 0 评论 -
查看线程名and设置线程名
linux线程原创 2022-06-03 12:46:50 · 310 阅读 · 0 评论 -
指定查找共享库(动态链接库)时除了默认路径之外的其他路径
例如export LD_LIBRARY_PATH=/home/desktop/work/mywork/my_mjpg-streamer/mjpg-streamer-code-r182/mjpg-streamer/原创 2022-04-11 23:18:52 · 171 阅读 · 0 评论 -
pthread_cancel 总结
查看老吴的代码,这两条不需要写,因为这个两个属性是默认的! pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);老吴的文章:Linux-C编程 / 多线程 / 如何终止某个线程?...原创 2022-04-07 00:25:40 · 90 阅读 · 0 评论 -
linux posix 定时器
#include <stdio.h> #include <signal.h> #include <time.h> #include <string.h> #include <stdlib.h> #include <unistd.h> int newa = 0;void timer_thread(union sigval v) { printf("timer_thread function! %d %d\n"原创 2022-04-06 23:47:03 · 449 阅读 · 0 评论 -
linux 系统调用 inotify & epoll
**问题**1 inotify 如何检测事件发生a 首先生成 特定文件fd mINotifyFd = inotify_init();b 特定文件fd 与 目录绑定c 通过 读 特定文件fd 可以得到什么事件发生。2 epoll 是否支持 普通文件?支持 管道,fifo。套接字,消息队列,终端,设备,但是不支持普通文件 或者 目录的fd 3 epoll inotify 都是阻塞的(epoll_wait, read 会阻塞)。所以如何 将两个结合起来呢?把原创 2022-02-05 17:36:24 · 635 阅读 · 0 评论 -
linux fifo
参考:Linux系统编程之FIFO通信写fifo#include<string.h>#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<errno.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#define ERR_EXIT(m) \ d原创 2022-01-30 09:37:06 · 500 阅读 · 0 评论 -
mount 分析
A 挂载 硬件 命令mount 设备地址(/dev/xxx) 文件地址(/mnt/xxx)参考 :linux mount 挂载U盘B mount 注意点1 一般挂载的为存储介质2 命令的功能是为存储介质 提供访问点c 挂载 根文件系统1 首先 linux内核会根据 / 目录来找 各种文件夹,所以要挂载 根目录2 由1 可知根目录上,必须有 正常 linux 该有的目录...原创 2021-07-10 12:11:37 · 102 阅读 · 0 评论 -
linux_api 错误: errno perror strerror
1 首先 perror 函数比较简单。头文件 <stdio.h>所以只需要直接使用就行了 1 #include <stdio.h> 2 3 int main () 4 { 5 FILE *fp; 6 7 fp = fopen("file.txt", "r"); //这个文件没有 8 if( fp == NULL ) { 9 perror("Error: "); //只需添加这一句 10原创 2021-03-20 14:20:54 · 116 阅读 · 0 评论 -
电源管理
linux 电源管理分为两种1 系统睡眠模型 (对整体而言,整个系统进入某个状态)2 runtime 电源管理 (对于某个设备而言)怎样动态地打开或关闭设备的电源?最简单的方法:在驱动程序里,在open函数中打开电源,在close函数中关闭电源3pm_runtime_enable / pm_runtime_disable : 使能/禁止runtime PM, 修改disable_depth变量pm_runtime_enable 再 probe 执行m_runtime_d原创 2021-03-07 22:48:25 · 360 阅读 · 0 评论 -
线程睡眠、互斥锁条件变量、time
1 sleep 支持线程2 usleep 支持线程3 锁跟信号量 方法#include <stdio.h>#include <sys/time.h>#include <unistd.h>#include <pthread.h>#include <errno.h>#include<time.h> //C语言的头文件 void mytime() { time_t now; //实例化t原创 2020-12-29 01:07:24 · 155 阅读 · 0 评论 -
user层 互斥锁和信号量
https://www.cnblogs.com/fengbohello/p/7571722.html原创 2020-11-24 13:25:30 · 110 阅读 · 0 评论 -
找不到GCC需要使用的动态库
问题分析调用的高版本的gcc,生成的动态库没有替换老版本gcc的动态库导致的,找到新版的gcc库指定。使用 strings 跟 grep GLIBC 得到支持的版本strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBC然后find / -name libstdc++.so* 找到所有的动态库文件使用 strings 跟 grep GLIBC 判断支持 这个版本的静态库最后使用ln -s 命令 创建软连接参考解.原创 2020-08-07 17:26:25 · 365 阅读 · 0 评论 -
驱动面试
今天面试被问了驱动两个问题! 但是真的没有做过驱动经验!1 使用锁需要注意什么锁 : 有多种锁自旋锁:1 自旋锁防止死锁进程不能进入sleep模式中2 自旋锁临界代码段执行时间不宜过长2 spi 控制 oled ,spi 中断函数,使用的是上半部,还是下半部对于一个中断,如何划分出上下两部分呢?哪些处理放在上半步,哪些放在下半部? 这里有一些经验可供借鉴:1 如果一个任务对时间十分敏感,将其放在上半部。2 如果一个任务和硬件有关,将其放在上半部。3 如果一个任务要保证不被其他中原创 2020-07-29 21:24:51 · 476 阅读 · 0 评论 -
如何在linux下交叉编译 应用程序
第一步./configure --host=arm-linux --prefix=$PWD/tmp知识点1 $PWD 一般linux 环境都有这个变量,PWD 表示当前路径2 --prefix 编译的时候用来指bai定程序存放路径 。不指定prefix,可执行文件默认放bai在du/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc。其它的资源文件放在/usr /local/share。第二步make &原创 2020-07-31 15:39:33 · 715 阅读 · 0 评论 -
安卓的svcmgr_publish
svcmgr_publish 中第四个参数不应该相同原创 2020-07-05 15:02:09 · 259 阅读 · 0 评论 -
gcc添加 宏定义
当 需要定义·BINDER_IPC_32BIT 的时候!-DBINDER_IPC_32BIT=1 就可以了原创 2020-07-05 10:21:38 · 791 阅读 · 0 评论 -
route_path分析
原创 2020-06-28 22:46:01 · 870 阅读 · 0 评论 -
ALSA声卡驱动的 DAPM
参考文章ALSA声卡驱动的 DAPMDAPM是Dynamic Audio Power Management的缩写,直译过来就是动态音频电源管理的意思,DAPM是为了使基于linux的移动设备上的音频子系统,在任何时候都工作在最小功耗状态下。DAPM对用户空间的应用程序来说是透明的,所有与电源相关的开关都在ASoc core中完成。用户空间的应用程序无需对代码做出修改,也无需重新编译,DAPM根据当前激活的音频流(playback/capture)和声卡中的mixer等的配置来决定那些音频控件的电源开关被原创 2020-06-27 20:56:28 · 813 阅读 · 0 评论 -
alsa 的 kcontrol
控制 codec原创 2020-06-27 12:58:02 · 309 阅读 · 0 评论 -
安卓的思索
root 有没用这个些文件夹原创 2020-06-27 09:33:13 · 125 阅读 · 0 评论 -
asoc 框架
原创 2020-06-26 15:36:41 · 228 阅读 · 0 评论 -
alsa驱动的 operation设置和 设备创建
原创 2020-06-26 11:06:50 · 127 阅读 · 0 评论 -
alsa设备节点解析
声卡是一个card它 可以多个device,device上有 录音和播放原创 2020-06-26 09:46:20 · 1137 阅读 · 0 评论 -
class_create和device_create与mdev和udev关系
class_create和device_create 会在虚拟文件系统生成信息。然后 mdev和udev 根据 信息创建设备节点原创 2020-06-26 08:45:54 · 336 阅读 · 0 评论 -
keil 使用gcc交叉编译的设置
原创 2020-06-11 10:14:58 · 806 阅读 · 0 评论 -
动态库和静态库文件编译
编译静态库gcc -c a.c b.c那么就会生成 a.o b.oar r libac.a a.o b.o 注意生成的库前面要加入 lib (因为库连接的话,需要lib)生成 静态库文件linux ar命令https://blog.csdn.net/xuhongning/article/details/6365200ranlib libac.a来对静态库的符号索引表进行更新。Linux ranlib的用法https://blog.csdn.net/dav原创 2020-06-09 10:25:13 · 213 阅读 · 0 评论 -
软中断 tasklet 工作队列
软中断1 软中断作为下半部机制的代表,2 是随着SMP(share memory processor)的出现应运而生的3 软中断是tasklet实现的基础(tasklet实际上只是在软中断的基础上添加了一定的机制)。4 软中断一般是“可延迟函数”的总称5 软中断可以在多个CPU上并行执行6 软中断 可以并发运行在多个CPU上(即使同一类型的也可以)。所以软中断必须设计为可重入的函数(允许多个CPU同时操作),因此也需要使用自旋锁来保其数据结构。struct softirq_ac原创 2020-06-08 15:21:14 · 755 阅读 · 0 评论 -
alsa框架编写应用层,实现边播放边录音
#include <stdio.h>#include <stdlib.h>#include <alsa/asoundlib.h>snd_pcm_t *open_sound_dev(snd_pcm_stream_t type){ int err; snd_pcm_t *handle; snd_pcm_hw_params_t *hw_params;...原创 2020-02-07 14:47:48 · 2122 阅读 · 8 评论 -
韦东山 jz2440 学习
1 上电先关看门狗 然后才设置时钟,难道看门狗不需要时钟独立看门狗为什么不用使能时钟?2 设置看门狗关闭,只需要设置一个寄存器就好!原创 2020-06-03 08:58:28 · 327 阅读 · 0 评论 -
linux内核 进程学习
SMP 负载均衡对于 SMP 最简单可以理解为系统存在多个完全相同的 CPU。通俗理解Linux内核调度 —— 多核系统的负载均衡(转)原创 2020-06-02 09:32:16 · 114 阅读 · 0 评论 -
进程页表
进程页表:每个进程自己的页表,放在进程自身的页目录task_struct.pgd中。在保护模式下,从硬件角度看,其运行的基本对象为“进程”(或线程),而寻址则依赖于“进程页表”,在进程调度而进行上下文切换时,会进行页表的切换:即将新进程的pgd(页目录)加载到CR3寄存器中。...原创 2020-06-01 13:06:32 · 1816 阅读 · 1 评论 -
linux vma 是什么
可使用内存产生1 用户空间动态申请内存时往往只是获得一块虚拟地址的使用权2 而并没有将这块虚拟地址区域与实际的物理内存对应上,3 只有当用户空间真正操作申请的内存时,才会触发一次缺页异常,这时内核才会分配实际的物理内存给用户空间。用户进程的虚拟地址空间包含了若干区域 大致为可执行文件的二进制代码,也就是程序的代码段存储全局变量的数据段用于保存局部变量和实现函数调用的栈环境变量和命令行参数程序使用的动态库的代码用于映射文件内容的区域虚拟内存区域(virtual memory原创 2020-06-01 13:00:22 · 1098 阅读 · 0 评论 -
linux 知识点
1 /proc/device 里面记录着各种设备的主设备号,以字符设备,块设备区分。原创 2020-04-28 00:15:03 · 105 阅读 · 0 评论