当前位置: 首页 > news >正文

使用printk对SPI子系统全过程的追踪

替换编译内核:

在内核目录下执行:

make mrproper
make 100ask_imx6ull_defconfig

# 在加载配置后才能打开内核界面修改内核设置,之后再编译内核
make zImage -j4
make dtbs

cp arch/arm/boot/zImage ~/nfs_rootfs
cp arch/arm/boot/dts/100ask_imx6ull-14x14.dtb ~/nfs_rootfs


make modules #编译内核里标记为<M>的驱动/功能
sudo apt install tree #安装一个查看目录结构的工具
make ARCH=arm INSTALL_MOD_PATH=/home/book/nfs_rootfs modules_install

# ARCH=arm 要编译的是 ARM 架构,

# INSTALL_MOD_PATH指定模块安装路径,

# modules_install把刚刚编译好的 .ko 驱动模块,安装到前面指定的路径

# 就是选择模块编译后的保存路径 #

cd /home/book/nfs_rootfs


adb push zImage /boot
adb push 100ask_imx6ull-14x14.dtb /boot
adb push lib/modules /lib # modules 目录下保存执行完 make modules 生成的.ko文件。

将驱动编译成模块:

cd 源码目录

make menuconfig #打开图形化配置

1.驱动类选项会用< >

< > 空括号表示完全关闭,这个驱动不编译。

<M> 标记M表示单独编译成模块,单独编译成.ko文件。

< * >星号表示编译进内核。

2.一般系统类开关选项用[ ]

[ ] = 功能彻底关闭、禁用
[*] = 功能强制开启、编译进内核

3.---灰色横杠

这个选项被其他功能强制依赖,你无权手动修改。

永久更改环境变量:

路径: ~/.bashrc

添加以下内容

source ~/.bashrc #在编译内核前要重载环境变量否则会出现编译成x86架构,导致开发板不能正常启动。
file arch/arm/boot/zImage #检查内核镜像,防止编译成x86架构替换到开发板导致启动失败。

动态调试:

单独开启某个文件的官方调试信息。若没有打开开关,执行dmesg就只会显示自己添加的打印信息。

make menuconfig #必须打开下面这两个内核配置才能看到 pr_debug 的输出。

# 开启这几个文件的调试打印
echo "file drivers/base/bus.c +p" > /sys/kernel/debug/dynamic_debug/control
echo "file drivers/base/core.c +p" > /sys/kernel/debug/dynamic_debug/control
echo "file drivers/base/driver.c +p" > /sys/kernel/debug/dynamic_debug/control
echo "file drivers/base/class.c +p" > /sys/kernel/debug/dynamic_debug/control

# 关闭这几个文件的调试打印

echo "file drivers/base/bus.c -p" > /sys/kernel/debug/dynamic_debug/control

echo "file drivers/base/core.c -p" >> /sys/kernel/debug/dynamic_debug/control
echo "file drivers/base/class.c -p" >> /sys/kernel/debug/dynamic_debug/control
echo "file drivers/base/driver.c -p" >> /sys/kernel/debug/dynamic_debug/control

# 关闭所有文件的调试输出

echo "clear" > /sys/kernel/debug/dynamic_debug/control

左边第一个 7 代表 console_loglevel;(主要修改这个数)
左边第二个 7 代表 default_message_loglevel;
左边第三个 1 代表 minimum_console_loglevel;
左边第四个 7 代表 default_console_loglevel;

echo 4 > /proc/sys/kernel/printk #将控制台级别设为4

message等级必须高于控制台规定等级才能打印输出。

printk("%s %s %d, spi_imx->clk_per = %p\n", __FILE__, __FUNCTION__, __LINE__, spi_imx->clk_per);

没有写日志等级,就使用 /proc/sys/kernel/printk 中的 default_message_loglevel


printk log:

http://www.jsqmd.com/news/739465/

相关文章:

  • 终极Nintendo Switch文件管理指南:使用NSC_BUILDER实现高效批量处理
  • 【工业AI落地实战指南】:Python故障预测模型从0到部署的7大避坑法则
  • 微博备份神器:3分钟永久保存你的数字记忆
  • C#上位机+工业相机:视觉检测系统自动化控制全流程
  • csp的介绍
  • CrewAI智能体开发:合并代理处理工具
  • 【MySQL初阶】MySQL连接池原理与简易网站数据流动是如何进行的(初阶完)
  • 创业团队如何借助Taotoken统一API降低多模型试错与接入成本
  • GD32F103虚拟串口(CDC)移植避坑指南:从Demo到实用项目的关键三步
  • 第九章-04-Python模块的导入
  • 深入解析STM32存储器架构与总线系统
  • Stein《复分析》第一章精读笔记:从“荒谬”的负数平方根到Cauchy定理的引子
  • AI时代,如何保持深度思考的能力
  • 什么是中间人攻击
  • AI推理时代的逻辑重构
  • 拯救C盘!手把手教你将Anaconda虚拟环境安装到其他盘(附权限问题解决)
  • 2026年哪些平台可以购买积存金?主流渠道对比参考 - 品牌排行榜
  • 为 Hermes Agent 自定义 LLM 提供商并接入 Taotoken 的配置指南
  • R3nzSkin皮肤注入工具:5步轻松实现英雄联盟皮肤自定义
  • 如何用PyTorch自动微分快速构建科学计算模型:从理论到实践的完整指南 [特殊字符]
  • Obsidian Zettelkasten终极指南:30天打造高效个人知识库系统
  • 2026南京男士假发定制天花板?世晨非凡男士假发定制(南京金轮国际店)实测:4秒佩戴 + 隐形无痕,这效果绝了! - 律界观察
  • 电商订单数据分析实战:基于SQL的全流程业务挖掘
  • 暗黑破坏神2存档编辑器终极指南:3分钟快速上手修改你的游戏角色
  • 告别轮询!在Linux上用select实现高效串口中断接收(附i.MX6ULL实测代码)
  • 别再手画流程图了!用PlantUML 5分钟搞定产品需求文档里的用例图
  • OneNote高手都在用的‘隐藏’操作:用键盘搞定表格、大纲和页面管理(Windows版)
  • 【仅限机构订阅的优化清单】:Linux实时调度+CPU隔离+RDT技术在Python交易引擎中的军工级落地
  • 一步到位!OpenClaw 全自动部署教程(附下载链接+问题排查)
  • 对比直接使用原生 API 与通过 Taotoken 聚合调用的便捷性差异