自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(199)
  • 收藏
  • 关注

原创 cpuset流程

https://www.cnblogs.com/lingjiajun/p/12378474.html

2022-03-18 10:57:59 216

原创 列出某一CPU上跑的所有进程/线程

ps -eLo pid,psr,command |sed -ne ‘/^\W+[0-9]+\W+2\W+/p’

2022-03-18 10:31:17 1025

原创 kernel module静态加载与动态加载区别

一是静态编译连接进内核,在系统启动过程中进行初始化;加载至 initcall6.init 段一是编译成可动态加载的module,通过insmod动态加载重定位到内核。加载至.gnu.linkonce.this_module段这两种方式可以在Makefile中通过obj-y或obj-m选项进行选择。module_init机制...

2022-02-07 16:04:13 667

原创 devm_xxx机制

前言  devm是内核提供的基础机制,用于方便驱动开发者所分配资源的自动回收。参考内核文档devres.txt。总的来说,就是驱动开发者只需要调用这类接口分配期望的资源,不用关心释放问题。这些资源的释放会在device对象销毁时自动释放。devres使用 > 不同的内核模块提供了对应的devm_xxx接口,如下(不仅仅这些): MEM devm_kmalloc() devm_kzalloc() devm_kcalloc() devm_kmalloc_array().

2022-02-07 15:42:01 390

原创 linux kernel platform模块的软件架构图

见此图

2022-02-07 15:32:11 599

原创 64位内核内存 各段的作用说明

kernel 区域start_kernel->paging_init->map_kernel会将内核镜像的各个段依次映射到该区域 ? !vmalloc 区域之前ARM32可以通过bootargs去控制vmalloc区域的大小,不知道64还有没kasan shadow memorykasan:内存测试,发现use-after-free错误KASAN_SHADOW_START,KASAN影子内存的起始虚拟地址,大小为32TB。为什么是32TB呢?因为KA...

2022-01-27 18:11:48 518

原创 ifneq ($(KERNELRELEASE),) 是做什么用的

Makefileifneq ($(KERNELRELEASE),) param-objs := file1.o file2.o obj-m := param.oelse KDIR := /lib/modules/2.6.18-53.el5/buildall: make -C $(KDIR) M=$(PWD) modulesclean: rm -f *.ko *.o *.mod.o *.mod.c *.symversendifKERNELRELEASE是在内核源码的顶层Makefile中.

2022-01-27 10:11:34 1316

原创 无锁原子操作

type __sync_fetch_and_add (type *ptr, type value, ...); // 先fetch然后自加,返回的是自加以前的值type __sync_fetch_and_sub (type *ptr, type value, ...);type __sync_fetch_and_or (type *ptr, type value, ...);type __sync_fetch_and_and (type *ptr, type value, ...);type __s

2022-01-26 16:55:20 418

原创 select/wait_queue_t/poll_wait/schedule 理解

schedule()...set_current_state(TASK_INTERRUPTIBLE);schedule();...schedule_timeout();// 定时唤醒,若指定时间内有其他wake_up,定时到达时不做wake_up操作在 schedle 函数的执行中,current 进程进入睡眠,而一个新的进程被运行,当下一次当前进程被唤醒并得到执行权时,又接着 schedule 后面的代码运行,schedule函数wait_queue_tDECL.

2022-01-24 11:31:04 277

原创 内核参考代码收集

#define call_qop(q, op, args...) \({ \ int err; \ \ log_qop(q, op); \ err = (q)->ops->op ? (q)->ops->op(args) : 0; \ if (!err) \ (q)->cnt_ ## op++; \ err; \})

2022-01-17 18:56:09 253

原创 list_entry/list_for_each_entry/list_for_each_entry_safe

list_entry#define list_entry(ptr, type, member) container_of(ptr, type, member)ptr type member 分别表示 指针 / 包含指针类型的结构体类型 / 指针对应的成员contain_of的原理:已知type的成员member的地址ptr,计算type的首地址type的首地址 = ptr – sizecontainer_oftypeof((type *) 0)->member 获取.

2022-01-17 18:39:26 811

原创 总线理解-

