自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Donge's Blog

高级嵌入式软件工程师,专注于高质量分享驱动开发方面的知识,大家点赞关注不迷路哦!

  • 博客(65)
  • 资源 (1)
  • 收藏
  • 关注

原创 【Bluetooth蓝牙开发】一、开篇词 | 打造全网最详细的Bluetooth开发教程

1、开篇词2、蓝牙开发入门3、蓝牙协议栈总览4、蓝牙协议栈——物理层5、蓝牙协议栈——链路层6、蓝牙协议栈——传输层7、蓝牙协议栈——L2CAP协议8、蓝牙协议栈——ATT协议 9、蓝牙协议栈——GATT协议10、蓝牙通信流程分析11、蓝牙协议栈——Bluez交叉编译12、蓝牙调试工具汇总

2022-09-30 08:06:23 3213 65

原创 【毕业季|进击的技术er】作为一名职场人,精心总结的嵌入式学习路线图

大学毕业,还在为选择工作迷茫吗?董哥带你一文领略嵌入式学习路线地图,送给刚毕业的你,祝你早日走出迷茫区

2022-06-20 09:14:12 49302 226

原创 Vmware虚拟机突然连接不上网络【方案集合】

Vmware虚拟机突然连接不上网络,超详细的解决方案集合!

2022-03-18 17:56:28 30933 111

原创 【LED子系统】九、数据结构详解(番外篇)

上篇文章,我们熟悉了LED子系统的框架以及其相关的目录结构,接下来我们进一步分析LED子系统的核心数据结构

2023-05-29 08:39:22 130

原创 【LED子系统】八、小试牛刀

> 经过前面的层层关卡,终于到了我们的小试牛刀环节!>> **如何控制`LED`灯的亮灭?又如何实现`LED`心跳灯的效果?****下面我以`imx6ull`为例来实现!首先说明一点,无论在哪个平台上玩,底层原理万变不离其宗,我只能来总结其套路和方法,其中的细节必有差异!**

2023-05-26 22:58:30 312

原创 【LED子系统】七、触发器实现

led-core.c下面我们来主要了解一下LED触发器的实现在上文中,我们提及到中,只是对外提供了注册注销接口,闪烁设置接口,那么要想去实现闪烁功能,必定要有一个地方去调用这些函数!在函数中,我们看到了变量,等一系列未知函数,那么下面我们分析这些变量的定义和实现!该部分主要实现了心跳灯的效果,表示Linux正常运行,正常情况下,我们这里只需要将该驱动编译进去内核即可实现该效果!实现驱动框架,赋值相关函数产生一个定时器,循环亮灭好啦,到这里我们基本将LED。

2023-05-23 08:40:09 420 2

原创 【LED子系统】六、核心层详解(三)

上篇文章我们了解了子系统的核心层led-core.c,下面我们来分析驱动框架中核心层的实现以及作用。我们在了解定义的和就是在文件中定义的!我们这一章,了解了核心层的等等等欢迎关注【嵌入式艺术】,董哥原创!

2023-05-19 08:32:16 279

原创 【LED子系统】五、核心层详解(二)

> 上篇文章我们了解了子系统的核心层`led-class.c`,下面我们来分析驱动框架中核心层的`led-core.c`实现以及作用。上一篇文章,我们知道在将`leds_classdev`注册进入子系统后,会调用`led_init_core`函数,初始化核心层,下面我们以`led_init_core`该函数为突破口分析。

2023-05-15 08:31:24 378

原创 【LED子系统】四、核心层详解(一)

在`LED`子系统框架中,核心层包括几个部分:核心层的实现部分(`led-core.c`)、`sysfs`文件节点创建(`led-class.c`)、触发功能实现(`led-triggers.c`、`driver/leds/triggers/led-xxx.c`)> 其中,触发功能部分较为独立,我们暂且先不去分析。**我们先从`led-class.c`文件开始分析**

2023-05-11 09:01:42 357

原创 【Shell编程】| if 判断的五个关键点

