自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【实用】GDB调试保姆级教程|常用操作|附笔记

*默认执行上条命令:**什么命令都不输入、直接敲回车、会默认执行上条命令。在第10行打一个断点,程序执行到第10行时。只有当条件满足,程序才会停下来。用于在不同的调用堆栈层级之间切换,查看对应层级的局部变量和代码上下文。设置之后,在每次程序暂停时,GDB会自动打印这个变量的值。栈是先进后出的,所以,此时的调用栈的意思是,先调用。会继续运行直到当前函数返回,并打印函数的返回值。向下执行一行代码、不会进入函数体;向下执行一行代码、会进入函数体;查看断点后会有断点的Num号。(切换到编号为1的栈帧);

2025-12-22 18:31:36 137

原创 【面经】影石insta360嵌入式软件实习一面面经(已oc)

大概50分钟,主要针对简历问。体验很不错,喜欢影石。

2025-12-19 14:54:12 173

原创 【源码分析】Uboot启动流程详细分析(三)

笔者把Uboot启动流程分为了七个阶段:第一阶段:CPU的关键初始化(中断、权限、MMU等)第二阶段:初始化关键外设+打印信息+设置global_data信息第三阶段:内存分配(用于uboot重定位)第四阶段:重定位第五阶段:继续初始化其他外设第六阶段:开始主循环第七阶段:bootz启动流程。

2025-11-26 19:04:28 457

原创 【源码分析】Uboot启动流程详细分析(二)

笔者把Uboot启动流程分为了七个阶段:第一阶段:CPU的关键初始化(中断、权限、MMU等)第二阶段:初始化关键外设+打印信息+设置global_data信息第三阶段:内存分配(用于uboot重定位)第四阶段:重定位第五阶段:继续初始化其他外设第六阶段:开始主循环第七阶段:bootz启动流程。

2025-11-25 18:46:05 682

原创 【源码分析】Uboot启动流程(一)

笔者把Uboot启动流程分为了七个阶段:第一阶段:CPU的关键初始化(中断、权限、MMU等)第二阶段:初始化关键外设+打印信息+设置global_data信息第三阶段:内存分配(用于uboot重定位)第四阶段:重定位第五阶段:继续初始化其他外设第六阶段:开始主循环第七阶段:bootz启动流程。

2025-11-24 19:04:17 45

原创 【超级详细】正点原子RK3588安装和编译SDK

如果 Ubuntu 磁盘空间比较紧张,可以对 SDK 进行瘦身,将 SDK 根目录下的.repo(隐藏文件夹,使用 ls-a 可看到)文件夹删除、可释放出一部分磁盘空间;注意,.repo 文件夹中保存了SDK 所有仓库的 git 提交记录,一旦删除,后续将无法查看到任何仓库的 git 提交信息,所以。在 SDK 根目录下执行如下命令,可以将output/firmware/目录下的各分立镜像打包成一个 update.img 固件。2、选择屏幕,进入SDK 根目录下,执行如下命令。

2025-10-30 16:48:07 1177

原创 复盘|嵌入式Linux驱动开发之I2C子系统

Platform 总线负责匹配DTS 节点) 和适配器驱动匹配成功后,执行。作为“接力”的中间人,它通过解析DTS 子节点at24@50) 来创建 i2c_client。i2c_client被注册到I2C 总线。I2C 总线负责匹配 i2c_clientat24@50) 和设备驱动匹配成功后,执行at24_probe。

2025-10-26 16:42:59 958

原创 嵌入式Linux驱动开发之I2C子系统(4)--源码分析

I2C 总线驱动,或者说 I2C 适配器驱动的主要工作就是初始化 i2c_adapter 结构体变量,然后设置 i2c_algorithm 中的 master_xfer 函数。完成以后通过 i2c_add_numbered_adapter或 i2c_add_adapter 这两个函数向系统注册设置好的 i2c_adapter。NXP 使用 imx_i2c_struct 结构体来表示 I.MX 系列 SOC 的 I2C 控制器,imx_i2c_struct 结构体中有个成员变量adapter。

