哆哆jarvis
我是一名芯片原厂的Linux驱动开发工程师,深入操作系统的世界,贯彻终身学习、终身成长的理念。
平时喜欢折腾,寒冬之下,抱团取暖,期待你来一起探讨技术、搞自媒体副业,程序员接单和投资理财。【对了,不定期送闲置开发板、书籍、键盘等等】
展开
-
qemu+gdb调试linux内核
通过图形菜单配置该宏,执行make menuconfig。验证是否打开成功,。打开成功,然后编译。nrpoc命令可以查看虚拟机的核数,make -j4编译加快速度。原创 2024-05-26 00:22:30 · 77 阅读 · 0 评论 -
串行低功耗芯片间媒体总线(SLIMbus)介绍
串行低功耗芯片间媒体总线(SLIMbus)是移动终端中基带或应用处理器与外围组件之间的标准接口。它是在MIPI联盟内开发的,该联盟由ARM、诺基亚、意法半导体和德州仪器公司创立。该接口同时支持许多数字音频组件,并以不同的采样率和位宽承载多个数字音频数据流。SLIMbus被实现为同步2线(CLK/DATA)、可配置的时分复用(TDM)帧结构。它具有支持的总线仲裁机制和消息结构,允许在运行时根据系统应用程序的需要重新配置总线操作特性。原创 2024-05-26 10:00:00 · 83 阅读 · 0 评论 -
10分钟用QEMU搭建嵌入式开发环境学习Linux
10分钟用qemu搭建嵌入式开发环境学习linux原创 2024-05-25 18:00:28 · 114 阅读 · 0 评论 -
【MMC/SD/SDIO】读写操作
SD 总线是基于命令和数据流,它们由一个开始 Bit 发起,由一个停止 Bit 结束。Command:命令开始一个操作。命令由 Host 驱动,或者给单卡(寻址命令),或者给所有连接的卡(广播命令)。命令通过 CMD 信号线串行方式传输。Response:响应由响应的卡驱动,或者同时由连接的卡驱动。作为之前接收到的命令的应答。Data:数据可以由 Host 或者卡驱动,通过数据线传输。原创 2023-11-17 22:13:01 · 365 阅读 · 0 评论 -
【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 · 532 阅读 · 0 评论 -
Linux内核笔记(驱动篇)之 【u-boot移植--基于正点原子iMX6ull开发板】
看到找不到网络设备和不支持屏幕,还要修改屏幕驱动和eth相关的东西。,这是NXP针对imx6ull这个板子的配置文件,复制改成自己的。下 添 加 开 发 板 对 应 的 头 文 件 , 复 制。内容比较多,一共修改了3个文件,内容较多,输出diff。从原理图看到ENET1,对应eth0网口,复位脚接到了。记录我踩的一个坑,由于编译工具链版本太高,导致调用。原子这款开发板与NXP官方的原理图是一样的,除了。uboot的板级配置文件在顶层目录的*,就先执行一下,然后再执行。,加粗部分是自己修改的。原创 2023-03-24 22:03:29 · 328 阅读 · 0 评论 -
【硬核】26000字剖析uboot启动全过程
硬核26000字分析uboot启动全流程。原创 2023-03-19 18:18:15 · 312 阅读 · 2 评论 -
Linux内核笔记(驱动篇)之 【imx6ull开发板启动/烧录方式汇总】
可以使用韦东山的烧录工具烧录。原创 2023-08-28 22:07:27 · 198 阅读 · 0 评论 -
Linux内核笔记(驱动篇)之 【SD2.0协议学习】
所有数据读取命令都可以通过停止命令(CMD12)随时中止。数据传输将终止,卡将返回传输状态。读取命令有:块读取(CMD17)、多块读取(CMD18)、发送写保护(CMD30)、发送scr(ACMD51)和读取模式下的通用命令(CMD56)。所有数据写入命令都可以通过停止命令(CMD12)随时中止。在CMD7取消选择卡之前,应停止写入命令。写入命令包括:块写入(CMD24和CMD25)、程序CSD(CMD27)、锁定/解锁命令(CMD42)和写入模式下的通用命令(CMD56)。原创 2023-08-28 22:06:00 · 189 阅读 · 0 评论 -
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 · 182 阅读 · 0 评论 -
Linux内核笔记(代码管理篇)之 【github+repo组建imx6ull项目代码】
在大公司里,或者做linux驱动开发,基本上都会用到git。当涉及到代码管理和协作时,Git已成为开发人员的首选工具之一。结合GitHub和Repo,你可以更高效地组织和管理项目代码,促进团队协作。本文将介绍作者如何使用GitHub和Repo来组建和管理自己的项目代码,贴近企业里的开发方式去做自己的项目。原创 2023-08-07 21:41:16 · 112 阅读 · 0 评论 -
Linux内核笔记(驱动篇)之 【watchdog 官方API手册阅读】
看门狗定时器(WDT)是一种硬件电路,在发生软件故障时可以重置系统。通常情况下,用户空间中的守护进程会定期通过特殊设备文件通知内核中的看门狗驱动程序,以告知用户空间仍在运行。每当发生这样的通知时,驱动程序通常会告诉硬件看门狗一切正常,并建议看门狗再等一段时间后才执行系统重置。但是,如果用户空间发生故障(如RAM错误或内核错误),通知将不再发生,硬件看门狗将在超时发生后重置系统(导致重新启动)。原创 2023-09-16 18:53:50 · 322 阅读 · 0 评论 -
Linux内核笔记(调试篇)之 【oops!一次解决的linux内核崩溃的记录】
反思一下,要是在kobject_get直接将入参打印出来,也许能更快定位出问题。如果oops有打印出调用栈,也能更快的定位出问题。从这个调试过程中,对kobject也熟悉了,以前看书还觉得很难理解这个模型,但是现在经历过这次调试后,感觉理解更深入了。你有什么想问的?欢迎评论区留言或滴滴我。原创 2023-06-13 22:07:36 · 392 阅读 · 0 评论 -
Linux内核笔记(驱动篇)之 【tty子系统①】
tty(Teletype)子系统是Linux内核中的一个子系统,负责处理终端设备和串行设备的输入输出。它提供了一个抽象层,使用户和应用程序可以与终端设备进行交互。串口是嵌入式设备非常重要的一个模块,嵌入式开发中90%的问题都需要靠串口打印调试来解决,它的重要性不言而喻。而tty子系统也承担着这个承上启下的任务。直观感受一下这张图:在/dev目录下有很多个tty设备,其中ttymxc0跟ttymxc1是串口相关的。原创 2023-06-25 22:27:21 · 485 阅读 · 0 评论 -
Linux内核笔记(驱动篇)之 【平台设备驱动模型】
平台设备的资源包括内存、中断、IO端口等。这些资源通常在设备树中进行定义,设备树中的每个设备节点都可以定义其所需的资源信息。以内存资源为例,设备树中定义内存资源的方法如下:其中,memory节点是内存资源的名称,reg属性定义了内存资源的地址和大小。原创 2023-06-21 20:30:20 · 234 阅读 · 0 评论 -
Linux内核笔记(驱动篇)之 【自旋锁的简单介绍】
自旋锁与互斥锁类似,但是自旋锁不会引起调用者睡眠。如果自旋锁被其他执行单元保持,则调用者会一直循环等待保持者释放锁。想像这么一个场景,早上醒来你要上厕所(临界区),进入该厕所需要一把钥匙(自旋锁),你发现厕所关着,里面有人了(锁被保持了),你敲门申请,在门外一直等待(循环等待,不会挂起睡眠,而互斥锁会),直到里面的人出来,把钥匙给你(保持着释放锁,你获得锁),进入厕所。自旋锁的效率远高于互斥锁。原创 2023-02-08 21:12:46 · 132 阅读 · 0 评论 -
Linux内核笔记(驱动篇)之 【MMC里的轮询机制】
最近遇到客户提的一个问题,大概意思是他们的SDIO Wi-Fi在卸载Wi-Fi驱动后再加载就检测不到Wi-Fi设备了。从他的问题看大概是热插拔有问题。原创 2023-02-07 22:54:44 · 238 阅读 · 0 评论 -
Linux内核笔记(文件系统篇)之 【快速了解虚拟文件系统(VFS)】
前言为什么 Linux 内核的文件系统类型那么多,都能挂载上呢?为什么系统里可以直接 mount 其他文件系统呢?甚至能把 windows 下的文件夹挂载到 windows 上,为什么 Linux 的虚拟文件系统这么强大?这得益于它的数据结构设计得十分精妙。好像听过,Linux 有什么解决不了的?加一层。原创 2022-01-16 16:53:35 · 5158 阅读 · 3 评论 -
Linux内核笔记(文件系统篇)之 【移植Linux4.14.13到imx6ull】
移植Linux内核4.14.13到imx6ull原创 2022-07-19 00:22:08 · 393 阅读 · 2 评论 -
Linux内核笔记(系统篇)之 【制作SD启动卡,从SD卡启动系统】
芯片原厂驱动开发,深入操作系统的世界,挖掘Linux内核与驱动,有空坚持OJ,欢迎交流。终身学习|终身成长原创 2022-07-30 15:12:44 · 1844 阅读 · 0 评论 -
Linux内核笔记(文件系统篇)之 【系统启动流程-armV7】
bootloader如何启动Linux内核?原创 2022-02-26 21:23:11 · 969 阅读 · 0 评论 -
Linux内核笔记(驱动篇)之 【eMMC读写的数据流图】
之前在《深入浅出MMC子系统》介绍了MMC子系统,从中可以窥探出eMMC读写的全流程,对于其中的数据流,了解它也非常重要。将其中的数据流抽出来分析,深入理解里面每一层使用的数据结构,会让我们对MMC的理解更为深刻。原创 2022-01-09 18:30:45 · 2187 阅读 · 0 评论 -
Linux内核笔记(驱动篇)之 【深入浅出MMC子系统】
本文基于内核版本4.1.15分析,随着内核版本升级,部分数据结构会发生变化,但是整体流程没有发生变化。先附上读写eMMC大体经过,目的在于了解过程,具体细节不作过多分析。原创 2022-01-07 22:57:53 · 1668 阅读 · 0 评论 -
Linux内核笔记(系统篇)之 【start_kernel函数部分分析】
linux_banner 字符串保存了 linux 版本号,编译主机,GCC 版本,编译 时间等信息。初始化高端内存线性地址中永久映射的全局变量.IMX6ULL这里的宏没开,所以这里应该是空。以下是编译生成的文件,路径在include\generated\compile.h。我的是imx6ull板子,不是对称多处理器,这里宏没定义,直接返回false。根据板子里面的启动信息,cat /proc/kmsg,对着代码看。初始化体系相关的部分,实现与体系和芯片有关。(栈向下生长的情况)(栈向上生长的情况)原创 2021-12-25 21:35:21 · 1345 阅读 · 0 评论