我们在`Shell`脚本中,最常用的流程控制就是`if`比较语句了,当然你也许觉得它太小儿科,但是你真的了解透彻了吗?

2023-05-05 18:19:10 493

原创 【社区图书馆】二、LED子系统——硬件驱动层

在子系统中,硬件驱动层相关文件在包括: 目录下,其主要的函数有:、,其中为通用的平台驱动程序,为不同厂家提供的平台驱动程序。打开该文件,直接找到加载驱动的入口函数结构体名称:文件位置:主要作用:的平台数据,用于对硬件设备的统一管理结构体名称:文件位置:主要作用:驱动的私有数据类型,管理全部的设备。函数介绍:是驱动的入口函数,也是子系统中,硬件设备和驱动程序匹配后,第一个执行的函数。实现思路:数据结构:该函数主要包括了两个数据结构和结构体名称:文件位置:主要作用:的硬件描述结构,包括名称,编号,有效电

2023-04-23 08:49:41 1042 38

原创 【Linux驱动基础详解】| Linux模块声明与描述

我们在编写一个模块的时候,常常使用一些宏定义来标识模块的作者,版本,以及相关信息的描述,如:`MODULE_AUTHOR`、`MODULE_DESCRIPTION`、`MODULE_LICENSE`、`MODULE_ALIAS`等,那么这些宏是如何进行管理的呢?

2023-04-07 08:36:10 433 1

原创 二、LED子系统数据结构详解

上篇文章,我们熟悉了`LED`子系统的框架以及其相关的目录结构,接下来我们进一步分析`LED`子系统的核心数据结构

2023-04-01 17:17:30 362 1

原创 一、LED子系统框架分析

我们学习嵌入式,无论是C51STM32或者是ARM,都是从点灯开始的,点灯在嵌入式中的地位等同于在各大语言中的地位!虽然LED功能简单,但是其麻雀虽小,五脏俱全,在学习Linux驱动开发的过程中,学习LED子系统,往往也能够起到牵一发而动全身的作用,也更有益于大家熟悉驱动开发的框架!

2023-03-29 08:25:36 1065 13

原创 笔记本只使用Linux是什么体验?

近期,也有朋友问我,笔记本只安装`Linux`怎么样,刚好我也借此来表达一下我的感受。我的这台笔记本,可谓跟着我南征北战,先是跟着我安装**Windows10 ---> Ubuntu+Windows双系统 ---> Manjaro + Windows双系统 ---> EndeavourOs **,从**单Windows**到**双系统**再到**只使用Linux**,真的很需要勇气哈哈。

2023-03-27 08:31:30 5008 26

原创 【NVMEM子系统】四、efuse驱动实现流程

在对`nvmem`驱动框架,数据结构,数据关联熟悉之后,我们来详细分析在`NVMEM`框架之下,如何实现`efuse`驱动。

2023-03-14 08:19:57 346

原创 【Linux API 分析】module_init与module_exit

与用于我们驱动的加载,卸载,是我们驱动初始化/退出的入口函数。:内核启动时或者动态插入模块时调用:驱动移除时调用下面主要分析一下这两个接口的底层实现。

2023-03-06 08:38:31 443 1

原创 【NVMEM子系统】三、 核心数据结构及内在关联

上篇文章,主要介绍了NVMEM子系统的驱动框架、驱动目录分布,用户空间下的目录结构等内容;为了更好去理解NVMEM子系统,本篇主要了解NVMEM子系统的核心数据结构以及内在关联。

2023-02-27 08:30:17 440

原创 【NVMEM子系统】二、NVMEM驱动框架

该子系统整体架构不算太大,还是比较容易去理解的,下面我们一起去一探究竟!,该子系统主要用于实现EEPROMEfuse等非易失存储器的统一管理。在早期,像EEPROM驱动是存放于目录下,由于没有做到好的抽象,每次需要去访问相应内存空间,都需要去复制几乎一样的代码,去注册sysfs,这是一个相当大的抽象泄露。NVMEM子系统就是为了解决以往的抽象泄露问题。

