news 2026/5/2 17:52:25

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用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:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 17:48:26

从存储涨价到AI泡沫:2026-2027,算总账的时刻

引言&#xff1a;一个连环追问的起点 这是一个环环相扣的问题链条&#xff1a;从存储为什么涨价&#xff0c;到AI泡沫何时破裂&#xff0c;再到这轮AI最终会飞到哪里。一位观察者给出了明确的论断&#xff1a;2026年&#xff0c;最迟2027年&#xff0c;就见分晓。 本文试图拆…

作者头像 李华
网站建设 2026/5/2 17:43:48

解锁PotPlayer字幕实时翻译:百度翻译插件全攻略

解锁PotPlayer字幕实时翻译&#xff1a;百度翻译插件全攻略 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu PotPlayer作为一款功能强大…

作者头像 李华