自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Qemu-NUC980(十):I2C Controller

本文描述了添加980 I2C控制器功能代码的步骤,在描述过程中,为了清晰的描述添加框架步骤,部分代码的细节被删除,详细的代码,请参考文末的工程链接。本文概要描述了使用qemu模拟新塘980 I2C控制器的框架代码,详细的代码修改,请参考文末的工程连接。

2025-12-15 22:11:42 258

原创 Qemu-NUC980(九):Secure Digital Host Controller

本文描述了添加980 SDH控制器功能代码的步骤,在描述过程中,为了清晰的描述添加框架,部分代码的细节被删除,详细的代码,请参考文末的工程链接。本文概要描述了使用qemu模拟新塘980 sd控制器的框架代码,详细的代码修改,请参考文末的工程连接。

2025-11-22 19:48:54 363

原创 Qemu-NUC980(八):GPIO Controller

本文描述了添加980 GPIO控制器功能代码的步骤,在描述过程中,为了清晰的描述添加框架,部分代码的细节被删除,详细的代码,请参考文末的工程链接。本文描述了980平台上GPIO控制器的实现,这里主要描述的是框架代码,因为qemu模拟不了硬件的电气特性,只能模拟寄存器功能,因此GPIO的模拟中,仅仅添加了寄存器读写功能。

2025-10-18 18:21:39 183

原创 Qemu 嵌入式Linux驱动开发

本文主要描述作者自己搭建的一个嵌入式Linux驱动开发的环境,感兴趣的同学,可以参考文末的工程链接。目前qemu versitle平台支持pci和drm fb显示图形。未来为了便于学习Linux驱动。我会在基于versatile平台上定制各种外设接口的驱动.未来支持如下的驱动接口:1. Input I2C 触摸屏驱动;2. USB 2.0 Host和设备驱动;3. SPI设备驱动;4. IIO设备驱动;5. Audio设备驱动;

2025-10-13 23:38:53 310

原创 Qemu-NUC980(七):Timer定时器

本文描述了添加980 Timer定时器功能代码的步骤,在描述过程中,为了清晰的描述添加框架,部分代码的细节被删除,详细的代码,请参考文末的工程链接。

2025-10-10 19:50:27 185

原创 Qemu-NUC980(六):Advanced Interrupt Controller

本文描述了在qemu中添加NUC980中断控制器的步骤,在描述过程中,删除了很多实现的细节,感兴趣的同学可以查看文末的链接,阅读源码.本文描述了在qemu中实现NUC980中断控制器的代码步骤。

2025-09-21 19:25:43 340

原创 Qemu-NUC980(五):UART Interface Controller

本文描述了在qemu中添加NUC980串口控制器代码步骤。为了便于阅读方便,我在描述的过程中删除了代码的实现细节,目的是让大家能在5min以内可以快速掌握添加步骤,详细的代码,大家可在最后的工程链接的工程中去阅读源码。本文描述了在qemu添加NUC980 UART控制器的步骤。

2025-09-14 20:23:06 210

原创 Qemu-NUC980(四):SDRAM Interface Controller

本文描述了980 CPU下SDRAM 接口的qemu框架代码。为了便于阅读,我删除了部分代码,完整的代码请查看文后的工程链接。本文描述了添加980 CPU中SDRAM Interface Controller的qemu框架代码的添加步骤,在描述过程中,删除了部分代码。

2025-09-06 19:44:08 251

原创 Qemu-NUC980(三):system Manager

本文描述了NUC980 System Manager的控制的qemu模拟实现。本文描述了NUC980芯片中的system Manager控制器寄存器读写模拟框架。

2025-09-01 19:14:46 309

原创 Qemu-NUC980(二):时钟clock代码添加

本文描述了在qemu下模拟实现时钟框架的代码,在讲述过程中,为了便于阅读,删减了完成代码,感兴趣的同学可以去文末链接,查看工程链接。本文主要讲述的模拟980的时钟的框架步骤,不细节上讲述每一个实现的原理。本文描述了980时钟的模拟实现,在qemu模拟中,只能模拟寄存器的功能,不能模拟时序特性。

2025-08-02 17:48:12 302

原创 Qemu-NUC980(一):SOC框架代码添加

从这篇博文开始,作者开始连载NUC980 arm的qemu仿真实现,实现Nuc980 CPU上的大部分控制器的实现,并同时使用FreeRTOS和linux系统来验证qemu nuc980的仿真结果。本文主要描述了nuc980的qemu soc框架代码的添加,感兴趣的同学可以在ubuntu 20.04系统上进行下载和编译验证。

2025-07-20 12:45:06 374

原创 04-Linux驱动模块的自动加载