2023-02-20 08:14:19 657

原创 【NVMEM子系统】一、Efuse介绍及安全启动浅析

上面我们也了解过了,efuse主要用于记录一些OEM的产品信息,并且也会用于安全启动,那么安全启动是什么,为什么要做安全启动?安全启动以限制消费者能力,防止消费者从软硬件层面,对产品的部分关键系统进行读写,调试等高级权限,达到对产品的商业保密,知识产权的保护。安全启动的安全模型是建立在消费者是攻击者的假设之上刷机安装自定义的操作系统绕过厂家封闭的支付平台绕过系统保护,复制厂家保护的数字产品。除此之外呢,有的比较专业的消费者,还可以使用数字示波器监听CPU和RAMeMMC。

2023-02-16 07:00:00 3038 49

原创 抓住你了,小混蛋,寻找并消灭baloo_file_extr

发行版:EndeavourOS,基于ArchLinux使用也有一段时间了,这款系统真的体验感不错,页面很丝滑,但是总感觉用起来卡卡的,怎么优化也不行,在后台top了下,看到进程吃CPU和内存吃的严重,网上解决方法一大堆,在这里汇总一下。

2023-02-03 08:53:48 739 2

原创 二、TTY子系统框架

**`TTY`子系统位于标准字符驱动之下,其中包括:TTY核心层,TTY线路规程,TTY驱动层。**`TTY Core`:该核心层主要负责**控制跨越一个`tty`设备的数据流和数据格式,使得`TTY Driver`能够以一致的方式处理 *到硬件* 和 *出自硬件* 的数据。**`TTY Line Discipline`:线路规程,以特殊的方式对数据进行二次加工,通常表现为协议的转换,如:`PPP`和`Bluetooth`,以便可以虚拟的“插入”

2023-01-11 08:27:19 1652 3

原创 一、TTY子系统介绍

TTY,一词源于,译为电传打印机,在早起用来表示电脑终端的设备。现在我们通常使用TTY,是各种(物理/虚拟)终端的统称!Linux系统的终端设备一般分为控制台终端、伪终端、串口终端和其他类型四种。下面我们来进一步了解这些Linux下常用的终端,为学习打下基础!

2023-01-04 07:39:29 1715 3

原创 缅怀2022,展望2023

在技术创作之前呢,我在公众号上积累了也有1W+的粉丝,不过是资源类的,与自己的主业(嵌入式软件开发)实在是不太容易挂上钩,这样就导致工作压力一大,内容创作就显得乏力,并且对工作也没有太大的帮助,思来想去,最终放弃第一个账号,纯粹的进行技术创作,我的宣言:**专注分享高质量嵌入式文章,让大家读有所得!*

2022-12-31 17:56:46 1935 10

原创 【MMC子系统】 一、MMC/SD/SDIO介绍

该节学习的MMC子系统,也称为块设备驱动,正如其名,与字符驱动相比,MMC子系统以块为单位进行操作。同时,由于MMC Card、SD Card、SDIO Card等设备协议基本大同小异,所以在中使用MMC子系统来统一管理!上面我们了解到,使用统一的子系统模型来管理MMC、SD、SDIO等设备,那么为什么要这样设计呢?答案当然是:三者协议有一定的共通性。多媒体卡设备,从本质上看,

2022-12-29 10:44:10 1316 3

原创 C与C++如何互相调用

C/C++不同的语言有不同的编译规则,要想实现通用,就必须告诉编译器,按照目标语言的规则进行编译!

2022-12-21 08:55:18 2362 38

原创 Archlinux安装软件的那些事

