- 博客(181)
- 资源 (19)
- 问答 (3)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 U-Boot 之八 详解 Driver Model 架构、配置、命令、初始化流程
U-Boot 在 2014 年 4 月参考 Linux Kernel 的 Driver Model 设计并引入了自己的 Driver Model(DM) 这个驱动架构。这个驱动模型(DM)为驱动的定义和访问接口提供了统一的方法,提高了驱动之间的兼容性以及访问的标准性。
2023-02-27 08:44:21
5137
8
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Linux Kernel 之二 零基础构建流程、Image 介绍、Image 使用说明
Linux Kernel 的构建过程与 U-Boot 构建过程是一模一样的。因为 U-Boot 的构建就是采用的 Linux Kernel 的 Kconfig/Kbuild 构建系统。
2022-06-08 12:12:47
3893
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 U-Boot 之五 配置框架、详解 Kconfig & Kbuild 构建系统、构建流程
Kconfig 是 Linux Kernel Build System 中用来对 Linux 内核进行配置工具,后来 U-Boot 也引入了 Kbuild/Kconfig 系统。当执行 make menuconfig 时会出现一个配置界面,允许开发者通过类似于 UI 的方式来对内核进行配置。Kconfig 语法可以从 https://www.kernel.org/doc/html/latest/kbuild/kconfig-language.html 里来学习。
2022-02-20 09:39:51
5958
3
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Linux Kernel 之零 完整嵌入式 Linux 环境、构建工具、编译工具链、CPU 架构
最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,由于之前对嵌入式 Linux 环境并不是很了解,因此,第一步就是需要了解如何搭建一个完整的嵌入式 Linux 环境
2022-01-01 12:54:44
12417
8
原创 开发工具 之十二 详解 J-link、OpenOCD 的 FLASH、RAM 烧写原理、配置、自定义
现在,一些主流的嵌入式仿真器、调试器都提供了自己的 FLASH、RAM 烧写策略,他们不限于 ARM 架构,目前,使用最多的就是 J-Link 和 OpenOCD,今天就来详细学习一下!
2024-07-15 08:30:00
235
原创 开发工具 之十一 详解 OpenOCD 源码、构建、配合各仿真器使用示例
OpenOCD(Open On-Chip Debugger)是一个开源的跨平台的片上调试器,旨在提供针对嵌入式设备的调试、系统编程和边界扫描功能。其工作方式就是代替了原有那些调试适配器提供的相关工具, 直接通过 USB 驱动访问适配器,进而访问目标硬件。
2024-07-09 10:04:31
327
2
原创 Yocto 之二 详解 Layer Model、配置文件、Recipes 等
Yocto Project 引入了 Layer Model 这一机制,这也是它区别于其他构建系统的一点。其中,BSP 和 DISTRO 是其 Layer Model 中最具有代表性的两个 Layer。
2024-06-03 08:30:00
217
原创 LwIP 之十 详解 TCP RAW 编程、示例、API 源码、数据流
LwIP 使用一个 struct tcp_pcb 结构来封装一个 TCP 通信实例,一个 tcp_pcb 处理一个 TCP 通信。struct tcp_pcb 封装了通信所需要所有参数,而对于数据包,则通过回调函数的形式传递给用户(由于通信涉及链接,因此涉及的回调比较多 tcp_recv_fn recv;、tcp_connected_fn connected;、tcp_poll_fn poll; 等)
2024-05-27 08:30:00
309
1
原创 LwIP 之九 详解 UDP RAW 编程、示例、API 源码、数据流
在 LwIP 中,UDP RAW 编程被设计为以 struct udp_pcb 为核心的各种 API。我们通过 LWIP_UDP == 1 就可以启用 /src/core/udp.c 中的相关代码实现,对外的各 API 位于 /src/include/lwip/udp.h 中。
2024-05-13 08:00:00
201
原创 LwIP 之八 详解 IP RAW 编程、示例、API 源码、数据流
在 LwIP 中,IP RAW 编程被设计为以 struct raw_pcb 为核心的各种 API。我们通过 LWIP_RAW == 1 就可以启用 /src/core/raw.c 中的相关代码实现,对外的各 API 位于 /src/include/lwip/raw.h 中。每一个 raw_pcb 都可定制一个特定协议类型的 IP 数据包,如 ICMP 包、TCP 包、UDP 包等。
2024-04-13 08:00:47
462
原创 Buildroot 之二 详解构建系统架构、构建流程、本地代码、external tree
Buildroot 是一个运行于 Linux 平台的用于构建完整嵌入式 Linux 运行环境的自动化工具。使用 Buildroot 可以构建出一个完整的可以直接烧写到机器上运行的嵌入式 Linux 配套镜像文件(包含 bootloader、kernel、rootfs 以及 rootfs 中的各种库和应用程序、交叉编译工具链)。而且,所有命令均不需要 root 权限,避免对开发环境中的已有软件包产生影响。
2024-03-11 11:19:11
488
原创 Buildroot 之四 构建独立交叉编译工具链
手动编译交叉工具链费时又费力,通常,我们会使用 Buildroot 或 crosstool-NG 这两个工具来辅助建立我们自己的交叉编译工具链。其中,Buildroot 基于 uclibc 制作交叉工具链, 而 crosstool-NG 则基于 glibc 制作交叉编译工具链。本文我们来详细学习一下如何使用 Buildroot 构建我们的交叉编译工具链。
2024-03-11 11:09:07
362
原创 Buildroot 之三 详解移植、配置、构建过程、输出镜像文件、使用验证
Buildroot 是 Linux 平台上的一个用于构建嵌入式 Linux 系统的框架。使用 Buildroot 可以构建出一个完整的可以直接烧写到机器上运行的嵌入式 Linux 配套镜像文件(包含 bootloader、kernel、rootfs 以及 rootfs 中的各种库和应用程序、交叉编译工具链)。Buildroot 中默认并没有对 STM32F769I-EVAL 开发板的支持,移植后就可以直接构建 STM32F769I-EVAL 开发板固件了
2024-03-11 11:08:02
302
原创 Buildroot 之一 详解总体架构、源码文件、Package 处理流程及新增说明
Buildroot 是一个运行于 Linux 平台的用于构建完整嵌入式 Linux 运行环境的自动化工具。使用 Buildroot 可以构建出一个完整的可以直接烧写到机器上运行的嵌入式 Linux 配套镜像文件(包含 bootloader、kernel、rootfs 以及 rootfs 中的各种库和应用程序、交叉编译工具链)。而且,所有命令均不需要 root 权限,避免对开发环境中的已有软件包产生影响。
2024-03-11 11:07:46
407
原创 Yocto 之四 详解移植及构建过程、镜像文件介绍及使用验证
我们从 Yocto 官网下载 Poky 仅仅是一个用于构建 Linux 的 DEMO,我们可以选择将这个 Poky(本身定义了可以在 QEMU 中运行的发行版) 进行大改造,也可以根据这个 Poky 从零搭建出一套自己的 Poky。我这里就以 YP CORE - KIRKSTONE 4.0.13 - 2023.10.05 这个版本为参考,从零开始搭建。
2024-03-11 11:07:06
223
原创 Yocto 之一 架构及源码、Toaster、OpenEmbedded、BitBake 详解
Yocto 全称是 Yocto Project(官方简称 YP) 是 Linux 基金会在 2010 年推出的一个开源的协作项目。提供模板、工具和方法以创建定制的 Linux 系统和配套工具,而无需关心硬件体系。主要由 Poky 和 其他一些工具组成。
2024-03-07 09:02:47
489
原创 ARM 之十七 详解 MDK、IAR、Eclipse 的 Debug 配置、FLASH、RAM 烧写原理及自定义
嵌入式下的调试都需要将程序烧写到目标芯片中,而芯片一般都支持从多种存储介质启动,由于存储介质的物理区别,烧写到不同的介质所使用策略往往差别很大。目前,几大主流的 IDE 都有自己的 FLASH 和 RAM 的烧写策略,今天就俩重点学习一下!。
2024-02-26 09:00:00
471
原创 ARM 之十六 详解 CMSIS 版本变迁、各组件使用示例
目前,CMSIS 已经发展到了第六版,其目录结构也发生了重大的变化。在不断发展中,很多原来 CMSIS 的组件被不断独立出去,并因此成立了很多开源社区,今天就来学习一下!由于 CMSIS 已经包含了相当丰富的文档,因此,本文重点学习版本之间的变化以及一些实际使用示例。
2024-02-18 13:14:47
705
原创 FreeRTOS 之九 二值信号量、计数信号量、互斥信号量、递归互斥信号量
无论那种操作系统,信号量都是其中重要的一部分。信号量一般用来进行资源管理和任务同步,FreeRTOS 的信号量包括二值信号量、计数信号量、互斥信号量(简称互斥量)和递归互斥信号量(简称递归互斥量),其中互斥量和递归互斥量可以看成特殊的二值信号量。
2024-02-02 10:42:09
1257
原创 U-Boot 之十 详解 MMC 子系统、命令、初始化流程
与 Linux kernel 一样,U-Boot 也是使用 MMC subsystem 统一管理 eMMC、SD 等存储设备,这些设备统称为 MMC 设备。U-Boot 提供了一系列的 MMC 命令来方便用户查看及管理 MMC 设备。
2024-01-08 14:57:52
1272
原创 开发工具 之十 详解 RAM、ROM、FLASH、MMC、SD 等存储器
存储器是电子系统中必不可少的存储设备,主要用于存放程序(指令)和数据。RAM(Random Access Memory)存储单元的内容可按照需要随机取出或存入,且存取的速度与存储单元的位置无关。这种存储器在断电时,将丢失其存储内容。ROM(Read Only Memory,只读存储器)是一种只能读出事先所存的数据的固态半导体存储器。ROM 中所存数据稳定,断电后所存数据也不会消失。
2023-12-28 09:30:52
1165
原创 Linux Kernel 之八 详解动态库 .so 和静态库 .a 的编写及使用
在编译目标程序的时候,其中使用的动态库提供的函数的代码不会被编译进目标程序中,而是在目标程序执行到相关函数时调用所使用的动态库中的对应函数。在可执行文件开始运行以前,操作系统负责将动态库加载到内存。
2023-11-24 14:36:41
284
原创 U-Boot 之九 详解 Pinctrl 子系统、命令、初始化流程、使用方法
U-Boot 提供一个类似 Linux Kernel 的 Pinctrl 子系统,用来统一各芯片厂商的引脚管理。注意,在 U-Boot 中,PINCTRL、IOMUX、PINMUX 通常是一个意思,均可以指 Pinctrl 子系统。
2023-11-24 14:25:54
443
转载 Linux Kernel 之九 详解 virtio-net 源码框架、执行流程
virtio 表示虚拟化 IO,用于实现设备半虚拟化,即虚拟机中运行的操作系统需要加载特殊的驱动(e.g. virtio-net)且虚拟机知道自己是虚拟机
2023-11-13 09:34:51
1788
原创 编译工具链 之一 基本概念、组成部分、编译过程、命名规则
编译工具链将程序源代码翻译成可以在计算机上运行的可执行程序。编译过程是由一系列的步骤组成的,每一个步骤都有一个对应的工具。这些工具紧密地工作在一起,前一个工具的输出是后一个工具的输入,像一根链条一样,我们称这一系列工具为编译工具链。编译工具链是与其运行的平台(CPU 架构 和 操作系统)息息相关的。
2023-10-24 08:00:00
2251
原创 编译工具链 之二 详解 ELF 格式及标准、UNIX 发展、ABI
在计算机及嵌入式系统中,二进制文件也有一定的标准格式,通常会包含在各平台的应用程序二进制接口 (Application Binary Interface,ABI)规范中。它是编译工具链必须要遵守的规范(编译工具链产生符合 ABI 的二进制文件)
2023-10-07 14:27:00
1250
原创 Linux Kernel 之七 虚拟化、VirtIO 架构及规范、VirtQueue & VRing
VirtIO 是一种 IO 半虚拟化解决方案,它提供 Guest OS 与 Hypervisor 虚拟化设备之间的通信框架和编程接口。其主要的优势是能提高性能且减少跨平台带来的兼容性问题。本文重点结合 VirtIO 规范 1.1 版以及 Linux 中的源码来分析 VirtIO 框架。
2023-09-29 09:36:41
1004
原创 Linux Kernel 之三 详解移植过程、STM32F769I-EVAL 开发板适配
Linux Kernel 移植过程详解、STM32F769I-EVAL 开发板适配
2023-09-19 10:08:30
432
转载 Linux Kernel 之八 Linux 设备虚拟化技术的演进之路
设备虚拟化技术,一直是云计算领域最重要的基础技术之一。我们在虚拟机里面看到的形形色色的设备,比如:网卡,磁盘,键盘,鼠标等,都离不开这项技术的帮助。这篇文章,我们将从技术演进的角度来谈一谈 Linux 现有的以及即将到来的设备虚拟化技术。
2023-08-29 16:33:57
586
原创 Network 之十三 NC-SI 原理、拓扑结构、RBT 接口及仲裁、协议格式
为了方便对服务器进行管理,在服务器上通常有个被称为 BMC(Baseboard Management Controller,基板管理控制器)的独立硬件模块。通过相应的传感器,BMC 接收各种系统参数数据,例如,温度、风扇转速、操作系统状态等。管理员则可以通过 BMC 查看服务器运行状态及控制服务器。
2023-06-23 11:31:25
5268
原创 Network 之十二 iPXE 源码、编译过程、Linker tables 机制、移植新驱动、固件使用
iPXE 是由最初开发 gPXE(从 Etherboot 演化而来)的人开发的,是 gPXE 的官方替代品。它具有 gPXE 的所有功能,用户可以从 gPXE 无缝升级到 iPXE。iPXE 是先前的 PXE 实现的超集,支持更多协议。
2023-06-09 13:43:36
2533
原创 LwIP 之七 详解 PBUF 结构、通信数据流、性能优化
数据包的复制在协议栈中是非常耗时的一个操作。LwIP 协议栈内部使用 pbuf 这种数据结构来对数据进行传递,灵活的 pbuf 结构体使得数据在不同网络层之间传递时可以减少内存的开销,避免频繁的内存复制,增加数据在不同层之间传递的速度。
2023-05-30 10:44:27
4626
2
原创 编译工具链 之三 ARM-MDK、IAR、GCC 的 .MAP 文件、.LST 文件
.map 文件和 .lst 文件就是编译工具链给出的构建过程的一些 LOG 文件。要编译出最终的可执行程序,通常需要编译、链接、转换这三个阶段。其中,编译即编译器将源码翻译成对象文件,链接即链接器将各个对象文件组合成最终可执行程序。
2023-04-30 16:13:33
7746
1
原创 Network 之八 详解 MAC 地址、MAC 协议、MAC 控制器
MAC(Media Access Control,MAC)即媒体访问控制,定义于 IEEE Std 802.3 中。IEEE Std 802.3-1985 中规定的半双工媒体访问控制协议是带有冲突检测的载波侦听多址访问(CSMA/CD)。并于 1997 年添加了全双工 MAC 协议。双工 MAC 协议不需要使用 CSMA/CD 协议,因为采用收发线路完全分离的物理介质,点到点的连接,不存在冲突。
2023-04-23 17:49:47
2678
原创 开发工具 之九 调试分类、软/硬件断点、JLink、STLink、FDTI、DAPLink 等仿真器
调试器是一个用来控制调试流程的软件程序,它解析调试文件并与用户交互、执行调试命令,并通过特定接口控制目标处理器运行。我们常见的 IDE(Visual Studio、Android Studio、Keil、IAR)内部都包含了一个 GUI 调试器(不能拿出来单独使用),也有一些可独立使用的调试器,例如,WinDBG,OllyDBG、IDA 是独立的 GUI 调试器,DGB、LLDB 则是独立的命令行调试器。
2023-03-07 11:14:27
3841
3
转载 FreeRTOS 之六 任务调度原理解析(Systick、PendSV、SVC)
;在 Cortex-M 内核上,FreeRTOS 使用 Systick 定时器作为心跳时钟,一般默认心跳时钟为 1ms,进入 Systick 中断后,内核会进入处理模式进行处理。在 Systick中 断处理中,系统会在 ReadList 就绪链表从高优先级到低优先找需要执行的任务,进行调度,如果有任务的状态发生了变化,改变了状态链表,就会产生一个 PendSV 异常,进入 PendSV 异常,通过改变进程栈指针(PSP)切换到不同的任务。
2023-03-02 15:52:36
5282
4
原创 开发工具 之八 详解 JTAG、SWD 接口
JTAG 和 SWD 在嵌入式开发中可以说是随处可见,他们通常被用来配合 J-Link 、ULINK、ST-LINK 等仿真器在线调试嵌入式程序。此外,还有飞思卡尔芯片中的 Background debug mode(BDM) 接口,Atmel 芯片中的 debugWIRE ;Nexus 5001 论坛制定的全球嵌入式处理器调试接口标准 IEEE-ISTO 5001。
2023-02-20 09:30:27
12086
原创 Linux 之七 Ubuntu 22.04 修改内核、远程桌面、包后缀(-dev、-dbg等)、阶段更新
https://kernel.ubuntu.com/~kernel-ppa/mainline/ 上提供的内核是由未经修改(默认情况下,Ubuntu 系统使用 Ubuntu 存储库提供的 Ubuntu 修改过的内核)的上游内核(upstream kernel)源代码制成,但使用了 Ubuntu 内核配置文件。
2023-01-30 11:33:23
19051
原创 U-Boot 之一 源码文件、启动阶段(TPL、SPL)、FALCON、设备树
现在,U-Boot 已经成为了是嵌入式设备首选的用于包装指令以引导设备操作系统内核的启动加载程序,并且是基于 GPL 协议开源的,项目地址:https://source.denx.de/u-boot。它可用于许多计算机架构,包括 68k,ARM,Blackfin,MicroBlaze,MIPS,Nios,SuperH,PPC,RISC-V 和 x86。.........
2023-01-16 09:21:32
5759
3
原创 Linux Kernel 之一 内核架构、源码文件、API/ABI 介绍、FHS
内核架构主要有 宏内核(Monolithic Kernel)、微内核(Micro kernel)和混合内核(Hybrid kernel) 三种。Linux 系统的 Kernel 属于宏内核,而 Windows 系统的内核 Windows NT 和 macOS 的内核 XNU 都属于混合内核。
2022-12-07 17:25:31
3108
3
RISC-V SVD 文件生成工具
2022-10-03
ARM_ELF_PDF.7z
2019-08-24
Preventing bit stuffing in CAN Using bit-stuffing distributions in CAN analysis
2019-06-13
STM32_FreeRTOS_Tracealyzer
2018-05-16
VC/MFC文档-视图-框架体系编程实例
2016-02-20
Android 悬浮窗 tWindowManager,输入法不显示
2021-08-29
自定义 View 实现了 onTouchEvent,导致 Click 不起作用如何处理
2021-08-29
GIT 能否实现 仅在 PUSH 时忽略执行文件或目录
2020-11-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人