自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux内核笔记汇总【持续更新】

嵌入式Linux内核开发笔记文章汇总。

2023-08-23 22:44:49 264

原创 Wi-Fi系列--基本知识(1)

Wi-Fi 技术作为无线局域网的核心,已经极大地改变了我们的工作、生活和娱乐方式。通过不断的标准更新,Wi-Fi 变得更快速、更稳定和更安全,适用于越来越多的应用场景。从家庭到企业,再到物联网,Wi-Fi 技术的发展将在未来继续推动网络互联和智能生活的进步。

2024-09-21 10:59:33 215

原创 UML简述(程序员必备)

UML 在嵌入式系统开发中的应用,覆盖了从需求分析到设计实现,再到验证测试的各个阶段。其核心优势在于提供了一套标准化的建模方法,帮助开发团队直观、精确地描述系统的结构和行为,提升系统设计和开发效率。这对开发高度复杂且实时性的嵌入式系统尤其重要。通过有效利用 UML,开发人员可以更好地管理嵌入式系统的复杂性,促进团队协作,并减少开发周期。

2024-09-21 10:31:57 278

原创 嵌入式最常用的接口之一:SDIO 介绍

SDIO(Secure Digital Input Output)是一种基于SD卡技术的扩展接口标准,允许外部设备通过标准的SD卡槽连接并通信。与传统的SD卡仅限于存储数据不同,SDIO设备通过该接口进行多种功能扩展,如网络连接、GPS、蓝牙、摄像头等。这使得SDIO成为一种广泛应用于移动设备、嵌入式系统和便携式电子设备中的扩展接口。SDIO的全称是,最早由SD协会(SD Association,SDA)于2001年发布。

2024-09-18 09:49:34 319

原创 串行低功耗芯片间媒体总线(SLIMbus)介绍

串行低功耗芯片间媒体总线(SLIMbus)是移动终端中基带或应用处理器与外围组件之间的标准接口。它是在MIPI联盟内开发的,该联盟由ARM、诺基亚、意法半导体和德州仪器公司创立。该接口同时支持许多数字音频组件,并以不同的采样率和位宽承载多个数字音频数据流。SLIMbus被实现为同步2线(CLK/DATA)、可配置的时分复用(TDM)帧结构。它具有支持的总线仲裁机制和消息结构,允许在运行时根据系统应用程序的需要重新配置总线操作特性。

2024-05-26 10:00:00 168

原创 qemu+gdb调试linux内核

通过图形菜单配置该宏,执行make menuconfig。验证是否打开成功,。打开成功,然后编译。nrpoc命令可以查看虚拟机的核数,make -j4编译加快速度。

2024-05-26 00:22:30 187

原创 10分钟用QEMU搭建嵌入式开发环境学习Linux

10分钟用qemu搭建嵌入式开发环境学习linux

2024-05-25 18:00:28 191

原创 C语言从入门到精通之【表达式和语句】

表达式由运算符和运算对象组成,最简单的表达式一个单独的运算对象。每个表达式都有一个值,并且是根据运算符优先级规定的顺序来执行,以下是一些表达式:4-64+21q = 5*2#q > 3。

2023-11-26 12:10:22 622

原创 Linux内核面试题(3)

整理了一些网上的linux驱动岗位相关面试题,如果错误,欢迎指正。

2023-11-18 20:36:12 349

原创 linux内核面试题(2)

整理了一些网上的linux驱动岗位相关面试题,如果错误,欢迎指正。

2023-11-18 20:31:26 338

原创 C语言从入门到精通之【其他运算符】

sizeof运算符以字节为单位返回运算对象的大小。例如 :sizeof(int)打印转换说明,使用C99新增的**%zd%u%lu**。C 语言规定,sizeof 返回 size_t 类型的值。这是一个类型,但它不是新类型。

2023-11-18 20:18:47 289

原创 【MMC/SD/SDIO】读写操作

SD 总线是基于命令和数据流,它们由一个开始 Bit 发起,由一个停止 Bit 结束。Command:命令开始一个操作。命令由 Host 驱动,或者给单卡(寻址命令),或者给所有连接的卡(广播命令)。命令通过 CMD 信号线串行方式传输。Response:响应由响应的卡驱动,或者同时由连接的卡驱动。作为之前接收到的命令的应答。Data:数据可以由 Host 或者卡驱动,通过数据线传输。

2023-11-17 22:13:01 391

原创 【MMC/SD/SDIO】概述