pacman软件包管理器,是ArchLinux的一大亮点,其可以自动解决安装过程中的依赖问题, 自动下载并且安装所需要的软件包。——Arch 用户软件仓库,是一个面对广大Arch用户、以社区为主导的软件仓库。AUR的初衷是组织社区内分享PKGBUILD,AUR社区对它们进行投票或反对,一旦某个软件包拥有足够多的票数,AUR的受信用户就会将它加入到软件库,使得可以通过pacman和ABS来使用它们。谈到AUR,就不得不想到Yay!Yay是Arch Linux下基于CLI的最佳。

2022-11-29 09:19:08 1855 35

原创 猿创征文|【Linux Debug】有了core-dump,Bug一举拿下!

`core-dump`文件,又称为**核心转储**,是操作系统在**进程收到某些信号终止运行**时,将此时**进程的地址空间、进程状态以及其他信息**写入到一个文件中,这个文件就是`core-dump`文件,其主要是为了方便开发人员调试,定位问题。

2022-11-09 08:14:51 483 38

原创 猿创征文|【Linux Debug】Linux调试工具——GDB介绍

我是董哥,嵌入式领域新星创作者创作理念:专注分享高质量嵌入式文章,让大家读有所得!

2022-11-03 08:46:40 316

原创 printf多级别、带颜色打印输出

