使用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:

相关推荐
测试界的小码农38 分钟前
【Linux 命令实战(06):Linux 文件权限管理,掌握 chmod、chown、chgrp】
linux·运维·服务器
艺杯羹2 小时前
1Panel 装好后 ufw 仍是 inactive:一次服务器安全盲区复盘
服务器·数据库·安全·网络安全·系统架构·实战·1panel
一条破秋裤2 小时前
【1114】【并发控制】【笔记】
linux
2035去旅行4 小时前
ADB的底层原理
linux·adb·嵌入式·arm·soc
武子康4 小时前
单卡 A6000 跑 Qwen-Drive:怎样留下可比较的第一条基线?
linux·人工智能·深度学习
女神下凡4 小时前
芯参谋(107):杰理AC_中科蓝讯_开发指南
linux·服务器·网络·单片机·嵌入式硬件
落羽的落羽4 小时前
【C++】C++17的主要特性
linux·服务器·开发语言·c++·算法·机器学习
爱和冰阔落9 小时前
【Linux网络】TCP 半包粘包怎么解决?从长度报头、JSON 拆包到网络计算器完整实战
linux·运维·网络·tcp/ip
say_fall10 小时前
【Linux网络编程】UDP套接字编程:系统编程组件、基础回显服务、InetAddr与地址转换、翻译服务与线程池聊天室
linux·服务器·网络·udp·vr
ö Constancy11 小时前
一台电脑的硬件组成与作用:按功能分类详解(Windows 与 Linux 视角)
linux·windows·电脑