1997年,MMC(Multimedia Card)即多媒体存储卡的规范发布,它是一种规范,定义了卡的形态、尺寸、容量、电气特性和通讯协议等内容。基于不同的需求的考量,如物理尺寸、容量、位宽、频率等,在MMC的规范的基础上又出现了很多不同的规范:(1)多媒体存储方向:由MMC进化出了MMCPlus(更快)、Secure MMC(更安全)、MMCmobile和MMCmicro(更小)、MiCard(高容量)和eMMC(嵌入式)等标准。其中eMMC为BGA封装,可以直接焊接在板子上。

2023-11-17 22:12:06 552

原创 在rt-thread中使用iperf触发断言卡死

最近在适配sdio device驱动,CP芯片与AP芯片对接(RK3399),准备使用iperf测试下能否AP与CP能否正常通信。CP芯片跑的是rt-thread系统,在使用sdio_eth_dev_init命令初始化后,使用iperf -c 192.168.1.3测试。AP那边做服务端,先执行了iperf -s。然后触发了rt_timer_stop函数的断言,系统卡住。

2023-11-16 22:25:17 370

原创 C语言从入门到精通之【基本运算符】

在C语言中,=并不意味着“相等”,而是一个赋值运算符。下面的赋值表达式语句:bmw = 2002;把值2002赋给变量bmw。也就是说,=号左侧是一个变量名,右侧是赋给该变量的值。。另外,上面的语句不读作“bmw等于2002”,而读作“把值2002赋给变量bmw”。赋值行为进行。在C语言中,类似这样的语句没有意义(实际上是无效的):2002 = bmw;赋值运算符左侧必须引用一个存储位置。最简单的方法就是使用变量名。指针也可以。

2023-11-15 23:04:39 214

原创 Linux内核面试题(1)

中断现场(Interrupt Context)是指当一个中断事件发生时,为了保证中断处理的正确性,需要保存和恢复的 CPU 上下文和寄存器状态。中断现场的保存是为了在中断处理完成后,能够正确地返回到被中断的程序继续执行。指向被中断程序正在执行的指令的地址。保存 PC 的值可以确保在中断处理完成后,能够回到正确的执行点。包括通用寄存器(如 eax、ebx、ecx 等)的值。这些寄存器中可能保存了被中断程序的局部变量、参数等信息。指向被中断程序的堆栈。

2023-11-15 23:03:45 695

原创 C语言从入门到精通之【printf和scanf函数】

printf()是输出函数,scanf()是输入函数,但是它们的工作原理几乎相同。两个函数都使用格式字符串和参数列表。

2023-11-14 20:09:38 389

原创 C语言从入门到精通之【常量和C预处理器】

在C语言中,如果要使用常量,我们常常会使用宏定义。例如,使用宏的好处是如果程序中多个地方使用到,我们只需改这一行就行。其通用格式如下:注意,末尾不用加分号,因为这是一种由预处理器处理的替换机制。为什么NAME 要用大写?。这样,在程序中看到全大写的名称就立刻明白这是一个符号常量,而非变量。大写常量只是为了提高程序的可读性,即使全用小写来表示符号常量,程序也能照常运行。尽管如此,初学者还是应该养成大写常量的好习惯。

2023-11-14 20:08:50 124

原创 C语言从入门到精通之【字符串】

注意(这很重要),scanf()只读取了zhu rongcai中的zhu,它在遇到第1个空白(空格、制表符或换行符)时就不再读取输入。,可以看到,结束符并没有算进去。例如,在各种要处理字符串的程序中,strlen()很有用。,这意味着数组的容量必须至少比待存储字符串中的字符数多1。就是说一个长度为10的数组,最多只能存9个字符,最后一个字符要来存结束符。,字符串中的字符被储存在相邻的存储单元中,每个单元储存一个字符,每个字符占1个字节。C语言还有其他的输入函数(如,fgets()),用于读取一般字符串。

2023-11-14 20:07:48 173

原创 C语言从入门到精通之【char类型】

char类型用于储存字符(如,字母或标点符号),但是从技术层面看,。因为char类型实际上储存的是整数而不是字符。计算机使用数字编码来处理字符,即用特定的整数表示特定的字符。char类型占,无符号类型它能存储的范围是0~255。它代表的字符,我们在网上查找ASCII字符编码就能找到字符和其对应的值。标准ASCII码的范围是0~127,只需7位二进制数即可表示。通常,char类型被定义为8位的存储单元。

2023-11-14 20:07:00 1512 1

原创 C语言从入门到精通之【数据类型和关键字】

