自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(88)
  • 资源 (1)
  • 收藏
  • 关注

原创 替代imx6ull mfgtool的方法

既然都是linux系统,我完全可以参考mfgtool的实现,在自己的ubuntu上实现sd卡的烧写,节省时间。ubuntu系统的磁盘自动挂载功能是由udisks2.service做的,如果你的系统会自动挂载U盘,不妨使用systemctl status udisks2.service看看日志就知道自动挂载是不是它干的,那么怎么禁用它呢?就可以使用了,当然这个脚本我没有使用,有不对的地方日后来改或者你给我留言。,也要禁用系统的自动挂载用能,比如我的单板上的自动挂载功能如下, 禁用即可。

2024-03-17 22:14:21 672 2

原创 重新认识交叉编译

引用正点原子的话来讲就是:说得对,但是不全面,直到最近项目中遇到了一个例子我才重新认识什么是交叉编译。

2023-09-16 00:16:33 208

原创 shell的两种属性: 交互(interactive)与登录(login)

登录交互: /etc/profile->/etc/bash.bashrc->~/.bash_profile->~/.bash_login->~/.profile->~/.bashrc。展开/etc/profile又可以看到登录交互会去配置/etc/bash.bashrc。非登录交互: /etc/bash.bashrc->~/.bashrc。

2023-08-17 23:03:21 467

原创 原始套接字编程(AF_PACKET+SOCK_RAW)模拟一个PING

最近看一个客户的代码片段,发现他在用原始套接字编程,一般学习套接字都是流式套接字和数据报套接字,本来也不是搞网络的,原始套接字了解得很少,借着这次机会,自己来学习一下原始套接字编程。

2023-08-11 23:10:50 1155

原创 APUE学习62章终端(二): stty命令&特殊字符&终端标志

stty命令的英文解释:很明显stty有一个-F参数所以准确的说: stty命令是设置当前终端驱动程序(也有可能直接配置了硬件,这点目前不清楚)的属性,使当前终端的驱动程序能够使能/去使能一些特殊字符的识别与处理等等。

2023-08-02 23:29:51 391

原创 RS232线序公<->母

基础——DB9九孔母头、九针公头 (RS232)接口定义_db9公母头接口定义_口袋里のInit的博客-CSDN博客什么是RS232协议 - 简书。

2023-07-31 23:44:41 892

原创 APUE学习62章终端(一): 整体概览

我们又知道,UNIX/Linux连接到系统上的终端会抽象成字符设备比如:/dev/ttyn或者/dev/ttyUSBn, 所以上图又可以这样看: 终端设备交互主机设备的本质就是去操作主机设备上的/dev/ttyn或者/dev/ttyUSBn设备节点,或者说与主机设备的终端驱动程序打交道,而终端驱动就可以理解为一个虚拟的终端设备(因为它对外暴露了设备节点,使人可以对设备节点进行读写操作进而或者主机信息)因为AB用RS232线缆连接,我在设备B上输入信息或者命令并获得设备A的反馈)

2023-07-30 10:35:03 185

原创 为什么deferred probe将设备挂入延迟链表而不是将驱动挂入延迟链表

需要注意的是按照linux下的设备驱动模型,一个驱动可以匹配多个设备,如果某个probe出问题,用某种方法将驱动挂入链表尝试后续进行延迟probe则会出现问题: 假如dev0,dev1都能匹配drv,恰恰是与dev1匹配时probe出了问题,如果选择延迟probe的话,dev0、dev1都要调一次probe,而我们的期望是dev1与驱动匹配的时候只调一次probe就可以了。所以说综上所述,选择将设备挂入延迟链表是最佳的,既能兼容驱动先注册/驱动后注册的场景,又因为设备与驱动的唯一匹配性,避免发生问题。

2023-07-20 09:23:49 1563

原创 socket编程代码示例

【代码】socket编程代码示例。

2023-07-19 21:27:38 1388

原创 linux driver probe deferral 机制