上一节,我们讲述了Linux驱动开发的基本的模块代码编写和手动执行模块加载的操作, 这一节,我们讲述嵌入式设备上使用Sysvint引导方式下如何开机自动加载模块的步骤。感兴趣的同学看下使用systemd引导方式的开启自动加载模块的步骤本文主要讲述了如何在嵌入式arm Linux系统中sysvinit引导方式的开机自动加载驱动模块的步骤。

2025-07-07 23:54:10 442

原创 03-Linux内核驱动模块加载

本文主要讲解Linux系统中的内核驱动模块编写和加载。本文主要讲述了如何在嵌入式arm Linux系统中编写驱动模块和加载的步骤。

2025-07-02 23:15:32 584

原创 02-Linux内核源码编译

本章,我们主要讲述linux内核编译的步骤。主要是面向想入门嵌入式linux开发的同学。本文主要讲述了如下下载Linux源码进行编译和运行。在讲述过程中提及到了git, shell脚本编写,和buildroot文件系统构建工具,这三个工具在日常开发中会经常提及,感兴趣的同学可以深入学习一下。注: 构建linux文件系统的工具非常多。我们这里只讲述buildroot, 因为他简单,适合新手学习,其他的文件系统构建还有busybox和yocto等。

2025-06-24 22:35:38 857

原创 01-驱动开发开篇

这个主题已经构思了很久,也犹豫了很久,网上讲述linux驱动开发的博主非常多,我在想,我能给我读者带来什么呢。现在嵌入式Linux的开发难度比以前降低了很多,特别是ai的出现,几乎不需要掌握很多的基础知识,也能完成日常工作。特别是从linux-3.10开始使用设备树开始,现在的嵌入式Linux驱动开发几乎就剩下了复制粘贴和调试一些GPIO引脚。这也是我很困惑地方,如果我讲述驱动开发的步骤,对于老兵来说,没有任何阅读的价值,直接可以跳过,而对于新手来说。虽然按照步骤能复制粘贴代码,也能让硬件工作起来。

2025-06-21 15:08:05 555 1

原创 Android13 增加产品配置文件

本文主要描述RK3568 Android13中添加产品配置文件的步骤,以下的描述以添加rk3568_taurus为例子进行讲述。

2025-06-19 23:23:08 386

原创 Android7 Input(十一)App View InputEvent事件分发

本文主要讲述App View中inputEvent事件分发的流程,我们这里不讲述关于Android View窗口管理系统。Android系统中View的事件分发的方向就是:当事件被处理完成后,根据事件处理的结果然,反向调用路径返回:从View-> ViewGroup->DecorView->PhoneWindow->Activity本文主要描述了,Android View事件分发被处理的流程,在讲述过程中,为了简化,我们删除了很多细节的东西。

2025-06-12 22:19:49 897

原创 Android7 Input(十)View 处理Input事件pipeline

本文主要描述View对InputEvent事件pipeline处理过程。本文描述了Android系统中View对输入事件的处理流程,也就是pipeline事件的处理过程。然后最终将处理结果通过跨进程传递给了InputDispatcher。下一章,我们讲述View UI的事件分发流程;

2025-06-05 23:34:51 1160 5

原创 Android7 Input(九)View 建立Input Pipeline

上一个章节,我们讲解了App通过注册InputEventReceiver获取从Input服务上报的输入事件的流程,在讲述App处理具体输入事件之前,我们讲述App处理输入事件的模型,也就是本章要讲述的InputState Pipeline。本文描述了View处理input事件的Pipeline模型的实现,下一个章节讲述App处理input事件的具体过程。

2025-05-25 15:54:58 591

原创 Android7 Input(八)App Input事件接收器InputEventReceiver

上一个章节,我们讲解了App如何使用InputChannel通道与input系统服务建立通信的桥梁的过程,本章我们讲述App如何从input系统服务中获取上报的输入事件,也就是我们本章讲述的InputEventReceiver。本文讲述了App通过注册输入事件接收器的方式,当InputDispacther上报输入事件时,通过Looper的回调机制App获取到了事件,并通过doProcessInputEvents接口,正式开启App对input事件的处理。

2025-05-20 23:10:58 971

原创 Android7 Input(七)App与input系统服务建立连接

本文主要讲述Android 系统创建窗口时与输入相关管理系统服务通过InputChannel通道建立通信桥梁的过程。本文主要讲述了App初始化创建窗口时的与输入管理相关的处理流程,App为了能接收到系统上报的输入事件,通过InputChannel作为桥梁,将App和Input系统服务建立了通信桥梁,实现的核心原理就是创建socket对,并通过事件监听的方式,从socket中获取监听的信息,并进行处理,当App处理完信息也则通过socket对,告诉input系统服务的处理结果。后续章节我们会讲述这个处理流程。