颜色控制如何做?很简单,在输出字符串前,符合特定的颜色控制格式,就可以更改打印颜色了。printf("\033[显示方式;字背景颜色;字体颜色m…\033[0m")控制命令以\033[开头,以m结尾,而中间则是属性码,属性代码之间使用;分隔,如\033[1;34;42m,最后以默认颜色\033[0m结尾,以避免影响后面正常打印!显示方式意义显示方式默认0高亮显示1下划线4闪烁5反白显示7不可见8前景颜色和背景颜色颜色前景色背景色黑色3040红色3141绿色。

2022-10-24 07:00:00 2443 121

原创 【进程间通信】进程间通信方式汇总

随着我们的进程越来越多,难免不同进程之间要互相传输一些数据,那么这个时候该怎么办呢?下面主要简单了解一下,**进程间通信**(InterProcess Communication,IPC)的几种实现方式!

2022-10-17 08:24:54 2258 48

原创 【Bluetooth蓝牙开发】十一、一文秒懂 | 超详细的Bluez交叉编译

1、开篇词2、蓝牙开发入门3、蓝牙协议栈总览4、蓝牙协议栈——物理层5、蓝牙协议栈——链路层6、蓝牙协议栈——传输层7、蓝牙协议栈——L2CAP协议8、蓝牙协议栈——ATT协议 9、蓝牙协议栈——GATT协议10、蓝牙通信流程分析11、蓝牙协议栈——Bluez交叉编译12、蓝牙调试工具汇总

2022-10-11 09:00:11 2072 68

原创 透过事物看本质的能力怎么培养?

综上,透过事物看本质的能力怎么培养?相信已经有了答案!核心要点:大胆假设、小心求证!除此之外呢,《 直击本质:洞察事物底层逻辑的思考方法》一书中,所讲述的方法还有很多,感兴趣的可以去深入了解。但是,不得不去强调一句:有些东西,光看是没有用的;"试听"在深入学习中,处于最底层,仅靠试听,能留存下来的知识并不多。我们要做的就是:看->做->省,即:要看书->更要去实践->最后要反思总结,这样才是深度学习的正确路径!最后,我也总结了一个完整版的思维导图,感兴趣的可以自行获取:【直击本质——DonGe】

2022-10-03 19:39:53 963 54

原创 WiFi无缝漫游详解

当网络环境存在多个相同SSID的AP,且它们的微单元互相有一定范围的重合时,无线用户可以在整个WLAN覆盖区内移动,无线网卡能够自动发现附近信号强度最大的AP,并通过这个AP收发数据,保持不间断的网络连接,这就称为无线漫游。简单来说WLAN漫游是指STA在不同的AP覆盖范围之间移动,且保持用户业务不中断的行为。AP:也就是无线接入点,是一个无线网络的创建者,是网络的中心节点。一般家庭或办公室使用的无线路由器就一个AP。STA:每一个连接到无线网络中的终端。

2022-09-21 08:22:32 4928 15

原创 【Bluetooth蓝牙开发】九、BLE协议之GATT

1、开篇词2、蓝牙开发入门3、蓝牙协议栈总览4、蓝牙协议栈——物理层5、蓝牙协议栈——链路层6、蓝牙协议栈——传输层7、蓝牙协议栈——L2CAP协议8、蓝牙协议栈——ATT协议 9、蓝牙协议栈——GATT协议10、蓝牙通信流程分析11、蓝牙协议栈——Bluez交叉编译12、蓝牙调试工具汇总

2022-09-14 08:24:05 1977 98

原创 【Bluetooth蓝牙开发】八、BLE协议之ATT

1、开篇词2、蓝牙开发入门3、蓝牙协议栈总览4、蓝牙协议栈——物理层5、蓝牙协议栈——链路层6、蓝牙协议栈——传输层7、蓝牙协议栈——L2CAP协议8、蓝牙协议栈——ATT协议 9、蓝牙协议栈——GATT协议10、蓝牙通信流程分析11、蓝牙协议栈——Bluez交叉编译12、蓝牙调试工具汇总

2022-09-09 08:59:04 753 22

原创 【Bluetooth蓝牙开发】七、BLE协议之L2CAP

1、开篇词2、蓝牙开发入门3、蓝牙协议栈总览4、蓝牙协议栈——物理层5、蓝牙协议栈——链路层6、蓝牙协议栈——传输层7、蓝牙协议栈——L2CAP协议8、蓝牙协议栈——ATT协议 9、蓝牙协议栈——GATT协议10、蓝牙通信流程分析11、蓝牙协议栈——Bluez交叉编译12、蓝牙调试工具汇总

2022-09-05 08:25:59 1007 55

原创 【Bluetooth蓝牙开发】十、BLE蓝牙通信流程(建立连接,广播,扫描,断开连接)

1、开篇词2、蓝牙开发入门3、蓝牙协议栈总览4、蓝牙协议栈——物理层5、蓝牙协议栈——链路层6、蓝牙协议栈——传输层7、蓝牙协议栈——L2CAP协议8、蓝牙协议栈——ATT协议 9、蓝牙协议栈——GATT协议10、蓝牙通信流程分析11、蓝牙协议栈——Bluez交叉编译12、蓝牙调试工具汇总

2022-09-02 13:36:59 3298 72

原创 Linux远程调试工具——gdbserver

对于开发者来说,调试必不可少。对于开发PC软件,通常系统已经继承了调试工具(比如Linux系统的GDB),或者IDE直接支持对程序的调试。而对于开发嵌入式软件来说调试的手段比较有限,很多开发者仅有的调试手段依然是最原始的打印(我也是其中之一)。当然除了打印调试之外还有通过来调试,gdbserver在目标系统中运行,gdb则在宿主机上运行。简而言之,gdbserver是一个程序,它允许宿主机可以通过网络,远程调试目标板。...

2022-08-13 17:30:55 1205 1

原创 Linux内核调试工具——Debugfs

Debugfs其存在的主要意义是为了内核开发者向用户空间传递更多有用的信息,与proc不同,proc只提供进程相关的信息;同时也与sysfs不同,sysfs对每个文件都要求一定的规则,而Debugfs没有任何的规则。简而言之,Debugfs是一种用于内核调试的虚拟文件系统。name:文件夹名称parent:父目录,如果为NULL,则在root根目录下name:文件名mode:文件访问权限parent:父目录,用于保存该文件data:保存一些数据等fops:文件操作接口一些类似的接口。...

2022-08-13 16:22:34 844 1

EMMC各版本协议,SD卡各版本协议

1、EMMC4.51官方中文协议 2、EMMC5.1官方中文协议 3、EMMC4.41英文协议 4、SD2.0协议标准完整版 5、SD3.0协议标准完整版 6、SD4.0协议标准完整版

2022-01-23

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

TA关注的人

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