数据类型在程序使用之前已经预先设定好了,在整个程序的运行过程中没有变化,这些称为(constant)。其他数据类型在程序运行期间可能会改变或被赋值,这些称为(variable)。变量类型有几种,如表格所示,在C语言中,用int关键字来表示基本的整数类型。后3个关键字(long、short和unsigned)和C90新增的signed用于提供基本整数类型的变式,例如unsigned short int和long long int。char关键字用于指定字母和其他字符(如,#、$、%和*)。

2023-11-12 18:56:45 149

原创 C语言从入门到精通之【概述】

例如,我们经常看到C文件最上面会有类似这样的语句,它的作用相当于把stdio.h文件中的所有内容都输入该行所在的位置。实际上,这是一种“拷贝-粘贴”的操作。#include这行代码是一条C预处理器指令,编译器在编译之前会做一些预处理工作。

2023-11-12 18:34:16 143

原创 C语言从入门到精通 文章汇总

C语言从入门到精通之【初识C语言】C语言从入门到精通之【第一个程序hello world】C语言从入门到精通之【编译过程】

2023-11-01 22:31:13 50

原创 C语言从入门到精通之【编译过程】

!!

2023-11-01 22:27:19 168

原创 C语言从入门到精通之【第一个程序hello world】

通常,我们按照以下步骤进行。

2023-11-01 22:25:54 271

原创 C语言从入门到精通之【初识C语言】

在1972年,贝尔实验室的丹尼斯·里奇(Dennis Ritchie)和肯·汤普逊(Ken Thompson)设计了C语言,作为开发UNIX操作系统的工具。然而,C语言的发展并非突发奇想,它是在B语言(由汤普逊创造)的基础上演化而来。至于B语言的来源,这是另一个故事。C语言最初的设计目标是将其打造成程序员们实际可用的编程工具,因此其核心目标是实用性。尽管绝大多数编程语言也强调实用性,但通常会考虑其他因素。比如,Pascal的主要目标是为编程原理的深入理解提供坚实的基础;

2023-11-01 22:16:06 238

原创 Linux内核笔记(驱动篇)之 【watchdog 官方API手册阅读】

看门狗定时器(WDT)是一种硬件电路,在发生软件故障时可以重置系统。通常情况下,用户空间中的守护进程会定期通过特殊设备文件通知内核中的看门狗驱动程序,以告知用户空间仍在运行。每当发生这样的通知时,驱动程序通常会告诉硬件看门狗一切正常,并建议看门狗再等一段时间后才执行系统重置。但是,如果用户空间发生故障(如RAM错误或内核错误),通知将不再发生,硬件看门狗将在超时发生后重置系统(导致重新启动)。

2023-09-16 18:53:50 439

原创 Linux内核笔记(驱动篇)之 【imx6ull开发板启动/烧录方式汇总】

可以使用韦东山的烧录工具烧录。

2023-08-28 22:07:27 464

原创 Linux内核笔记(驱动篇)之 【SD2.0协议学习】

所有数据读取命令都可以通过停止命令(CMD12)随时中止。数据传输将终止,卡将返回传输状态。读取命令有:块读取(CMD17)、多块读取(CMD18)、发送写保护(CMD30)、发送scr(ACMD51)和读取模式下的通用命令(CMD56)。所有数据写入命令都可以通过停止命令(CMD12)随时中止。在CMD7取消选择卡之前,应停止写入命令。写入命令包括:块写入(CMD24和CMD25)、程序CSD(CMD27)、锁定/解锁命令(CMD42)和写入模式下的通用命令(CMD56)。

2023-08-28 22:06:00 833

原创 Linux内核笔记(调试篇)之【PWM加载驱动后,查看sysfs下的属性与dts不匹配】

测试部报了一个bug,说是加载pwm驱动之后,sysfs下的pwm阶段占空比、周期等数值不是dts配置的值。在dts里配置脉宽为5000纳秒,周期10000纳秒,并使能,但是在*/sys/devices/platform/pwm0/pwm0pwmchip0/pwm0*目录,查看duty_cycle、enable 和period的值都是0,跟预期不符合。

2023-08-23 22:27:01 277

原创 Linux内核笔记(驱动篇)之 【pwm驱动】

Linux PWM(Pulse Width Modulation)子系统是用于控制和管理嵌入式系统中的脉冲宽度调制信号的框架。PWM 是一种通过控制信号的高电平时间和低电平时间的比例来模拟模拟信号的数字技术。它在许多应用中被广泛使用,如LED亮度控制、电机速度控制、音频合成等。

2023-08-08 22:51:16 1998

原创 Linux内核笔记(代码管理篇)之 【github+repo组建imx6ull项目代码】

在大公司里,或者做linux驱动开发,基本上都会用到git。当涉及到代码管理和协作时,Git已成为开发人员的首选工具之一。结合GitHub和Repo,你可以更高效地组织和管理项目代码,促进团队协作。本文将介绍作者如何使用GitHub和Repo来组建和管理自己的项目代码,贴近企业里的开发方式去做自己的项目。

2023-08-07 21:41:16 165

原创 Linux内核笔记(驱动篇)之 【tty子系统①】

tty(Teletype)子系统是Linux内核中的一个子系统,负责处理终端设备和串行设备的输入输出。它提供了一个抽象层,使用户和应用程序可以与终端设备进行交互。串口是嵌入式设备非常重要的一个模块,嵌入式开发中90%的问题都需要靠串口打印调试来解决,它的重要性不言而喻。而tty子系统也承担着这个承上启下的任务。直观感受一下这张图:在/dev目录下有很多个tty设备,其中ttymxc0跟ttymxc1是串口相关的。

2023-06-25 22:27:21 558

原创 Linux内核笔记(驱动篇)之 【平台设备驱动模型】

平台设备的资源包括内存、中断、IO端口等。这些资源通常在设备树中进行定义,设备树中的每个设备节点都可以定义其所需的资源信息。以内存资源为例,设备树中定义内存资源的方法如下:其中,memory节点是内存资源的名称,reg属性定义了内存资源的地址和大小。

2023-06-21 20:30:20 288

原创 Linux内核笔记(调试篇)之 【oops!一次解决的linux内核崩溃的记录】

反思一下,要是在kobject_get直接将入参打印出来,也许能更快定位出问题。如果oops有打印出调用栈,也能更快的定位出问题。从这个调试过程中,对kobject也熟悉了,以前看书还觉得很难理解这个模型,但是现在经历过这次调试后,感觉理解更深入了。你有什么想问的?欢迎评论区留言或滴滴我。

2023-06-13 22:07:36 511

原创 云效代码管理Codeup测评

云效代码管理 Codeup,是阿里自研的基于 Git 的代码管理平台,数十万企业正在使用,提供代码托管、代码评审、代码安全和质量检测、持续集成等功能,全方位保护企业代码资产,帮助企业实现安全、稳定、高效的代码托管和研发管理。这款产品应该是要是面向于企业,当然,个人也可以使用,一下就是我创建的个人使用的Codeup,来体验下如何。

2023-03-25 14:10:47 638

原创 Linux内核笔记(驱动篇)之 【u-boot移植--基于正点原子iMX6ull开发板】

看到找不到网络设备和不支持屏幕,还要修改屏幕驱动和eth相关的东西。,这是NXP针对imx6ull这个板子的配置文件,复制改成自己的。下 添 加 开 发 板 对 应 的 头 文 件 , 复 制。内容比较多,一共修改了3个文件,内容较多,输出diff。从原理图看到ENET1,对应eth0网口,复位脚接到了。记录我踩的一个坑,由于编译工具链版本太高,导致调用。原子这款开发板与NXP官方的原理图是一样的,除了。uboot的板级配置文件在顶层目录的*,就先执行一下,然后再执行。,加粗部分是自己修改的。

2023-03-24 22:03:29 436

原创 【硬核】26000字剖析uboot启动全过程

硬核26000字分析uboot启动全流程。

2023-03-19 18:18:15 386 2

原创 路由器wds桥接方法-解决开发板、windows、ubuntu互ping问题

很多学习嵌入式Linux的同学一定会遇到一个问题:就是开发板、windows、ubuntu互相ping通怎么设置。我也不例外,即使我已经搭建过很多次这种环境,但是这一次我被折磨的有点崩溃了(开发板直连PC有限网卡,PC通过wifi上网),我搭建好之后,第二天又不行了,然后第二天又费了大量时间搞了一遍、第三天又不行了!所以基于我现在的开发环境,我决定要换一种方法!!在大面积环境里,一台路由器无线覆盖范围有限、部分区域可能会信号较弱或者存在信号盲点。

2023-02-12 14:54:52 480

原创 Linux内核笔记(驱动篇)之 【自旋锁的简单介绍】

自旋锁与互斥锁类似,但是自旋锁不会引起调用者睡眠。如果自旋锁被其他执行单元保持,则调用者会一直循环等待保持者释放锁。想像这么一个场景,早上醒来你要上厕所(临界区),进入该厕所需要一把钥匙(自旋锁),你发现厕所关着,里面有人了(锁被保持了),你敲门申请,在门外一直等待(循环等待,不会挂起睡眠,而互斥锁会),直到里面的人出来,把钥匙给你(保持着释放锁,你获得锁),进入厕所。自旋锁的效率远高于互斥锁。

2023-02-08 21:12:46 196

空空如也

空空如也

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

TA关注的人

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