2025-05-17 20:38:12 1008

原创 Qemu-STM32(十八):Qemu运行Keil编译出来的axf文件

本文档算是一个Qemu模拟STM32的一个阶段性的成果展示,之前博主成功在gcc下运行了qemu STM32F103模拟器,这次博主尝试运行Keil编译出来的axf文件,并成功运行起来,让博主不得不佩服qemu的强大之处。

2025-05-14 00:20:55 957

原创 OpenMCU(七):STM32F103开发环境搭建

本文主要讲述了使用Keil软件搭建STM32F103嵌入式开发环境的步骤,主要面向想从事嵌入式行业的入门同学,如果下面的讲述过程中有不对的地方,欢迎大家给我留言。本文主要讲述了Keil 5.43的安装教程,主要用于学习交流,请勿用于商业开发。1、本文主要描述了搭建STM32F103开发环境,并详细说明了使用比较广泛的Keil的安装和破解过程;2、关于keil的破解,主要用于学习交流,请勿用于商业开发环境;3、讲述了离线安装STM32F103开发包的步骤;

2025-05-14 00:06:10 1190

原创 OpenMCU(六):STM32F103开发板功能介绍

博主开启这个OpenMCU系列博客的主要目的,就是源码分析我们在嵌入式开发中用到一些软件库。让嵌入式MCU学习非常容易入门

2025-05-12 23:19:36 1084

原创 OpenHarmony Linux内核本地管理

写这篇文章的初衷,其实也是作者从事多年Android系统开发中,根深蒂固的目录情节导致的,再开发Harmony系统中,总是想模拟Android系统的开发思路。对于OpenHarmony这个patch机制,其实我很讨厌它,虽然这样可以简化维护工作,不需要每个厂家都维护一个内核开发版本,但是这个patch,我讨厌它的地方就是严重制约了多人协作开发。如果一不小心修改了上游内核的文件,则如果用现有的机制,每一个协作开发的同学都需要重新再次生成patch ,不然无法patch到编译的内核。

2025-05-12 20:30:37 723

原创 RK3568-OpenHarmony(1) : OpenHarmony 5.1的编译

本文主要描述了,如何在ubuntu-20.04操作系统上,编译RK3568平台的OpenHarmony 5.1版本。

2025-05-10 13:35:02 1101 4

原创 Android7 Input(六)InputChannel

本文讲述Android Input输入框架中 InputChannel的功能。从前面的讲述,我们知道input系统服务最终将输入事件写入了InputChannel,而input属于system_server进程,App属于另外一个进程,当Input系统服务想要把事件传递给App进行处理时这里就涉及到了一个跨进程通信的问题。

2025-05-08 21:44:24 1139 1

原创 Qemu-STM32(十七):STM32F103加入AFIO控制器

本文主要描述了在Qemu平台中,如何添加STM32F103的AFIO控制器模拟代码,AFIO是属于GPIO引脚复用配置的功能。本文描述了如何在qemu中添加stm32f103平台上AFIO控制器实现步骤。

2025-04-29 20:00:14 711

原创 Android7 Input(五)InputDispatcher

本文主要描述了Android Input框架中的InputDispatcher的功能和数据处理流程。InputDispatcher的功能总结成一句话就是处理InputReader传递过来的事件并将事件进行再次封装为一个InputDispatcher事件然后传递给App进行处理,当App处理完成后,通知InputDispatcher模块清理InputDispatcher上报的事件,即完成整个输入事件的处理流程。

2025-04-26 14:27:08 1237

原创 Qemu-STM32(十六):STM32F103加入GPIO控制器

本文主要描述了在Qemu平台中,如何添加STM32F103的GPIO控制器模拟代码。本文描述了如何在qemu中添加stm32f103平台上GPIO控制器实现步骤。

2025-04-16 23:47:41 427 5

原创 Qemu-STM32(十五):STM32F103加入Flash控制器

本文主要描述了在Qemu平台中,如何添加STM32F103的Flash控制器模拟代码。本文描述了如何在qemu中添加stm32f103平台上FLASH控制器实现步骤。

2025-04-16 23:21:19 637

原创 Android7 Input(四)InputReader

本文主要描述了Android Input框架中的InputReader的功能,InputReader模块的功能,总结成一句话就是InputReader获取输入设备的事件并将事件进行加工处理,然后传递给QueuedInputListener,最终QueuedInputListener将事件传递给InputDispatcher模块处理,事件处理的方向就是:InputReader -> QueuedInputListener -> InputDispatcherframeworks/native/services

