gdb
gdbgdb是gcc工具链中的调试器,本身是个命令行的可执行程序,以往我们用vscode、Qt Creator调试程序的时候,底层用的都是gdb工具,不过这些IDE把他的数据给可视化了 1.gdb中常见指令启动与连接 命令 说明 gdb <executable> 启动GDB并加载可执行文件 gdb -p <pid> 附加到正在运行的进程 target remote :<port> 连接远程gdbserver(常用于嵌入式调试) target remote /dev/ttyUSB0 通过串口连接目标板(如ARM开发板) 断点与观察点 命令 说明 break <function> 在函数入口设断点(如 break main) break *<address> 在内存地址设断点(如 break *0x8000) break <file:line> 在指定文件的某一行设断点(如 break driver.c:42) watch...
claudecode
ClaudeCode参考链接:Claude Code 项目目录结构 | 菜鸟教程 避免权限请求使用ClaudeCode时,会发现它总是请求各种命令的权限,非常烦人。可以通过以下方式让他获取所有工具的权限 1claude --allow-dangerously-skip-permissions 基本结构claudecode有多种概念,比如skill、subagents…他们基本上都作为独立的文件存在于对应的目录,Claude Code 会在特定位置查找对应的配置文件 12345678910111213141516171819202122your-project/├── CLAUDE.md ← 团队共享指令,提交到 git├── CLAUDE.local.md ← 个人覆盖,被 git 忽略└── .claude/ ├── settings.json ← 权限 + 配置,提交到 git ├── settings.local.json ← 个人权限,被 git 忽略 ...
git
git使用笔记1.用户初始化12git config --global user.name "Li-Ruiqi"git config --global user.email "1009962019@qq.com" 提交代码时会显示这里配置的user的信息 不加--global也行,就是配置当前仓库 2.提交一个PR12345git checkout -b feature/xxx # 创建新分支并切换# 进行代码修改git add.git commit -m "提交信息"git push origin feature/xxx 3.切换到某个提交(commit) 如果check out到当前最新节点之前的某个节点,修改代码并提交,再切换回最新节点,会发现刚才的commit消失了,并没在该分支中 12345678910# 列出提交历史来找git graph中消失的commitgit log# 或者git reflog#切换git checkout...
软件开发方法论
软件开发方法论企业中的软件开发不是像我之前那样,有个idea就直接开始编码,而是先写好一个完善的文档,其他人照着文档进行开发的。我们在Vibe Coding的时候,最好也用这种方式,把需求边界进行最大程度的约束,这样可以有效提高AI生成代码的可用性,减少返工成本 基本流程:产品需求文档(PRD)—>软件需求规格(SRS)—>系统架构设计(SAD)—>详细设计(SDD)—>编码实现 产品需求文档产品需求文档重点回答三个核心问题: 1.市场上存在什么问题?(市场背景与机会) 2.我们要为谁解决?(目标用户画像) 3.我们要做什么/不做什么?(产品范围与优先级) 产品需求文档的目的与范围: 用于定义项目的市场需求边界,明确立项目标、目标用户、产品范围及阶段性约束,并作为后续软件需求规格(SRS)、系统架构设计和测试规划的输入 产品需求文档的作用: 给所有人建立项目共识,定义好产品、技术的边界
autoconf
Autoconf定义Autoconf是一个自动化构建的CLI工具,用于生成可移植的configure脚本。configure脚本会完成以下事情: 根据configure.ac文件定义的规则,运行时自动检查系统环境:操作系统、编译器、库、函数、头文件、字节序、路径等 根据检测结果及用户输入生成Makefile (通常需要一个Makefile.in 模板,由automake工具提供) 123456789源码目录 ├── configure.ac ├── Makefile.am │ ├─> automake 生成 Makefile.in ├─> autoconf 生成 configure │ ./configure 生成 Makefile(结合 Makefile.in + 系统检测结果) └─> make 编译安装 AutoConf有以下特性: 跨平台性强:自动适配不同 Unix/Linux 系统 减少手动维护:不需要为每个平台写单独...
25 IIO子系统
IIO子系统IIO(Industrial I/O)子系统是Linux中对于类ADC传感器(温湿度、电压、电流、IMU…)数据采集所提供的一个框架 总览在Linux内核中,IIO同样遵循着“驱动”分层的理念,一个完整的IIO设备的驱动可以分为以下几层 iio-core: 提供统一的用户空间接口(/sys/bus/iio/iio:deviceX/和字符设备) 管理IIO子系统的初始化和退出 实现IIO设备的注册与注销机制 定义标准的IIO操作数据结构(iio_info, iio_dev等) iio device driver:这一层直接与硬件交互,是驱动开发者的工作重点 实现iio_info结构体中的回调函数(read_raw, write_raw,...
07 pinctrl子系统
pinctrl子系统pinctrl子系统的作用 获取设备树中 pin 的信息 设置 pin 的复用功能(在6ULL由IOUMXC寄存器控制) 设置 pin 的电气特性,比如上/下拉、速度、驱动能力等 (在6ULL由PAD寄存器控制) 相关寄存器对于引脚的配置,不同平台通常不一样: IMX6ULL使用IOMUXC(Input/Output Muliplexing Controller),和IOMUXC-SNVS寄存器实现引脚复用功能的设置、使用每个GPIO的PAD寄存器进行引脚电气属性的设置 IOMUXC和IOMUXC-SNVS的区别主要在于配置的引脚所属的电源域,前者控制主电源域的引脚,而后者控制SNVS这个独立的电源域的引脚(该电源域用于在系统休眠时维持部分功能) 同一个引脚只能由一个引脚配置模块来配置 使用方法pinctrl子系统的使用通常遵循以下步骤: 1.定义引脚控制组:节点的名字一般以grp结尾 1234567&iomuxc { // LED的引脚控制组 pinctrl_led: ledgrp { //...
18 SPI子系统
...
Makefile
Makefile总览定义:Makefile是一个自动化编译工具,用于定义文件依赖关系与构建规则 Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释 显示规则显式规则说明了,如何生成一个或多的的目标文件。这是由Makefile的书写者明显指出:要生成的目标,目标的依赖文件,生成的命令。其格式如下: 12目标: 依赖文件 命令 # 必须用Tab缩进 make 会检查目标文件的时间戳,若依赖文件比目标新,则重新执行命令 若目标文件已存在且依赖无变化,跳过构建(增量编译) 1.伪目标:用于执行非文件生成的操作(如清理、安装等),需通过 .PHONY 显式声明 12345.PHONY: clean installclean: rm -f *.o appinstall: cp app /usr/local/bin/ 2.默认目标:一个Makefile中可以定义多个目标,当我们使用make命令但不指定具体的目标时,默认生成第一个目标 3.中间文件目标:临时生成的文件(如 .o 文件),可通过 .INTERMEDIATE...
00 常用路径总结
常用路径总结在Linux中,我们如果用apt之类的包管理工具安装些第三方库,他们放置的位置都出奇的一致,下面来总结一下 头文件编译时默认头文件查找目录 /usr/include /usr/include/x86_64-linux-gnu(架构相关的子目录) /usr/local/include(大部分发行版是默认的,但也有的不是) 搜索规则 编译器只维护一组搜索根目录列表 不会递归扫描子目录 会将#include中写出的相对路径与搜索根目录拼接后匹配 例如:#include <foo/bar.h> 会依次尝试: 123/usr/include/foo/bar.h/usr/include/x86_64-linux-gnu/foo/bar.h/usr/local/include/foo/bar.h(如果该路径在默认列表中) 第三方库头文件的组织方式 第三方库通常在搜索根目录下创建以库名命名的子目录 12/usr/include/x86_64-linux-gnu/opencv4/usr/local/include/mylib 使用方式为:#include...







