- 博客(180)
- 资源 (30)
- 问答 (1)
- 收藏
- 关注
原创 Linux 读写eMMC的EXT_CSD寄存器
本文介绍了解决eMMC后台操作(background operations)导致应用响应延迟的方案。通过修改EXT_CSD寄存器,在后台操作等级较低时触发操作,减少耗时。文章提供了完整的C语言实现代码,包括读取EXT_CSD寄存器、判断BKOPS支持状态、启用后台操作以及主动触发操作的函数。关键操作包括:检查eMMC是否支持BKOPS、启用BKOPS功能、监控BKOPS状态并在需要时主动触发后台操作。该方案通过ioctl与MMC设备交互,实现了对eMMC底层寄存器的读写控制,有效提升了系统响应速度。
2025-11-24 17:48:38
235
原创 通过module_param调试
本文介绍了Linux内核模块参数module_param的动态修改方法。通过module_param定义的参数不仅能在模块加载时设置(insmod param=value),还能在运行时通过sysfs文件系统动态修改(echo value > /sys/module/modname/parameters/param)。文中提供了调试参数的具体实现方案,包括定义可调式打印级别变量(debug_print_flag)和配套的调试打印宏,支持运行时动态调整日志输出级别。这种方法极大地方便了驱动调试,开发者可
2025-11-11 14:22:55
53
原创 IMX8MP交叉编译QT 5.12.9
本文介绍了QT源码的交叉编译流程,主要分为三个步骤:1)配置交叉编译链环境;2)修改qmake.conf文件,设置编译器路径和编译选项;3)运行configure脚本进行配置,指定目标平台、安装路径等参数。文章特别说明了qmake.conf文件路径与-xplatform参数的对应关系,并提供了常见的编译错误解决方案,如qMax和numeric_limits报错的修正方法。同时强调configure配置应根据实际需求选择模块,非必需模块可通过-skip参数跳过。整个过程需要根据目标平台(如linux-aarc
2025-10-22 16:30:12
100
原创 动态库版本不匹配
动态库A升级后导致依赖库因符号未定义而编译失败。解决方法是在链接时添加"-Wl,--ignore-unresolved-symbol"选项忽略特定未解析符号(如xmlGetProp@LIBXML2_2.4.30),从而绕过版本不匹配问题。这种方案适用于临时解决符号兼容性问题,但需注意可能带来的潜在风险。
2025-09-29 10:24:10
125
原创 imx6ull支持4G模块
本文记录了迅为IMX6ull开发板移植EC204G模块的Linux系统配置过程。主要涉及内核配置修改:启用USBNET功能、USB串口GSM/CDMA驱动及PPP协议支持。通过编译生成defconfig并烧录后,系统成功识别模块。同时详细说明了交叉编译ppp工具的步骤(推荐使用ppp-2.4.4/2.4.5版本),包括配置文件创建(pap-secrets、wcdma等)和网络参数设置。最后通过执行pppdcall启动拨号连接。该移植实现了3G网络功能,为开发板提供了移动网络支持。
2025-08-10 21:31:00
96
原创 arm ramdump调试
1、为什么会有3个镜像:因为在J3上面,DDR的内存映射不是连续的。同时在ramdump的时候,不能大于0x80000000。所有产生了3个镜像。a、uboot阶段,将内存dump到U盘或者eMMC里面都行。b、uboot阶段,通过adb将内存dump到PC主机。安装方式:make target=arm64。
2025-07-29 16:00:17
268
原创 Windows11右键默认显示所有选项
打开任务管理器,在进程里面找到Windows 资源管理器,然后右键,重启。4、这个时候,鼠标右键就默认显示所有选项了。1、使用win+x,打卡终端管理员。
2025-03-04 16:55:02
692
原创 更改Linux console输出等级
最近在调试问题的时候,发现有些日志没有通过串口终端打印出来。排查发现是内核里面配置的串口日志等级较高,导致有些日志没有打印。在内核的配置文件里面,更改CONFIG_CONSOLE_LOGLEVEL_DEFAULT的值。
2024-11-06 14:57:32
322
1
原创 fPIC和非fPIC混用导致程序Segmentation Fault
排查了很久,后面怀疑可能是fPIC选项导致的。找第三方确认他们编译的时候,是否添加了fPIC选项,发现他们没有添加。让他们添加后,重新提供过来,发现问题就解决了。最近在调试一个功能时,使用到了一个第三方库,第三方提供的是一个静态库。这个库在我们之前其他的平台上已经用过了。简单测试过后,发现也能用。添加到工程里面:我们工程输出的是动态库,相当于我们的动态库里面包含了第三方的静态库。后面将库添加到工程里面,发现会死在第三方库里面。简单测试时:程序直接链接了第三方提供的静态库。
2024-10-16 16:25:10
245
原创 通过dlopen使用动态库
在和别人合作开发的时候,往往存在一方提供库供另一方调用。这个过程存在编译依赖问题,库更新问题。为了解耦,这里可以使用dlopen的方式去使用动态库。
2024-10-16 15:39:16
485
原创 yocto通过环境变量控制代码的编译
编译的时候,编译器会报错。为了快速的确认自己的宏控有没有生效,可以在自己的代码认为添加一些错误,这样在编译的时候根据报错信息,就能知道宏控定义是否生效。2、将TEST_FUNC_ENABLE环境变量添加到yocto的BB_ENV_EXTRAWHITE环境变量里面。实施方案:通过编译选项去配置环境变量,然后在bb文件里面根据环境变量的信息,去定义对应的宏。说明:此步骤主要是获取TEST_FUNC_ENABLE环境变量的值,并定义对应的宏。至此,我们的代码就会根据我们传递的参数编译对应的代码。
2024-09-27 17:05:23
505
原创 以太网传输出现不分包
最近对手件反馈,在传输文件的时候,我们这边发包太快,导致对手件网络出现了拥塞,把他们程序给搞死了。他们抓了一下他们收到的包,发现我们发送的数据包都大于了MTU设置的值。然后再次验证,发现Don't Fragment确实取消了,但是发包数据量还是大于了MTU。验证:我们去抓我们发送出去的包,发现确实配置了Don't Fragment。后续再进行测试,就可以看到,我们发送的包是按照MTU大小进行分片了。排查方法:为什么我们发送的数据包会大于MTU的值。注:查看属性是小写的k。可能性二:硬件tso属性导致的。
2024-09-14 18:11:31
343
原创 panic_on_rcu_stall
之前项目在开发阶段,有个版本,内核很容易就挂了。后面排查发现,是因为内存用完了,导致内核出现了panic。当时一直很疑惑,为什么内存没有了,导致内核出现了panic。后面发现,在启动的时候,/proc/sys/kernel/panic_on_rcu_stall里面被人写入了1。内存在耗尽的时候,导致RCU出现了问题。进而导致内核出现了panic。内核运行时的参数,在/proc/sys/目录下都存在对应的文件。查看内核运行时参数的命令:sysctl -a。
2024-09-09 10:15:19
471
原创 yocto配置多线程编译
上面两个变量最后在conf/local.conf里面会有定义。以高通8155为例。conf/local.conf是编译的时候自动生成的。它原始配置是在./conf/include/local.conf.templet文件。当然,不同的平台可能对应到不同的配置文件。yocto涉及到多线程的编译配置主要有两个变量:BB_NUMBER_THREADS、PARALLEL_MAKE。BB_NUMBER_THREADS:启用多少个线程编译。PARALLEL_MAKE:同时并行编译的任务数。
2024-08-28 11:28:42
686
原创 C和C++实现互调的方法
C++支持函数重载,所以在编译的时候,函数名会发生变化。C语言不存在这个问题。那么在调用的时候,C++找的是变化后的函数名,而C语言找的是原始的函数名。所以两者不能直接调用。
2024-08-21 13:43:35
687
原创 uboot、kernel通过KCFLAGS控制代码编译
很多时候,为了便于代码管理,我们希望在编译的时候,根据传入的参数去编译我们指定的代码。这样可以大大的减少我们的工作量。
2024-08-19 15:35:40
488
原创 vscode设置tab为制表符
点击上图框起来的【制表符长度】,就可以进行配置。注:你的有可能显示【空格】。至此就完成了tab配置成制表符。如果配置成空格,也是一样的操作。选择你需要的制表符长度。
2024-08-01 10:53:06
2198
1
原创 dm-verity给内核传递的参数解析
这篇博客完整解析了dm-verity在使用过程中bootloader(uboot)向Linux kernel应该传递哪些参数以及这些参数分别是什么意思。
2024-07-12 18:10:21
543
原创 dm-verity hashtree的结构
介绍了dm-verity的hashtree的结构图。很形象的表明了hashtree的构成。根据这个结构图,可以自己编码完成hashtree镜像的生成
2024-07-12 18:02:34
366
原创 生成dm-verity的hashtree
这个博客主要是生成dm-verity对应的hashtree和root hash。里面是纯C代码,只依赖libcrypto.so这个库。非常易于移植。
2024-07-12 17:57:58
293
原创 vscode 乱码解决
今天用vscode打开工程时,发现中文是乱码。分析了一下,发现应该是工程文件的编码和vscode打开文件时使用的编码不一致。因此解决办法就是改变vscode打开文件的编码格式。步骤一:点击编码信息按钮UTF-8(有些可能有区别,自己灵活变通)步骤三:选择自己想要的编码格式(不知道的就自己去试)步骤二:选择通过编码重新打开。至此,乱码就解决了。
2024-06-28 09:46:36
757
原创 Linux 内核设备树 ranges属性
注:上面的设备树代码是随便找的。#address-cells:本节点和父节点的值。注:具体有多少行,根据实际情况来决定。#size-cells:本节点的值。
2024-04-22 18:03:37
1111
原创 kmallc、kzalloc、vmalloc使用
vmalloc() 函数则会在虚拟内存空间给出一块连续的内存区,但这片连续的虚拟内存在物理内存中并不一定连续。由于 vmalloc() 没有保证申请到的是连续的物理内存,因此对申请的内存大小没有限制,如果需要申请较大的内存空间就需要用此函数了。kmalloc() 申请的内存位于物理内存映射区域,而且在物理上也是连续的,它们与真实的物理地址只有一个固定的偏移。kzalloc是kmalloc的变种。GFP_ATOMIC:分配内存的过程是一个原子过程,分配内存的过程不会被(高优先级进程或中断)打断;
2024-03-14 16:54:12
421
vbmeta.img文件的完整解析,对该文件的所有字段都做出了详细标注
2024-10-16
stm32f4文档
2018-12-27
STM32F407+LWIP+DP83848移植例程
2018-01-13
用代码解压zip文件里面的指定文件
2022-01-25
i.MX6Q_uboot_keep_logo_to_kernel.tar.gz
2021-01-04
QT Creator 第三版 高清+书签+源码
2018-12-28
IMX7文档集合 Yocto使用教程
2018-08-06
IMX7-MFGTools
2018-08-06
提取BMP图片的数据
2018-10-13
cpulimit-master.tar.gz
2019-05-22
Writing_udev_rules.tar.gz
2019-07-28
Draw.io_jb51.rar
2021-07-16
怎么解决QT使用linuxfb插件时gdb调试QT UI程序看不到程序堆栈信息?
2020-03-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