当前位置:首页>Linux>瑞芯微——Linux的常用指令--grep

瑞芯微——Linux的常用指令--grep

  • 2026-09-16 21:28:04
瑞芯微——Linux的常用指令--grep

瑞芯微——Linux的常用指令--grep

作为一个 Linux 内核驱动开发者,尤其是写 RV1126b 这类嵌入式芯片驱动时, 你一定有过这种 “翻源码翻到眼酸” 的时刻:

想找 platform_driver_register 的定义,却不知道在哪个头文件里; 想参考一个类似的 I2C 驱动,却不知道从哪个文件入手; 想查 -ENODEV 错误码的含义,却翻遍了目录找不到。

这时候,你需要一个内核驱动开发的 “源码导航仪” —— 它就是 grep。

在我看来,grep 就像内核源码里的 “精准探测器”, 不管你要找的是函数定义、结构体、宏、设备树属性还是错误码, 只要给它一个关键词,它就能在嵌套几十层的内核源码里快速定位, 帮你节省大把翻源码的时间。


先看例子(RV1126b 驱动开发真实场景)

假设你正在写 RV1126b 的摄像头驱动,需要做这几件事:

  1. 找 struct platform_driver 的定义,了解怎么注册平台驱动;
  2. 找 devm_kzalloc 的实现,确认它的内存管理机制;
  3. 查设备树里 RV1126b 的 compatible 属性,匹配你的驱动;
  4. 找 -EINVAL 错误码的定义,排查参数错误问题。

用 grep 一键搞定:

1. 找 struct platform_driver 定义(带上下文)

cd ~/rv1126b_linux6.1_release_v1.2.0/kernel/
grep -A 30 "struct platform_driver" include/linux/platform_device.h

-A 30 会显示匹配行之后的 30 行,直接看到结构体的成员,不用再打开文件翻。

2. 找 devm_kzalloc 的实现(只搜 .c 文件)

grep -r "devm_kzalloc" --include="*.c" drivers/base/

--include="*.c" 只搜 C 源文件,避免搜到头文件里的声明,直接定位实现。

3. 查 RV1126b 设备树 compatible 属性

grep -r "rockchip,rk1126" arch/arm/boot/dts/

快速找到 RV1126b 设备树里的匹配字符串,直接用到你的驱动 of_match_table 里。

4. 找 -EINVAL 错误码定义

grep -w "EINVAL" include/uapi/asm-generic/errno-base.h

-w 全词匹配,避免搜到包含 EINVAL 的其他宏,直接看到错误码的数值和注释。


grep:驱动开发核心用法 + 高频参数

内核源码目录深、文件多,grep 的这几个参数是驱动开发必备,一定要记牢:

1. 核心参数(开发必背)

  • -r:递归搜索子目录(搜内核必用)
  • -n:显示行号(方便 vim 直接跳转)
  • -w:全词匹配(避免误匹配)
  • -A n:显示后 n 行(看结构体/函数定义)
  • -B n:显示前 n 行(看上下文)
  • -C n:显示前后 n 行(最常用)
  • --include=".c" / --include=".h":只搜指定类型文件
  • -i:忽略大小写
  • -l:只显示匹配文件名

2. 驱动开发经典搜索场景

场景1:找内核 API 声明 & 实现

# 找声明(头文件)
grep -r "int devm_request_irq" --include="*.h" include/linux/

# 找实现(C 文件)
grep -r "devm_request_irq" --include="*.c" drivers/base/

场景2:找参考驱动(I2C / 平台驱动)

# 找 I2C 驱动
grep -r "i2c_driver" drivers/i2c/ --include="*.c" | head -30

# 找设备树匹配表
grep -A 10 "of_match_table" drivers/ --include="*.c" | grep -B 10 "compatible"

场景3:查设备树属性

# RV1126 摄像头设备树
grep -r "camera" arch/arm/boot/dts/rockchip/

# reg 属性
grep -A 5 "reg" include/linux/of.h

场景4:查错误码 & 宏

grep -w "E[A-Z]+" include/uapi/asm-generic/errno-base.h
grep -r "GPIO_" include/linux/gpio/

驱动开发高效小技巧(grep 组合使用)

1. grep + find(更快更精准)

find drivers/ -name "*.c" -o -name "*.h" | xargs grep -n "struct platform_driver"

2. grep + vim(直接跳转到代码行)

grep -n "devm_kzalloc" drivers/base/devres.c
vim +1234 drivers/base/devres.c

3. grep -v 排除干扰文件

grep -r "i2c_driver" drivers/i2c/ | grep -v ".o$"

4. grep + cscope 搭配使用

grep 适合模糊搜索、批量找参考; cscope 适合精准跳转定义,两者搭配效率最高。


总结

grep 是 Linux 内核驱动开发的 “第一工具” —— 它能帮你快速定位 API、结构体、设备树属性和参考代码, 不用再在嵌套几十层的源码里瞎翻。

记住常用的:

  • -r 递归
  • -n 行号
  • -w 全词
  • -C 上下文
  • --include 指定文件类型

再配合 find 和 vim,能让你的 RV1126b 驱动开发效率直接起飞!

grep 的大致用法就讲到这里, 大家有什么在内核驱动开发中用 grep 的经典场景或小技巧,欢迎在评论区交流~

最新文章

随机文章