总线总线,英文叫作“BUS”,即我们中文的“公共车”,这是非常形象的比喻。公共车走的路线是一定的,我们任何人都可以坐公共车去该条公共车路线的任意一个站点。如果把我们人比作是电子信号,这就是为什么英文叫它为“BUS”而不是“CAR”的真正用意。当然,从专业上来说,总线是一种描述电子信号传输线路的结构形式,是一类信号线的集合,是子系统间传输信息的公共通道。通过总线能使整个系统内各部件之间的信息进行传输、交换、共享和逻辑控制等功能。如在计算机系统中,它是CPU、内存、输入、输出设备传递信息的公用通.

2022-01-14 18:42:37 4250

原创 alloc_page/kvmalloc/vmalloc ...区别

kmalloc()函数原型:void *kmalloc(size_t size, gfp_t flags);void kfree(const void *objp);简介:kmalloc() 申请的内存位于物理内存映射区域,而且在物理上也是连续的,它们与真实的物理地址只有一个固定的偏移,因为存在较简单的转换关系,所以对申请的内存大小有限制,不能超过128KB。flagsflag功能解释GFP_KERNEL正常分配内存;GFP_ATOMIC分配内存的过程是一个原子.

2022-01-14 18:02:24 1026

原创 DMA初识

DMA工作流程:注意点:经过cpu的是虚拟地址,而dma传输的是物理地址其实dma传输就是dma控制在两个物理地址之间传输数据dma传输主要调用函数:

2021-12-31 15:48:31 1067

原创 fork->copy_process

2021-10-15 11:01:28 92

原创 linux 两个特殊的设备文件

/dev/zero 用于读操作,内核通过这个设备文件向读取它的进程提供无穷无尽的二进制’00000000’ 字节流。在ASCII里,它意味着空字符(Null)。/dev/null 用于写操作,任何写到这个设备文件的数据都会被内核直接丢弃,并且没有任何反馈给写进程...

2021-09-16 11:45:37 108

原创 股票投资-

净现金流:经营活动的现金流净额 + 投资活动现金流净额 + 筹资活动现金流净额 + …- 作用: 可帮助企业扩张、开发新产品、支付股息、减少债务…自由现金流:企业支付了所有现金营运成本、费用、税款、资本支出,但未支付利息之前产生的现金流,即为流向股权只有人/债权的现金- 计算方法:- 1. = 经营活动产生的现金流 - 购置固定资产、无形资产、其他长期资产 + 税后净利息支出- 2 = 净利润 + 折旧和摊销 + 长期待摊费用提前摊销 + 营运资本的变动 + 其他非现金项目 - 资本支出..

2021-08-14 18:52:50 119

原创 期货投资-玉米

由于小麦和玉米在饲料方面存在同比竞争的关系,往往玉米价格低于小麦 且 玉米用于饲料其能量作用更好,所以当玉米价格高于小麦价格时,小麦替代性会比较明显,小麦价格往往可以作为玉米价格下跌的一个参考指标,现在小麦价格2552/吨,玉米价格2750/吨。 —2021/7/17...

2021-07-17 18:04:21 3232

原创 子进程退出状态

子进程的退出状态:EX_CANTCREAT中断信号:Linux 程序被外界中断时会发送中断信号,程序退出时的状态码就是中断信号值加上 128 得到的C/C++ 退出状态码:/usr/include/sysexits.h

2021-07-12 18:54:20 611

原创 CPU与内存控制器相关知识点科普