2025-10-25 15:05:16 779

原创 嵌入式Linux驱动开发之I2C子系统(3)--I2C子系统框架

I2C子系统首先可以划分为三个层次用户空间:运行应用程序。内核空间:处理驱动逻辑,又细分为 I2C 设备驱动层、I2C 核心层、I2C 适配器驱动层。硬件层:具体的I2C外设和I2C控制器。每层具体做什么事在用户空间中,需要学会如何使用I2C编写应用程序在内核空间中,需要学会如何使用I2C编写驱动程序在硬件层中,对应的是具体的外设,需要能够找到这个外设连接到了哪个I2C上、所使用的I2C接口是哪一个I2C子系统中一共有两处对硬件的抽象。

2025-10-23 11:32:03 941

原创 嵌入式Linux驱动开发之I2C子系统(2)--通信时序

起始信号和终止信号所有的交互都是以START(S)信号开始,并以STOP§信号终止。START(S)信号和STOP§信号都是由线控制器生成的。起始信号(START):SDA线从高电平到低电平的跳变,同时SCL线保持高电平。终止信号(STOP):SDA线从低电平到高电平的跳变,同时SCL线保持高电平。注意:在START信号之后,总线被认为是忙碌状态,直到STOP信号出现后总线才被认为空闲。应答信号和非应答信号应答信号发生在每个字节传输之后。应答信号由数据接收方发出。在主设备写操作中,从设备。

2025-10-22 19:54:34 635

原创 嵌入式Linux驱动开发之I2C子系统--基础知识

​ I2C(Inter-Integrated Circuit)是由飞利浦公司发明的一种集成电路互连通信协议。仅利用两条线路就可以实现芯片之间的互连通信。

2025-10-21 15:51:47 538

原创 正点原子I.MX6ULL ALPHA开发板设置静态ip的详细步骤

【代码】正点原子I.MX6ULL ALPHA开发板设置静态ip的详细步骤。

2025-10-06 11:58:31 340

原创 虚拟机安装|宋宝华《Linux设备驱动开发详解》|将 Baohua_Linux.vmdk 导入 VMware Workstation 17 Pro

向导启动后,会询问选择“典型”还是“自定义”。这里选择“自定义(高级)©(Custom (advanced))”,然后点击“下一步”。

2025-09-28 11:44:01 1177 2

原创 【Linux经验积累】sshd: no hostkeys available -- exiting.

目录下找不到必需的主机密钥(host key)文件,导致启动失败。解决方案:在 Ubuntu 服务器上,为 NFS 根文件系统生成密钥。系统通过 NFS 挂载的根文件系统中后,sshd服务在。Ubuntu终端执行如下命令。

2025-07-20 11:33:56 891

原创 【详解】C语言中常用的位运算|嵌入式开发中常用的位操作

运算 ,CCM->CCSR寄存器的bits 6-0 被清零,其他位保持不变,然后与88或运算后,即可在(bit 6-0)写。对CCM_CCSR寄存器的bit8和bit13进行操作,bit8写1,bit13写1。创建一个 "清零掩码",即 bits 6-0 为 0,其他位全为 1。对CCM_CCSR寄存器的 (bit 6-0)写。如果想对CCM_CCSR寄存器的bit8写0。如果想对CCM_CCSR寄存器的bit8写1。在对32位寄存器的操作时,编译器会把。通过或运算实现两部分操作的组合。

2025-06-29 10:20:08 365

原创 I.MX6ULL设置内核主频为 528MHz的步骤

要将ARM内核主频设为528MHz,需先将系统切换到24MHz的临时时钟,然后安全地将PLL1配置为1056MHz,并设置好2分频的分频器,最后再将系统时钟切回PLL1。由寄存器 CCM_CCSR 的 PLL1_SW_CLK_SEL 位决定 pll1_sw_clk 是选择 pll1_main_clk 还是 step_clk。(对应2分频),将ARM内核时钟的最终分频系数预设为2分频,以防止时钟切换瞬间发生超频。(1056MHz) 经过2分频器后,I.MX6ULL的内核主频成功设置为。