2025-04-12 15:25:09 729

原创 Qemu-STM32(十四):STM32F103加入USART控制器

本文主要描述了在Qemu平台中,如何添加STM32F103的USART控制器模拟代码。1、本文描述了如何在qemu中添加stm32f103平台上UASRT控制器实现;2、完成的提交记录,请查看代码库链接;

2025-04-06 18:07:31 602

原创 Qemu-STM32(十三):STM32F103加入RCC控制器

本文主要描述了在Qemu平台中,如何添加STM32F103的RCC控制器模拟代码。1、本文描述了如何在qemu中添加stm32f103平台上RCC控制器实现;2、RCC模块主要功能就是配置STM32103运行时的时钟频率;2、完成的提交记录,请查看代码库链接;

2025-04-06 18:01:58 627

原创 Android7 Input(三)EventHub

在Android Input框架中,EventHub主要作用就是读取输入设备上报的event事件, 并将收集的事件提交给InputReader进行处理。本文主要描述了EventHub如何管理系统中的输入设备以及系统上报输入事件的处理流程。本文并没有细节展开描述每一个EventHub类的实现方法和输入事件处理的代码细节,感兴趣的同学可以去分析一下Linux系统中input事件的获取和Linux input事件的组成等。1、本文主要描述了EventHub输入设备的管理和事件获取流程描述,并没有细节上去描述;

2025-04-01 23:44:51 960

原创 Android7 Input(二)Linux 驱动层输入事件管理

在Linux系统中,将按键,键盘,鼠标,触摸屏等这类交互设备交由Linux Input子系统进行管理,Linux Input驱动子系统由于具有良好的和用户空间交互的接口。因此Linux Input驱动子系统,不止于只管理输入类型的设备。也可以将其他类型的设备归纳于Linux Input进行管理, 比如Rockchip 的Android系统平台上,将传感器数据的处理,就归纳到Linux Input进行管理。

2025-03-29 22:22:54 1049

原创 OpenMCU(五):STM32F103时钟树初始化分析

本文主要描述了STM32F103初始化过程系统时钟的初始化,主要描述了系统时钟的初始化,AHB总线时钟,APB总线时钟等的初始化。本文主要描述了,在STM32F103 CPU初始化过程中,系统时钟的初始化。虽然,我们可以利用ST提供的上位机图形化工具进行时钟配置,简单的勾选就可以产生我们需要的代码。但是,作为一个嵌入式开发程序员,我觉得,还是有必要去分析源码,了解CPU的内部原理和HAL层代码,这样才能根据自己产品的实际需求情况,设计出更具有性价比的产品。

2025-03-27 22:26:44 1076

原创 Qemu-STM32(十二):STM32F103 框架代码添加

本系列博客主要描述了STMF103的qemu模拟器实现,进行该项目的原因有两点: 作者在高铁上,想在STM32F103上验证一个软件框架时,如果此时掏出开发板,然后接一堆的线,旁边的人估计会投来异样的目光,特别是,当不太幸运坐在了靠近过道的位置,那就更麻烦了,估计没法进行代码开发了。因此,作者决定开发这个模拟器该项目,只要打开电脑,就可以随意的开发软件功能;第二个原因,作者也在设计STM32F103的PCB板卡,在硬件板卡还没焊接回来时,也可以提前进行产品原型的代码开发。

2025-03-27 22:06:53 1181

原创 OpenMCU(三):STM32F103 FreeRTOS移植

本文主要描述了STM32F103移植FreeRTOS的简要步骤。移植描述过程中,忽略了Keil软件的部分使用技巧。默认读者熟练使用Keil软件。本文的描述是基于OpenMCU_RTOS这个工程,该工程已经下载放好了移植STM32F103 FreeRTOS的所有文件OpenMCU_RTOS工程的愿景主要有:1.、能移植支持主流mcu的freeRTOS2、深入分析FreeRTOS代码和第三方库代码,让嵌入式学习变得非常容易;

2025-03-22 23:13:02 1061

原创 OpenMCU(四):STM32F103启动汇编代码分析

本文描述STM32F103处理器在上电到进入main函数阶段的启动汇编代码分析。以startup_stm32f103x6.s该启动汇编文件进行讲解startup_stm32f103x6.s启动文件的开始定义了栈空间的长度Stack_Size = 0x400,即1K的内存空间当做程序栈空间。ALIGN=3, 栈的长度对齐到8字节(1堆内存定义堆内存长度定义为Heap_Size = 0x200,即512字节长度,并且8字节对齐。

2025-03-22 23:02:42 569

空空如也

空空如也

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

TA关注的人

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