QPI、CPU、MC这些名词太专业,还是举例来说吧。有一个科学家(CPU核心)在实验室(CPU)做研究,要看很多很多资料。图书馆有一个管理员(MC,内存控制器)帮科学家从图书馆(内存)拿资料,同时也把他的研究结果放到图书馆里面。因为科学家要看的资料非常多,所以每次去的时候都要开一辆大货车搬资料过去,这辆车叫前端总线(FSB)。除了服务于科学家之外,管理员也服务于统计局(南桥)。统计局通过各种方式和各个企业(硬盘、USB设备、网卡、声卡等等)交换资料,统计局资料不多,开辆摩托车就行(DM..

2021-07-07 11:20:45 1052

原创 CPU亲和力

linux多cpu编程,为线程指定cpu,sched_setaffinity和sched_getaffinity的详解与使用,使用time命令得到程序执行时间

2021-06-16 17:51:57 110

原创 mmap与shm共享内存区别

mmapshm区别:1、mmap保存到实际硬盘,实际存储并没有反映到主存上。优点:储存量可以很大(多于主存);缺点:进程间读取和写入速度要比主存的要慢。2、shm保存到物理存储器(主存),实际的储存量直接反映到主存上。优点,进程间访问速度(读写)比磁盘要快;缺点,储存量不能非常大(多于主存)3、另外mmap有一个好处是当机器重启,因为mmap把文件保存在磁盘上,这个文件还保存了操作系统同步的映像,所以mmap不会丢失,但是shmget就会丢失。使用上看:如果分配的.

2021-06-16 14:46:08 551

原创 关于CONFIG_LOCALVERSION_AUTO设置去掉内核版本号SVN后缀

关于CONFIG_LOCALVERSION_AUTO设置去掉内核版本号SVN后缀

2021-04-06 14:30:28 264

原创 USB Host与USB OTG的区别

USB Host与USB OTG的区别AM3352 USB0 设置 HOST,OTG ID能用软件方式设置成低电平吗?

2021-04-06 10:03:20 538

原创 硬件:ARM硬件接口及总线介绍

ARM硬件接口及总线介绍

2021-03-25 10:18:27 745

原创 文件系统裁剪思路

能不用文件夹的就不用文件夹:所有的文件和文件夹是占用分区信息的主要是/usr/bin、/usr/lib、/usr/share这几个目录,占用空间比较大Filesystem Customize求大神指教如何裁剪文件系统的详细步骤

2021-03-24 13:22:27 236

原创 linux kernel启动流程简单理解

https://blog.csdn.net/wyz649296016/article/details/52135385

2021-03-22 18:49:14 115

原创 风险系数FMEA(Potential Failure Mode and Effects Analysis)

FMEA风险系数RPN=S×O×D,S—严重度 1-10,数字越大,严重度级别越高;O—频度 1-10 数字越大,越容易发生;D–探测度 1-10 数字越大,越容易探测;

2021-03-15 11:37:45 4548

原创 uboot启动kernel流程简单理解

(1)、启动4步骤第一步:将内核搬移到DDR中第二步:校验内核格式、CRC等第三步:准备传参第四步:跳转执行内核(2)、涉及到的主要函数是:do_bootm和do_bootm_linux(3)、uboot能启动的内核格式:zImage uImage fdt方式(设备树)(4)、跳转与函数指针的方式运行内核UBOOT启动内核过程UBOOT——启动内核...

2021-03-14 15:10:19 579

原创 volatile问题的深入

编译器优化常用的方法有:将内存变量缓存到寄存器;调整指令顺序充分利用CPU指令流水线,添加volatile变量后可防止其优化什么是寄存器:具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成寄存器是CPU内部的元件,拥有非常高的读写速度,用来暂存指令、数据和位址分为基本寄存器和移位寄存器两大类。基本寄存器只能并行送入数据,也只能并行输出。移位寄存器中的数据可以在移位脉冲作用下依次逐位右移或左移,数据既可以并行输入、并行输出,也可以串.

2021-03-04 10:09:19 127 1

原创 linux watchdog

硬件部分:看门狗,又叫watchdog timer,是一个定时器电路,一般有一个输入,叫喂狗(kicking the dog/service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给 WDT清零,如果超过规定的时间不喂狗(一般在程序跑飞时),WDT定时超过,就会给出一个复位信号到MCU,使MCU复位。防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。流程:进入IO配置——>选择逻辑设备——>设置看门狗配..

2021-02-25 16:09:24 357

原创 linux 资源管理

PRCM:Power, Reset & Clock Management(linux)冷启动:Cold Reset, 关闭电源,再打开电源重启计算机热启动:Warm Reset, 在不关闭电源的情况,由软件控制重启计算机linux时间同步:ntppopen/pclose:可用来判断进程状态exec:进程映像替换signal(SIGCHLD, SIG_IGN):将僵尸进程交给init进程来领养SIGPIPE:linux 软件watchdoglinux时间同步,ntpd、ntpda.

2021-02-25 15:38:44 154 1

原创 OO设计五大原则

单一职责原则(SRP):一个类应该仅有一个引起它变化的原因开放封闭原则(OCP):类模块是可拓展的,但是不可修改(对拓展开放,对更改封闭)里氏替换原则(LSP):子类必须能够替换它们的基类依赖倒置原则(DIP):高层模块不应该依赖于低层模块,二者都应该依赖于抽象抽象不应该依赖于实现细节,实现细节应该依赖于抽象接口隔离原则(ISP):采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。...

2021-02-20 13:48:53 100

原创 5个w 2个h 1个e

(1) WHY——为什么?为什么要这么做?理由何在?原因是什么?(2) WHAT——是什么?目的是什么?做什么工作?(3) WHERE——何处?在哪里做?从哪里入手?(4) WHEN——何时?什么时间完成?什么时机最适宜?(5) WHO——谁?由谁来承担?谁来完成?谁负责?(6) HOW——怎么做?如何提高效率?如何实施?方法怎样?(7) HOW MUCH——多少?做到什么程度?数量如何?质量水平如何?费用产出如何?(8) extern 扩展...

2021-02-20 10:43:34 3396

原创 sql常用语句记录

//查询2019-06-20到2019-06-25之间的数据select a,b,c,d from test where e bewteen '2019-06-20 00:00:00' an '2019-06-25 00:00:00';//查询2019-06-20到2019-06-25之间的数据SELECT a,b,c,d FROM zt_short_message WHERE e>= '2019-06-20 00:00:00' AND e<= '2019-06-21 00:00:00';

2021-02-17 15:38:42 146

原创 linux中常用的锁

自旋锁spinlock自旋锁的主要特征是使用者在想要获得临界区执行权限时,如果临界区已经被加锁,那么自旋锁并不会阻塞睡眠,等待系统来主动唤醒,而是原地忙轮询资源是否被释放加锁,自旋就是自我旋转,这个名字还是很形象的。自旋锁有它的优点就是避免了系统的唤醒,自己来执行轮询,如果在临界区的资源代码非常短且是原子的,那么使用起来是非常方便的,避免了各种上下文切换,开销非常小,因此在内核的一些数据结构中自旋锁被广泛的使用。互斥锁mutex使用者使用互斥锁时在访问共享资源之前对进行加锁操作,在访问完.

2021-01-25 13:52:05 161

原创 posix timer参数理解与简单使用示例

进程可以通过调用timer_create()创建特定的定时器,定时器是每个进程自己的,不是在fork时继承的int timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid)---clock_id说明定时器是基于哪个时钟的,clock_id取值为以下:CLOCK_REALTIME :Systemwide realtime clock.CLOCK_MONOTONIC:Represents monotonic t.

2021-01-21 18:43:08 769

原创 中断软硬件流程

cpu进入相应的异常模式pc = 异常处理入口(固定地址)中断发生:保存‘别人’的状态初始化相关寄存器(中断控制器:使能/禁止;分辨:状态寄存器;优先级;;外部引脚:高低电平出发或者上升沿下降沿出发;引脚设置或硬件相关设置(GPIO/UART))使能中断中断处理:分辨中断源进行不同的处理清理工作(清中断)恢复:恢复别人的状态ARM 内核SP,LR,PC寄存器1、堆栈指针r13(SP):每一种异常模式都有其自己独立的r13,它通常指向异常模式所专用的堆栈...

2021-01-20 14:11:58 409 1

原创 时钟:ARM Linux系统的时钟机制简单理解

Linux下有两类时钟:实时钟RTC:它由板上电池驱动的“Real Time Clock”也叫做RTC或者叫CMOS时钟,硬件时钟。当操作系统关机的时候,用这个来记录时间,但是对于运行的系统是不用这个时间的。系统时钟:“System clock”也叫内核时钟或者软件时钟,是由软件根据时间中断来进行计数的,内核时钟在系统关机的情况下是不存在的,所以,当操作系统启动的时候,内核时钟是要读取RTC时间来进行时间同步.标准计时器,时钟滴答计时(jiffies)的几个基本参数:时钟周期(c

2021-01-17 18:18:15 821

原创 linux编程:fork与vfork的区别

fork():子进程拷贝父进程的数据段,代码段vfork():子进程与父进程共享数据段fork():父子进程的执行次序不确定vfork(): 保证子进程先运行,在调用exec 或exit 之前与父进程数据是共享的,在它调用exec或exit 之后父进程才可能被调度运行vfork():保证子进程先运行,在她调用exec 或exit 之后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁...

2021-01-15 17:57:31 96

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除