在偶然的一次实验中(具体是pinctrl实验),我发现有些平台的pincontroller驱动起得很晚,而pinctrl client驱动却起得很早,在设备驱动模型中probe之前又会进行管脚复用的相关设置,按照常理来讲,这就产生了某种依赖性: pincontroller必须尽早启动,否则pinctrl client无法使用管脚复用功能,但实际上的效果并非如此,尽管pincontroller驱动起得很晚,但是client仍然能够正常使用pinctrl子系统提供的复用功能,这就是延迟probe机制。

2023-07-18 22:46:47 1766

原创 中断上下文中的preempt count

参考博客:Linux上下文切换[转]_thonmin的博客-CSDN博客_linux 上下文切换中断子系统1. 背景<linux kernel的中断子系统之八:softirq>中讲到:softirq在同一个CPU上是串行的,这点体现在代码的哪里呢?./kernel/softirq.cwowo科技的文章中讲了两种场景,其中中断嵌套由于Linux不支持,所以暂时不讨论,只讨论下面的一个场景: softirq中的中断假设一个中断下半部softirq(随便什么..

2022-05-25 23:13:57 394

原创 Linux抢占是如何发生的(3)?

参考博客:ARM V8指令集https://news.eda365.com/tech/cxsheji/12008119151469.htmlhttps://news.eda365.com/tech/cxsheji/12008119151469.htmlARM V8异常Linux ARMv8 异常向量表-BugMan-ChinaUnix博客本章接着《http://blog.chinaunix.net/uid-69947851-id-5830546.html[注]本文主要紧接上一篇文章,主要想说

2022-05-02 12:20:37 455

原创 Linux抢占是如何发生的(2)?

参考博客:Linux CFS调度器之选择下一个需要调度的进程_liuhangtiant的博客-CSDN博客前言CFS调度器选择下一个要执行的进程时,基本原则是选择vruntime最小的进程,vruntime小意味着应该受到CPU的优待。但是在某些情况下,会对该原则有所违背,比如某个进程睡眠了一段时间,时间到了以后理应尽可能快的被调度,这个过程可能会导致当前进程被抢占,好端端的被抢占了,CPU在补偿了刚刚醒来的进程后,理应再补偿下被抢占的进程。发生在进程唤醒过程中的抢占事件进程睡眠和进程唤醒的...htt

2022-04-26 22:13:14 258

原创 Linux抢占是如何发生的?

参考博客:抢占是如何发生的 - 云+社区 - 腾讯云抢占是如何发生的。相应的调度器核心层代码是sched_fork(),它再通过调度类的task_fork方法触发抢占:4进程修改nice值的时候如果进程修改nice值导致优先级高于CPU上的当前进程,也会触发抢占。执行抢占的时机触发抢占通过设置进程的TIF_NEED_RESCHED标志告诉调度器需要进行抢占操作了,但是真正执行抢占还要等内核代码发现这个标志才行,而内核代码只在设定的几个点上检查TIF_NEED_RESCHED标志,这也就是执行抢占的时机。

2022-03-12 18:00:39 2474

原创 Race condition between wait_event and wake_up

参考资料 Stack Overflowlinux kernel - Wait queue and race condition - Stack Overflowhttps://stackoverflow.com/questions/62887408/wait-queue-and-race-conditionlinux kernel - race condition between wait_event and wake_up - Stack Overflowhttps://stackoverflow.c

2022-03-04 22:16:39 172

原创 【编译错误】:对‘__aeabi_idivmod未定义的引用‘,对‘__aeabi_idiv‘未定义的引用

参考博客:解决undefined reference to `__aeabi_uidivmod\'和undefined reference to `__aeabi_uidiv\'错误-草根老师-ChinaUnix博客自己写裸机驱动程序时,使用了除法,在链接的时候出了如下错误:使用的编译器是:后来上网搜了一下原因,由于编译器不支持除法运算,但是也没有搜到解决方案。看了一下http://blog.chinaunix.net/uid-26833883-id-3282967.html1. 问题背景及...

2022-02-27 12:43:45 1945

原创 Makefile自动生成头文件依赖

【参考博客】:Makefile自动生成头文件依赖_hitwlh的专栏-CSDN博客以makefile编译c工程为例进行解释。在网上搜到的相关教程如下:http://blog.sina.com.cn/s/blog_4b3c1f950102dxh4.htmlhttp://blog.csdn.net/liangkaiming/article/details/6267357http://luzhi1024.blog.51cto.com/8845546/16507https://blog.csdn.net/hit

2022-02-12 21:41:41 3178

原创 互斥与同步之完成量

参考资料 《深入Linux设备驱动程序内核机制》参考资料《Linux Device Driver 3rd Edition》参考资料《Linux设备驱动开发详解4.0内核》参考资料《Documentation\scheduler\completion.txt》1. 完成量概述1.1 完成量与等待队列的关系完成量completion是基于等待队列实现的内核同步机制1.2 什么是完成量完成量用于一个执行单元等待另一个执行单元执行完成某事,该机制用来在多个执行路径之间作同步使

2021-11-17 22:40:02 445

原创 Linux内核进程栈的两种架构

参考博文:Linux进程内核栈与thread_info结构详解--Linux进程的管理与调度(九)_OSKernelLAB(gatieme)-CSDN博客_thread_info浅析Linux下的task_struct结构体_lc_29503203的博客-CSDN博客_task_structlinux 进程内核栈 - 知乎ThreadInfo结构和内核栈的两种关系_半月旋空-CSDN博客一. 内核进程栈是什么1. 什么是进程进程是程序的一个执行实例,进程是一种动态描述,但需要注意的.

2021-09-24 22:28:09 403

原创 为什么拥有自旋锁的代码段不能睡眠?

参考博文:宋宝华: 是谁关闭了Linux抢占,而抢占又关闭了谁?Linux中的preempt_count - 知乎[宏]preempt_disable - DoOrDie - 博客园LInux中ThreadInfo中的preempt_count字段 - jack.chen - 博客园Linux进程内核栈与thread_info结构详解--Linux进程的管理与调度(九)_OSKernelLAB(gatieme)-CSDN博客_thread_infolinux - Why can't

2021-09-21 10:34:27 1489

原创 Linux中断管理(二):irq_domain(2):结构体与使用方法

参考文档:<IRQ-domain.txt>http://www.wowotech.net/linux_kenrel/irq-domain.htmlhttps://blog.csdn.net/weixin_41028621/article/details/1014482271.irq_domain的数据结构./include/linux/irqdomain.hstruct irq_domain { struct list_head link; const char

2021-03-12 00:39:04 356 1

原创 Linux中断管理(二):irq_domain(1):概念

参考文档/博客:<IRQ-domain.txt>http://www.wowotech.net/linux_kenrel/irq-domain.htmlhttps://blog.csdn.net/weixin_41028621/article/details/101448227一.软硬件中断号在linux kernel中,我们使用下面两个ID来标识一个来自外设的中断:IRQ number(软件/逻辑/虚拟中断号) CPU需要为每一个外设中断编号,我们称之IR...

2021-03-02 00:04:44 307

原创 Linux中断管理(一):设备树中的中断描述

参考资料:<devicetree-specification-changebars-v0.3>这个系列主要想研究一下linux的中断管理机制,想从设备树中的中断描述,内核对irq domian的管理及软硬件中断的映射,驱动注册中断,中断来了后怎么处理中断这几个维度下手研究1.DTS中的中断树介绍设备树中有一颗存在的中断树,它描述了该硬件平台中的中断连接与层级关系 中断源与中断控制器的物理连接是用interrupt-parent这个属性来描述,如果某个中断源没有这个属性,那么

2021-02-16 11:56:51 799

原创 系统初始化函数集(subsys_initcall)和初始化段应用

参考博文:https://blog.csdn.net/jackaly/article/details/7426353https://blog.csdn.net/qlexcel/article/details/926567971.函数定义(subsys_initcall/late_initcall是什么)内核代码4.14.99/include/linux/init.h,需要注意的是这里只针对build-in code,所以代码加上了#ifndef MODULE的限制我们用C代码

2021-02-07 22:44:25 926

原创 同步阻塞型IO之等待队列

写在前面:等待队列是linux内核中一种重要的机制,常见于各种内核或者驱动代码中,由于常见常忘,特写一个博客记录于此参考博客:https://www.cnblogs.com/hueyxu/p/13745029.html参考书籍:<深入Linux设备驱动程序内核机制>1.Linux等待队列概述以进程阻塞和唤醒的过程为例,等待队列的使用场景可以简述为:进程 A 因等待某些资源(依赖进程 B 的某些操作)而不得不进入阻塞状态,便将当前进程加入到等待队列 Q 中。进程 B 在一

2021-01-17 17:53:45 366 1

原创 SPI学习(三):SPI协议波形

写在前面:上一小节介绍了SPI的基本工作原理与极性相位等知识,这一小结介绍波形由于我实际用到的IP是ARM PrimeCell SSP(PL022),所以会以这个IP为主,也会对比《SPI Block Guide V04.01》一.PL022支持的三种帧格式介绍一共有三种帧格式可选:TI/SPI/NSM,一般用SPI很多(这里不关注NSM),简单介绍一下TI模式:SSI(Synchronous Serial Interface)由TI公司定义的接口协议标准SPI(Serial Perip

2020-11-28 18:29:46 18221

原创 SPI学习(四):SPI软件框架

写在前面:要学习SPI,首先还是要了解SPI的软件架构,我了解到的操作SPI的软件,一种是操作寄存器的方式,一种是使用Linux标准化的方式内容参考以下博客及内核文档linux-4.14.99\linux-4.14.99\Documentation\spihttps://blog.csdn.net/xiezhi123456/article/details/80115970一.SPI驱动的软件架构在内核SPI驱动的软件架构中,进行了合理的分层和抽象,如下图所示:1、SPI控制器驱动

2020-11-21 11:08:50 1980

原创 SPI学习(二):SPI工作机制与协议解析

写在前面,SPI工作机制无非就是想介绍SPI模块内置的移位寄存器,这一部分可以看下面博客,里面有时序图与动图,可以很方便理解移位https://blog.csdn.net/qq_25814297/article/details/103934794SPI协议部分重点向介绍CPOL和CPHA,这一部分可以看下面博客https://www.cnblogs.com/shangdawei/p/4752476.html一.SPI工作机制1.SPI内部原理图SPI内部原理图如下图所示,这里参考《S

2020-11-15 16:31:27 3719

原创 SPI学习(一):SPI简介与硬件拓扑

一.SPI简介关于这一点,参考的是内核的标准文档:documentation/spi/spi-summary:原文:The "Serial Peripheral Interface" (SPI) is a synchronous four wire serial linkused to connect microcontrollers to sensors, memory, and peripherals.It's a simple "de facto" standard, not compl

2020-11-14 16:14:54 4928 2

原创 痛苦之旅三:内核中设备树的操作函数

本小节总结一下内核中设备树的操作函数一.设备树的操作函数汇总在include/linux目录下,有很多of_开头的文件,列表和描述总结如下:

2020-08-27 07:33:43 127

原创 痛苦之旅[附]:转韦东山老师设备树视频笔记整理

转一个学习大纲备用原文链接:https://mp.csdn.net/console/editor/html/107830044

2020-08-06 07:28:24 345

原创 痛苦之旅二:linux总线设备驱动模型之匹配函数

本小节想重点说一下platform device和platform driver是如何匹配上的一. platform_match函数位置:drivers/base/platform.c函数描述:platform device平台设备ID按照如下格式:<name><instance>,其中name代表该平台设备类型的简述,例如pci等等;instance为该平台设备的编号,例如0 1 2等等;platform driver平台驱动的ID都是按照name来编排的,所以按照pl

2020-07-28 23:38:29 313 1

原创 痛苦之旅一:linux总线设备驱动模型概述

一.什么是总线设备驱动模型简而言之,linux驱动非常重视软件的可重用和跨平台的能力,最好一行不改就能在任何一个平台上跑起来,基于这样的事实,驱动中如果集成所有平台的设备信息显然太过臃肿,驱动也会显得很奇怪,所以把设备信息分离出去,设备就负责表示设备的硬件信息和资源,驱动就负责用标准化的手法得到设备的资源,总线就负责匹配设备和驱动二.platform设备驱动1.基本概念2.相关结构体用结构体struct platform_device来描述一个平台设备struct p.

2020-07-25 22:24:27 139 1

转载 linux内核版本号命名

转载博客,有助于一些日常知识积累转载地址:http://www.cnblogs.com/hazir/p/linux_kernel_version_numbering.htmlLinux 内核版本命名在不同的时期有其不同的规范,我们熟悉的也许是 2.x 版本奇数表示开发版、偶数表示稳定版,但到 2.6.x 以及 3.x 甚至将来的 4.x ,内核版本命名都不遵守这样的约定。本文就简单总结一下关于 Linux 内核版本号那点事: 从内核第一个0.01 版本发布到 1.0 版本。接下来是 0..

2020-07-25 16:37:26 647

转载 makefile中$$的使用

1.makefile $$的使用转一篇博文https://www.cnblogs.com/LiuYanYGZ/p/5438441.html2.小总结makefile代码段1:VAR=3 target: prerequsite1 prerequsite2 echo $VAR (1) VAR=4 (2) echo $VAR (3) echo $$VAR (4)(1):在代码段1中,(1)的结果是3...

2020-06-21 10:29:15 2173

原创 printk学习之(三):你还在用printk吗?

1.printk的继任者pr_xxx系列函数前面两节我们介绍了printk的基本原理和printk在驱动调试中的用法,现在我们看一下printk的继任者,pr_xxx系列函数可以看到,如果没有定义pr_fmt(fmt),那么pr_fmt(fmt)就是fmt,这样的话pr_xxx系列函数仅仅是一个printk的简单封装但是精髓在于可以自己定义pr_fmt(fmt),让我们封装成自己的打印函数,方便调试... ...#ifndef pr_fmt#define pr_fmt(fmt) fmt

2020-06-21 10:14:37 408

原创 printk学习之(二):调试

1.printk日志级别的来源其实printk的基本原理我是通过韦东山的视频和一篇CSDN博客了解到的博客链接贴在下面:https://blog.csdn.net/W1107101310/article/details/80526039博客写得很详细,该博客主要分为如下几个部分:printk原理/控制台的选择/printk日志级别的设置下面依次说一下这几个宏的含义:console_loglevel:控制台当前日志级别,从上一篇printk原理中知道,只有printk自带.

2020-06-18 23:30:11 206

原创 printk学习之(一):基本原理

1.printk的基本原理其实printk的基本原理我是通过韦东山的视频和一篇CSDN博客了解到的博客链接贴在下面:https://blog.csdn.net/W1107101310/article/details/80526039博客写得很详细,该博客主要分为如下几个部分:printk原理/控制台的选择/printk日志级别的设置最近我在搞问题的时候,代码中涉及到printk的耗时问题,胡跟我说:将打印级别调一调,不显示到串口就不耗时了那么我的问题是:调整打印级别,那么prin

2020-06-16 23:00:55 940

原创 【CMAKE入门一】设置生成项目名称(project TEST)

一.project指令语法也就是说: 如果我将工程名称定义如下PROJECT(TEST),那么与该命令关联的变量有四个:TEST_BINARY_DIR(隐式指定:二进制文件保存路径)/TEST_SOURCE_DIR(隐式指定:源码路径)PROJECT_BINARY_DIR(系统预定)/PROJECT_SOURCE_DIR(系统预定)其中:TEST_BINARY_DIR ==PROJECT_BINARY_DIR其中:TEST_SOURCE_DIR ==PROJECT_SOURCE_DI..

2020-05-24 11:46:15 2506

转载 【转】Linux inode详解

1.内核中的inode数据结构(LDD3,chapter3-3.3)struct inode { umode_t i_mode;//文件的访问权限(eg:rwxrwxrwx) unsigned short i_opflags; kuid_t i_uid;//inode拥有者id kgid_t i...

2020-04-29 07:14:14 1098

cast.zip(int2short & short2int)

int2short和short2int的源码和汇编注释 其中有int2short.s和short2int.s分别代表汇编, 里面有注释 博客地址:https://blog.csdn.net/liaojunwu/article/details/103106219

2019-11-19

空空如也

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

TA关注的人

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