2025-06-28 15:50:04 361

原创 【一文讲清】什么是交叉编译?为什么需要交叉编译?交叉编译的流程是什么?

目标平台和开发平台不同:在开发软件时,开发者可能需要将软件运行在一个与其开发机器不同的目标平台上,如编写针对嵌入式设备的应用程序时,开发者通常需要在 PC 上编译,然后将其部署到嵌入式设备中。通过交叉编译器(如gcc-arm-linux-gnueabi)识别目标平台的指令集、系统调用等,编译时链接目标平台库文件,生成匹配的可执行文件。例如,将 ARM 架构的应用程序编译为 x86 架构的应用程序。例如,在x86平台上,使用针对ARM平台的工具,开发针对ARM平台的可执行程序,这个编译过程称为交叉编译。

2025-05-21 14:25:36 702

原创 【一文解决】开发板无法上网、ping百度ping不通、ping网关ping不通

我的网络拓扑结构:电脑使用手机热点上网,开发板通过网线和电脑直连。

2025-04-16 10:52:25 2228 1

原创 正点原子 USB WIFI 模块设置

参考文档:【正点原子】阿尔法Linux开发板(A盘)-基础资料\10、用户手册\10、用户手册\01【正点原子】I.MX6U用户快速体验V2.7.pdf\3.22 USB WIFI模块测试该模块为:USB WIFI RTL8188EUS/RTL8188CUS直接插到ALPHA 底板的任意一个USB 接口上,该模块支持热插拔,测试前请插上 12v 电源!

2025-04-12 13:15:00 1062 1

原创 version magic ‘4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8 ‘ should be ‘4.1.15-g3dc0a4b SMP

在找了很久解决方法但未果后。我决定重头开始,于是我重新拷贝了一份纯净的内核,更改设备树后,使用tftp重新烧写zImage和设备树,这次显示没有问题了,但是缺少根文件系统。因为我使用mfgtool工具重新烧录了正点原子的出厂固件,而设备树与驱动使用的内核是另外传进去的。于是我决定用编译出来的zImage和设备树替换正点原子mfgtool工具中的zImage和设备树,直接使用mfgtool固化系统。因此,首先尝试,对内核重新编译,然后使用tftp重新烧写zImage和设备树,但是遇到了内核恐慌。

2025-04-11 14:03:03 489 2

原创 为什么写是由驱动程序打印,而读的时候却是由应用程序打印呢

数据从用户传递到内核后,驱动需要确认数据已正确接收并处理(例如调试或日志记录)。数据已传递到用户空间,应用程序负责处理最终结果(例如显示数据)。在写操作中验证数据接收(如打印日志),但不关心用户如何显示数据。在读操作中提供数据,但不直接参与用户空间的逻辑(如显示数据)。在读操作中接收数据后,根据业务逻辑处理数据(如打印到终端)。在 Linux 驱动程序与应用程序的交互中,在写操作中提交数据,无需关心内核如何处理。) → 应用程序处理数据。示例代码中,应用程序通过。→ 数据从用户空间(→ 数据从内核空间(

2025-03-30 21:11:16 314

原创 字符设备驱动开发的完整步骤

直接进入正题。

2025-03-30 17:12:31 819

原创 如何在Ubuntu系统中复用 Windows 中的 SSH 密钥

含义:此提示仅说明你已通过 SSH 密钥认证,但 Gitee 不开放 Shell 交互功能(即无法通过 SSH 直接登录 Gitee 服务器)。ssh -T git@gitee.com # 成功会显示 "Hello 你的用户名!git clone https://gitee.com/用户名/仓库名.git。git clone git@gitee.com:用户名/仓库名.git。ls -a ~ # 检查是否存在.ssh(带"-a"显示隐藏文件)如果在测试SSH连接时出现了如下信息,不要在意,是正常现象!

2025-02-20 12:03:59 698 1

空空如也

空空如也

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

TA关注的人

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