![](https://img-blog.csdnimg.cn/42d615e6070a43c2a788aeed800c7756.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
i.MX8M平台从入门到精通系列
文章平均质量分 72
打造全网最全的NXP i.MX8M平台内核、驱动开发系列教程,本系列是本人的工作笔记,亦是对内核驱动机制的梳理,通过对现象、原理、实践应用的总结,再加上流程分析,使其更易理解、掌握、上手
口袋物联
作者: 口袋物联
主要从事Linux系统软件开发,喜欢阅读内核源代码,在不断的学习和工作中深入理解内存管理,进程调度,文件系统,设备驱动等内核子系统
展开
-
github安全问题token和sshkeys
一般在系统的~/.ssh/id_rsa.pub目录,如果没有,可能通过命令ssh-keygen生成,其中t表示加密类型,支持dsa | ecdsa | ed25519 | rsa | rsa1,最后通过cat ~/.ssh/id_rsa.pub或cat ~/.ssh/id_ecdsa.pub获取真正的密钥。在菜单中,选择点击“Personal access tokens”–>或“Tokens(classic)”按钮。依次输入Title、Key,最后点击点击“Add SSH key”按钮完成添加。原创 2024-06-19 18:38:08 · 318 阅读 · 0 评论 -
arm系统中双网卡共存问题
参考Linux C 获取主机网卡名及 IP 的几种方法。原创 2024-06-05 10:25:55 · 219 阅读 · 0 评论 -
Linux网络通信编程(套接字模型TCP\UDP与IO多路复用模型select\poll\epoll)
在这里插入代码片在这里插入代码片在这里插入代码片在这里插入代码片##IO多路复用在这里插入代码片在这里插入代码片在这里插入代码片[1][1][1][1][1]原创 2024-06-05 10:10:55 · 299 阅读 · 0 评论 -
Win10下CodeBlock实现socket TCP server/client
文章目录1 安装codeblock2 适配libws2_32.a库3 TCP socket工作原理4 代码实现服务端客户端5 运行效果1 安装codeblock官方免费下载值得一提的是,安装时,指定安装路径,其他默认安装即可2 适配libws2_32.a库默认安装,只有3个库,如果编译socket,需要专门的库libws2_32.a,可下载同时需要在项目中设置3 TCP socket工作原理4 代码实现服务端//server.c#include <stdio.h>原创 2024-06-05 09:51:30 · 200 阅读 · 0 评论 -
ubuntu系统下安装samba服务器
1 安装Samba服务 sudo apt-get install samba samba-common2 配置samba服务 vi /etc/samba/smb.conf security =user [myshare] comment = my share directory path = /home/skyworth/work browseable = yes wr...原创 2018-04-20 17:19:06 · 463 阅读 · 1 评论 -
systemd之journalctl
默认情况下(当 Storage= 在文件 /etc/systemd/journald.conf 中被设置为 auto),日志记录将被写入 /var/log/journal/。该目录是 systemd 软件包的一部分。如果该目录缺失,systemd 会将日志记录写入 /run/systemd/journal。Systemd是Linux发行版的初始化系统,负责启动系统后的所有服务,并监视它们在系统运行期间的状态。journalctl是Journal的主要接口,提供丰富的功能来检索和显示日志条目。原创 2024-02-04 16:25:18 · 24 阅读 · 0 评论 -
imx8mm平台flash镜像组成(imx-atf\ firmware-imx-8m\imx-boot\u-boot-imx\optee-os )
因此我们需要将前面编译的 uboot-imx 镜像和 imx-atf 以及 ddr 固件复制到 imx-boot/iMX8M 目录下来制作 imx-boot 镜像。SPL首先会跳转到ATF固件,验证成功后ATF会将控制权移交给optee,一旦optee初始化完成,optee就会切换到非安全世界启动uboot,再启动内核。一旦 DDR 可用,SPL 代码就会将FIT 中的images(ATF,TEE)到它们的特定执行地址,HAB API 会验证 U-Boot,ATF 和 OPTEE(可选项)。原创 2023-12-21 18:30:44 · 190 阅读 · 0 评论 -
3.3.17内核基数树radix_tree源码解析与示例分析
union {原创 2023-11-27 17:21:52 · 85 阅读 · 0 评论 -
3.3.5内核idr(ida)管理id大解密
IDR 提供将 ID 映射到指针的功能,常内嵌到数据结构中使用。IDA 只提供 ID 分配,因此内存效率更高。原创 2023-11-27 15:41:12 · 84 阅读 · 0 评论 -
3.3.4打开cpu初始化大门之cpumask
即为typedef struct cpumask {。原创 2023-11-25 23:18:20 · 304 阅读 · 0 评论 -
3.3.3 linux内核位图bit操作知多少( bitmap, bitops, bitmask, bit find)
/即set_bit(bit, addr)表示将addr的第bit位置1clear_bit(bit, addr) 表示将addr的第bit位置0change_bit(bit, addr) 表示将addr的bit位的翻转,即bit位为0时被置位,为1时则被清零test_bit(bit, addr) 表示返回addr第bit位的值test_and_set_bit(bit, addr)表示将addr的第bit位置1,并返回原始addr第bit位的值。原创 2023-11-25 21:04:02 · 242 阅读 · 0 评论 -
3.3.2 深度理解BITS_TO_LONGS函数
BITS_TO_LONGS定义在include/linux/bitops.h中,具体如下8sizeoflongsizeofsizeof而DIV_ROUND_UP的定义可以追溯到如下1即DIV_ROUND_UP意为向上取整,具体的数学解释可见参考【1】,此宏多用在存储数据的应用场景,如:n表示申请的存储空间的大小,d表示 存储空间增长的步长,通过此宏,可以得到正好容纳存放n的合适大小,不会有太多的冗余,即使申请的多了,也不会超过d,比如。原创 2023-11-25 16:25:31 · 127 阅读 · 0 评论 -
ubuntu环境删除qtcreator方法
不同的安装方法,对应不同的删除方法。apt-get或者dpkg。原创 2023-11-24 09:31:41 · 589 阅读 · 0 评论 -
3.3.1详解linux内核链表list_head及其接口应用
在一般的链表学习过程中,链表的数据结构组成,如下所示,通过增加next结点指针来实现数据的相连。void *data;但这样的缺点就是,实现链表与数据宿主耦合到一起,链表的数据组织(增删修改)不能重用,不同的数据,需要重复的造轮子。而将用户数据结构定义成如下形式,void *data;这样,sk_custom通过list_head的接口,进行链表的增删查,避免重复造轮子。// 定义一个链表// 用INIT_LIST_HEAD函数初始化链表。原创 2023-11-23 19:07:50 · 688 阅读 · 0 评论 -
13.3 uboot显示logo
【代码】13.3 uboot显示logo。原创 2023-11-23 16:02:01 · 431 阅读 · 0 评论 -
13.2 uboot适配ite6161驱动
文章目录1 ite6161工作原理2 ite6161适配驱动3 ite6161 dts适配4 uboot显示框架1 ite6161工作原理2 ite6161适配驱动3 ite6161 dts适配4 uboot显示框架原创 2023-11-23 15:54:59 · 54 阅读 · 0 评论 -
13.1 uboot适配pca9545
文章目录1 认识PCA95452 uboot驱动模型中的PCA95453 Uboot中识别PCA95451 认识PCA95452 uboot驱动模型中的PCA95453 Uboot中识别PCA9545原创 2023-11-23 15:50:15 · 84 阅读 · 0 评论 -
1.5.1 git/svn日志格式规范
规则1》小步提交,每个功能模块分别提交。modify 修改内容概述,一定要全面。scope 本次修改影响范围或重大改变。《规则2》源文件与修改文件,分别提交。修改内容全面,如背景、关联信息等。备注,如bug连接等。原创 2023-11-23 15:41:07 · 404 阅读 · 0 评论 -
15.1 自动化黑屏监测系统
python+opencv实现显示摄像头,截取相关图片,录取相关视频https://blog.csdn.net/weixin_51883798/article/details/132030733。python图像质量检测(一):黑屏检测。python识别视频黑屏或者低清晰度。原创 2023-11-23 15:35:53 · 97 阅读 · 0 评论 -
3.1 Linux时间子系统
从驱动层,给出timer和hrtimer的使用示例。分别从介绍各个模块初始化做了些什么工作。从应用层,分析其使用方法。timer驱动代码分析。原创 2023-11-23 15:24:41 · 36 阅读 · 0 评论 -
3.1.1 Linux时间子系统 timer示例使用
检查timer 状态是否为空,为真不为空。原创 2023-11-23 15:13:24 · 39 阅读 · 0 评论 -
3.1.2 Linux时间子系统 hrtimer示例使用
常用的结构体定义,有2种形式,一种是关键字struct 结构体形式,如下struct tag其中struct是关键字,tag是结构体名,member-list是结构体成员列表,variable-list是定义的变量列表tag、member-list、variable-list这3部分至少要出现2个,其实常用定义为如下形式struct 结构体名 {成员类型 成员名;//成员间用分号隔开 };//最后分号不能省略一种是关键字typedef形式,如下,tag可有可无成员类型 成员名;原创 2023-11-23 14:45:09 · 450 阅读 · 0 评论 -
1.2.1 C语言结构体初始化方法总结
常用的结构体定义,有2种形式,一种是关键字struct 结构体形式,如下struct tag其中struct是关键字,tag是结构体名,member-list是结构体成员列表,variable-list是定义的变量列表tag、member-list、variable-list这3部分至少要出现2个,其实常用定义为如下形式struct 结构体名 {成员类型 成员名;//成员间用分号隔开 };//最后分号不能省略一种是关键字typedef形式,如下,tag可有可无成员类型 成员名;原创 2023-11-23 14:35:15 · 589 阅读 · 0 评论 -
2yocto 自启动程序(服务)
单独为主程序创建服务,且设置如果启动失败,则2s后重新启动[Unit][Service][Install]可以配置为 inherit, null, tty, journal, syslog, kmsg, journal+console, syslog+console, kmsg+console, file:path, append:path, socket, fd:name。运行结果如下,从信息来看,确认第一次失败了,第二次成功了。原创 2023-11-09 18:28:50 · 296 阅读 · 1 评论 -
pca954x系列芯片对比(pca9543,pca9544,pca9545,pca9546,pca9547,pca9548)
pca954x系列芯片对比本文主要内容:1 pca9543 通用描述,原理框架,PDF下载连接2 pca9544 通用描述,原理框架,PDF下载连接3 pca9545 通用描述,原理框架,PDF下载连接4 pca9546 通用描述,原理框架,PDF下载连接5 pca9547 通用描述,原理框架,PDF下载连接6 pca9548 通用描述,原理框架,PDF下载连接7 pca954x 对比总结,PDF下载连接。原创 2023-11-03 10:09:15 · 483 阅读 · 0 评论 -
13.1 linux命令行查看控制串口(uart)全攻略
本文主要内容:1 串口启动驱动打印2 sys目录下的串口信息3 proc目录下的串口信息4 etc目录下的串口信息5 dev目录下的串口信息6 stty控制具体的串口7 命令行控制串口读写8 串口数据解析。原创 2023-11-01 17:29:00 · 1332 阅读 · 1 评论 -
14.1基于imx8mm平台的it6161调试总结
分析以上4种情况1 id错错误,是因为没有识别到it6161转换芯片,应是硬件问题2 main正常,无显示,驱动报错,也是硬件问题3 main正常,无显示,驱动无报错,应该是驱动问题4 HDMI正常,eDP无输出,应该是固件问题经修改硬件,11正常,9次出现驱动无异常,但无显示的问题。原创 2023-11-01 14:43:59 · 223 阅读 · 1 评论 -
3.3.8 linux控制内核打印printk demsg DEBUG
本文主要内容:1 列出内核打印级别2 修改内核打印级别方法1 编译时方法2 uboot时方法3 启动后3 DEBUG宏控制妙用4 内存中各种打印函数封装5 测试示例代码2 修改打印级别3 打印0 查看打印信息原创 2023-11-01 14:16:47 · 191 阅读 · 1 评论 -
12.2 一文读懂i2c-tools工具(i2cdetect、i2cdump、i2ctransfer)
i2c-tools,主要用来在应用层,实现对i2c设备的扫描、读取、写入等操作,常用于对i2c设备进行交互、调试、测试等。此工具集当前最新版本为4.3,主要包括i2cdetect 用于扫描I2C总线上的设备,并列出已连接的设备i2cget 用于从指定I2C设备的寄存器读取数据,只支持8位地址i2cset 用于从指定I2C设备的寄存器写入数据,只支持8位地址i2cdump 用于显示指定I2C设备的寄存器内容i2ctransfer,用于执行复杂的I2C传输操作,如多指定的读写。原创 2023-10-31 18:24:27 · 1940 阅读 · 1 评论 -
10.2 一文读懂SPI与DSPI、QSPI、OSPI关系与异同
1)标准SPI通过说的SPI,称为标准SPI,是一种串行外设接口,通过有4根线控制,CLK、CS、MISO、MOSI,可工作于4种模式,一般是主机连接外设,工作于主从模式,它经常与UART、I2C等类比。2)扩展SPI针对通过SPI连接的Nor Flash,经常工作在半双工状态,因此将MOSI和MISO扩展,用于加倍数据的传输。对于Dual SPI ,将MISO作为IO0,将MOSI作为IO1,这样一个周期内可以传输2bit的数据,从面加位数据的传输。原创 2023-10-31 17:11:14 · 5165 阅读 · 1 评论 -
12.1 怎样解压或读取wic文件内容
本文主要内容:1 什么是wic2 启动wic命令3 使用wic命令3.1 显示wic镜像内容3.2 取出wic镜像内容wic是OpenEmbedded推出的新的制作带分区的SD卡映像的工具,详细背景介绍:wic不是一个linux命令,它是一个python命令组,主要用于yocto项目打包镜像,故其一般在yocto工程中。如果只是使用wic命令,也可以单独下载。使用它的方法有2种:1)激活方式2)带路径运行使用wic命令帮助信息当前使用0.2.0版本,帮助信息打印如下,它支持list、ls原创 2023-10-31 16:12:37 · 478 阅读 · 1 评论 -
什么是yocto(理清yocto poky openembedded bitbake间关系)
meta-openembedded 是从原来的 OpenEmbedded 中的 Recipes 中拆分出来的 Recipes 的一个集合。从与 Yocto Project 合作开始,OpenEmbedded 便以 OpenEmbedded-Core 项目作为项目发展的名称(简称 OE-Core),之前的称为 OpenEmbedded-Classic(简称 OE-Classic 或 oe-dev),OpenEmbedded 这个名字就用来代指整个 OpenEmbedded 项目。原创 2023-10-06 15:55:54 · 194 阅读 · 1 评论 -
2.2.3.1vim + ctags + cscope + taglist
在window下,我们一般用Source Insight来查看代码而在linux下,使用vim来查看代码,vim是一个简单的文本浏览/编辑器,它可以通过插件的形式,搭建一个完全的类Source Insight环境,通过快捷键的形式,快速查看、定位变量/函数,本文就是基于vim,通过ctags+cscope+taglist+Nerdtree将vi/vim打造成一个IDE.原创 2023-10-05 22:07:46 · 570 阅读 · 0 评论 -
2.2.3 vim操作合集
在对文件进行编辑前,先执行指定的命令,最多可以指定10个命令,具体的命令如:vim "+set si" main.c vim "+find stdio.h" vim -c "set ff=dos" -c wq mine.mak。VIM 是 Linux 系统上一款文本编辑器,学习 VIM 最好的文档,应该是阅读学习 VIM 的帮助文档,可以使用本地的帮助文件(vim--->:help),或者使用。在光标所在行的行首插入随后输入的文本,行首是该行的第一个非空白字符,相当于光标移动到行首执行 i 命令。原创 2023-10-05 16:16:27 · 556 阅读 · 0 评论 -
2.2.1 嵌入式工程师必备软件
在开发过程中,不论是对代码的对比,还是对log的对比,都是必不可不少的,通过对比,我们可以迅速找到差异,定位问题。在开发过程中,串口调试是必不可少的功能,常用的串口终端有putty(免费可免安装),SecureCRT(经典但收费),MobaXterm(国产免费),它们几乎都支持SSH/Telnet远程登录,UART串口调试,打印log保存,另外还有Xshell。在开发过程中,串口调试是必不可少的功能,常用的串口调试助手有XCom,SSCOM,MyDockligh,AccessPort,本人使用SSCOM。原创 2023-10-05 14:18:43 · 151 阅读 · 0 评论 -
2.2.2搭建交叉编译器
交叉编译的存在,有2个原因,1个是不同的平台,架构不同,使用的指令集不同,ARM和MIPS的CPU无法运行X86指令休编码的程序,1个是一般arm平台上的存储/性能有限,无法提供一个可靠的编译环境。如果是芯片厂商提供的方案,如NXP/TI,他们会提供他们编译的好的交叉编译器;如果是第三方提供的开发板,如飞凌、米尔、创龙,他们也会提供对应的交叉编译器;下载到交叉工具后,一般放到一个名为toolchain目录下,如/opt/toolchains/将PATH放到启动文件中,如~/.bashrc,如。原创 2023-10-05 14:13:32 · 102 阅读 · 0 评论 -
1.1.2开发基础-硬件-逻辑分析仪
根据奈奎斯特定律来说,采样率必须是信号频率的2倍以上才能还原出信号,因为逻辑分析仪是数字系统,算法简单,所以最低也是4倍于信号的采样率才可以,一般选择10倍左右效果就比较好了。5 波形分析 逻辑分析仪有各种测量标线,可以测量脉冲宽度,测量波形的频率,占空比等信息,通过数据分析,查找我们的波形是否符合我们的要求,从而帮助我们解决问题。阈值电压:区分高低电平,如DSlogic的阈值电压是:0-5V,使用DSView可以设置具体的值,默认为1V,即高于1V识别为高电平,1V识别为低电平。原创 2023-10-04 15:56:46 · 185 阅读 · 0 评论 -
1.1.3开发基础-硬件-示波器
NORMAL:行业术语"正常触发",对于数字示波器,在满足触发条件的时候,示波器捕获一次,显示一个波形,该波形是稳定的,当满足触发条件的信号不断出现的时候,示波器不断的触发显示波形,没有满足触发条件的时候,示波器显示上次触发的信号波形,,对于模拟示波器只在信号满足触发条件的时候显示波形,并会马上消失,除非该信号是周期信号,在没有满足触发条件信号的时候,示波器没有显示任何波形.示波器的主要用途就是将随时间变化的电信号以图形的方式画出来,多数的示波器是用时间为x轴,电压为y轴产生的二维图形。原创 2023-10-04 15:54:40 · 178 阅读 · 1 评论 -
1.1.1开发基础-硬件-万用表
万用表又叫多用表、三用表、复用表,是一种多功能、多量程的测量仪表,一般万用表可测量直流电流、直流电压、交流电压、电阻和音频电平等,有的还可以测交流电流、电容量、电感量及半导体的一些参数。(c)测电阻时,不能带电测量。因为测量电阻时,万用表由内部电池供电,如果带电测量则相当于接入一个额外的电源,可能损坏表头。(b)选择量程时,要先选大的,后选小的,尽量使被测值接近于量程。(d)用毕,应使转换开关在交流电压最大挡位或空挡上。(a)在测电流、电压时,不能带电换量程。原创 2023-10-04 15:52:36 · 181 阅读 · 1 评论