shell 命令
- [1. 基础文件操作命令](#1. 基础文件操作命令)
-
- [1.1 `ls` - 列出目录内容](#1.1
ls
- 列出目录内容) - [1.2 `find` - 文件搜索](#1.2
find
- 文件搜索)
- [1.1 `ls` - 列出目录内容](#1.1
- [2. 版本控制命令](#2. 版本控制命令)
-
- [2.1 `git` - 版本控制系统](#2.1
git
- 版本控制系统) - [2.2 高级 Git 操作](#2.2 高级 Git 操作)
- [2.1 `git` - 版本控制系统](#2.1
- [3. 文本搜索命令](#3. 文本搜索命令)
-
- [3.1 `grep` - 文本搜索](#3.1
grep
- 文本搜索) - [3.2 高级搜索技巧](#3.2 高级搜索技巧)
- [3.1 `grep` - 文本搜索](#3.1
- [4. Android 构建系统命令](#4. Android 构建系统命令)
-
- [4.1 `source` - 加载环境变量](#4.1
source
- 加载环境变量) - [4.2 `lunch` - 选择构建目标](#4.2
lunch
- 选择构建目标) - [4.3 `m` - Android 构建命令](#4.3
m
- Android 构建命令)
- [4.1 `source` - 加载环境变量](#4.1
- [5. 目录操作命令](#5. 目录操作命令)
-
- [5.1 `cd` - 切换目录](#5.1
cd
- 切换目录)
- [5.1 `cd` - 切换目录](#5.1
- [6. 完整的项目开发工作流](#6. 完整的项目开发工作流)
-
- [6.1 日常开发流程](#6.1 日常开发流程)
- [6.2 调试和问题排查流程](#6.2 调试和问题排查流程)
- [7. 高级技巧和最佳实践](#7. 高级技巧和最佳实践)
-
- [7.1 自动化脚本示例](#7.1 自动化脚本示例)
- [7.2 常用别名设置](#7.2 常用别名设置)
- [7.3 监控和日志分析](#7.3 监控和日志分析)
- [8. 故障排除指南](#8. 故障排除指南)
-
- [8.1 常见问题解决](#8.1 常见问题解决)
- [8.2 性能优化](#8.2 性能优化)
- [9. 项目特定命令详解](#9. 项目特定命令详解)
-
- [9.1 固件查找命令](#9.1 固件查找命令)
- [9.2 构建产物管理](#9.2 构建产物管理)
- [9.3 源代码分析](#9.3 源代码分析)
- [10. 开发环境配置](#10. 开发环境配置)
-
- [10.1 环境变量设置](#10.1 环境变量设置)
- [10.2 工具链配置](#10.2 工具链配置)
- [11. 版本控制和协作](#11. 版本控制和协作)
-
- [11.1 分支管理策略](#11.1 分支管理策略)
- [11.2 代码审查流程](#11.2 代码审查流程)
- [12. 构建和部署](#12. 构建和部署)
-
- [12.1 自动化构建脚本](#12.1 自动化构建脚本)
- [12.2 部署脚本](#12.2 部署脚本)
- [13. 总结](#13. 总结)
-
- [13.1 关键要点](#13.1 关键要点)
- [13.2 最佳实践](#13.2 最佳实践)
1. 基础文件操作命令
1.1 ls
- 列出目录内容
基本用法:
bash
ls # 列出当前目录文件
ls -la # 列出所有文件(包括隐藏文件)的详细信息
ls -lh # 以人类可读格式显示文件大小
ls -lt # 按修改时间排序
ls -R # 递归列出子目录内容
项目场景应用:
bash
# 查看项目根目录结构
ls -la /home/share/primary/b2_dev/sportcamera/
# 查看构建输出目录
ls -lh out/target/product/*/
# 查看源代码目录
ls -R src/
1.2 find
- 文件搜索
基本用法:
bash
find . -name "*.c" # 查找所有.c文件
find . -type f -name "*.h" # 查找所有.h文件
find . -mtime -7 # 查找7天内修改的文件
find . -size +100M # 查找大于100MB的文件
find . -exec grep -l "pattern" {} \; # 在文件中搜索内容
项目场景应用:
bash
# 查找固件文件
find . -name "*.bin" -o -name "*.img"
# 查找配置文件
find . -name "*.conf" -o -name "*.config"
# 查找特定模块的源文件
find . -path "*/kernel/*" -name "*.c"
# 查找最近修改的构建文件
find out/ -type f -mtime -1
2. 版本控制命令
2.1 git
- 版本控制系统
基本用法:
bash
git status # 查看工作区状态,显示哪些文件被修改、添加或删除
git diff # 查看未提交的修改,显示工作区与暂存区的差异
git log # 查看提交历史,显示所有提交记录
git branch # 查看分支列表,显示本地分支
git checkout <branch> # 切换分支,切换到指定的分支
git add . # 添加所有文件到暂存区,准备提交
git commit -m "message" # 提交更改,将暂存区的更改提交到本地仓库
git pull # 拉取远程更新,从远程仓库获取最新代码
git push # 推送到远程仓库,将本地提交推送到远程
项目场景应用:
bash
# 查看当前工作状态
git status # 检查哪些文件被修改,哪些文件已暂存
git diff HEAD~1 # 查看与上次提交的差异,比较当前工作区与上一次提交
# 分支管理
git branch -a # 查看所有分支(包括远程),显示本地和远程分支列表
git checkout -b feature/new-module # 创建并切换到新分支,用于开发新功能
git merge develop # 合并develop分支,将develop分支的更改合并到当前分支
# 提交工作
git add . # 将所有修改的文件添加到暂存区
git commit -m "feat: add new camera module support" # 提交更改并添加描述信息
git push origin feature/new-module # 将本地分支推送到远程仓库
2.2 高级 Git 操作
bash
# 查看文件历史
git log --follow -- filename.c # 查看特定文件的完整修改历史,包括重命名
# 查看特定提交的详细信息
git show <commit-hash> # 显示指定提交的详细信息和文件变更
# 撤销最后一次提交
git reset --soft HEAD~1 # 撤销最后一次提交,但保留修改在暂存区
# 查看分支图
git log --graph --oneline --all # 以图形方式显示分支和提交历史
# 暂存当前工作
git stash # 暂存当前工作区的修改,保存到临时区域
git stash pop # 恢复之前暂存的工作,从临时区域恢复修改
3. 文本搜索命令
3.1 grep
- 文本搜索
基本用法:
bash
grep "pattern" file.txt # 在文件中搜索指定模式
grep -r "pattern" directory/ # 递归搜索目录中的所有文件
grep -n "pattern" file.txt # 显示行号,显示匹配行的行号
grep -i "pattern" file.txt # 忽略大小写,不区分大小写搜索
grep -v "pattern" file.txt # 反向匹配,显示不匹配的行
grep -l "pattern" *.c # 只显示文件名,只显示包含匹配的文件名
项目场景应用:
bash
# 搜索配置相关代码
grep -nr "configure" src/ # 递归搜索src目录中所有包含"configure"的文件
grep -r "CONFIG_" . --include="*.c" --include="*.h" # 搜索所有.c和.h文件中的CONFIG_定义
# 搜索错误处理代码
grep -r "error\|ERROR" src/ # 搜索所有包含error或ERROR的文件
# 搜索特定函数定义
grep -r "function_name" . --include="*.c" # 搜索特定函数的定义
# 搜索调试信息
grep -r "DEBUG\|debug" . --include="*.c" # 搜索所有调试相关的代码
3.2 高级搜索技巧
bash
# 使用正则表达式搜索
grep -E "pattern1|pattern2" file.txt # 使用扩展正则表达式,匹配多个模式
# 搜索并显示上下文
grep -A 3 -B 3 "pattern" file.txt # 显示匹配行前后3行的上下文
# 排除特定目录
grep -r "pattern" . --exclude-dir=build # 搜索时排除build目录
# 统计匹配次数
grep -c "pattern" file.txt # 统计文件中匹配模式的行数
4. Android 构建系统命令
4.1 source
- 加载环境变量
基本用法:
bash
source build_envsetup.sh # 加载构建环境,执行脚本并设置环境变量
source build/envsetup.sh # 加载Android构建环境,设置Android构建相关变量
source ~/.bashrc # 重新加载bash配置,刷新shell环境变量
项目场景应用:
bash
# 完整的构建环境设置流程
cd /home/share/primary/b2_dev/sportcamera # 切换到项目目录
source build_envsetup.sh # 加载项目特定的构建环境
source build/envsetup.sh # 加载Android标准构建环境
export PATH=$PATH:/path/to/tools # 添加工具路径到环境变量
export ANDROID_BUILD_TOP=$(pwd) # 设置Android构建根目录
4.2 lunch
- 选择构建目标
基本用法:
bash
lunch 10 # 选择目标10,选择预定义的构建目标
lunch # 交互式选择目标,显示所有可用目标供选择
lunch aosp_arm64-eng # 选择特定目标,直接指定构建目标
项目场景应用:
bash
# 查看可用目标
lunch # 显示所有可用的构建目标列表
# 选择开发目标
lunch 10 # 选择目标10,通常对应aosp_arm64-eng开发版本
# 验证选择
echo $TARGET_PRODUCT # 显示当前选择的目标产品
echo $TARGET_BUILD_VARIANT # 显示当前选择的构建变体
4.3 m
- Android 构建命令
基本用法:
bash
m clean_all # 清理所有构建产物,删除所有编译生成的文件
m all # 构建所有模块,编译整个系统
m release # 构建发布版本,生成优化后的发布版本
m -j8 # 使用8个线程构建,并行编译提高速度
m module_name # 构建特定模块,只编译指定的模块
项目场景应用:
bash
# 完整的构建流程
m clean_all # 清理之前的构建产物,确保干净的构建环境
m all # 完整构建,编译所有必要的模块
m release # 构建发布版本,生成最终的产品镜像
# 增量构建
m -j$(nproc) # 使用所有CPU核心,最大化并行编译效率
m module_name -j4 # 构建特定模块,使用4个线程编译指定模块
# 调试构建
m DEBUG=1 all # 启用调试信息,编译时包含调试符号
5. 目录操作命令
5.1 cd
- 切换目录
基本用法:
bash
cd /path/to/directory # 切换到指定目录,改变当前工作目录
cd .. # 返回上级目录,移动到父目录
cd ~ # 返回家目录,移动到用户主目录
cd - # 返回上次访问的目录,在最近两个目录间切换
项目场景应用:
bash
# 项目导航
cd /home/share/primary/b2_dev/sportcamera # 切换到项目根目录
cd src/ # 进入源代码目录
cd kernel/ # 进入内核源码目录
cd drivers/camera/ # 进入摄像头驱动目录
6. 完整的项目开发工作流
6.1 日常开发流程
bash
# 1. 进入项目目录
cd /home/share/primary/b2_dev/sportcamera # 切换到项目工作目录
# 2. 检查Git状态
git status # 查看当前工作区状态,检查哪些文件被修改
git diff # 查看未提交的修改,显示具体的代码变更
# 3. 更新代码
git pull origin develop # 从远程develop分支拉取最新代码
# 4. 设置构建环境
source build_envsetup.sh # 加载项目构建环境变量
source build/envsetup.sh # 加载Android标准构建环境
lunch 10 # 选择构建目标10
# 5. 清理并构建
m clean_all # 清理之前的构建产物
m all # 完整构建项目
# 6. 查找构建产物
find . -name "*.bin" -o -name "*.img" # 查找生成的固件和镜像文件
# 7. 提交更改
git add . # 将所有修改添加到暂存区
git commit -m "feat: update camera module" # 提交更改并添加描述
git push origin feature/camera-update # 推送到远程分支
6.2 调试和问题排查流程
bash
# 1. 检查构建错误
m all 2>&1 | tee build.log # 构建项目并将输出保存到日志文件
# 2. 搜索错误信息
grep -i "error" build.log # 在构建日志中搜索错误信息
grep -i "warning" build.log # 在构建日志中搜索警告信息
# 3. 查找相关源文件
find . -name "*.c" -exec grep -l "function_name" {} \; # 查找包含特定函数的源文件
# 4. 检查配置文件
grep -r "CONFIG_" . --include="*.config" # 搜索所有配置文件中的配置项
# 5. 查看文件修改历史
git log --follow -- filename.c # 查看特定文件的完整修改历史
7. 高级技巧和最佳实践
7.1 自动化脚本示例
bash
#!/bin/bash
# build_and_test.sh
set -e # 遇到错误立即退出,确保脚本在出错时停止执行
echo "Starting build process..."
# 设置环境
cd /home/share/primary/b2_dev/sportcamera # 切换到项目目录
source build_envsetup.sh # 加载构建环境
source build/envsetup.sh # 加载Android构建环境
lunch 10 # 选择构建目标
# 清理构建
echo "Cleaning previous build..."
m clean_all # 清理之前的构建产物
# 构建项目
echo "Building project..."
m all -j$(nproc) # 使用所有CPU核心进行构建
# 查找构建产物
echo "Finding build artifacts..."
find . -name "*.bin" -o -name "*.img" # 查找生成的固件文件
# 检查构建状态
if [ $? -eq 0 ]; then # 检查构建是否成功
echo "Build completed successfully!"
else
echo "Build failed!"
exit 1 # 构建失败时退出脚本
fi
7.2 常用别名设置
bash
# 添加到 ~/.bashrc
alias ll='ls -la' # 显示所有文件的详细信息
alias la='ls -A' # 显示所有文件(包括隐藏文件)
alias l='ls -CF' # 以列格式显示文件
# 项目相关别名
alias cdproj='cd /home/share/primary/b2_dev/sportcamera' # 快速切换到项目目录
alias build='source build_envsetup.sh && source build/envsetup.sh && lunch 10' # 一键设置构建环境
alias clean='m clean_all' # 快速清理构建
alias makeall='m all -j$(nproc)' # 快速构建所有模块
alias gs='git status' # 快速查看Git状态
alias gl='git log --oneline' # 快速查看提交历史
7.3 监控和日志分析
bash
# 监控构建过程
watch -n 5 'ps aux | grep make' # 每5秒监控make进程状态
# 分析构建日志
grep -E "(error|warning|failed)" build.log | head -20 # 提取前20个错误或警告
# 查看磁盘使用情况
du -sh out/ # 查看构建输出目录的大小
df -h # 查看磁盘空间使用情况
# 监控系统资源
top -p $(pgrep make) # 监控make进程的系统资源使用
8. 故障排除指南
8.1 常见问题解决
bash
# 构建失败时的诊断步骤
echo "=== 系统信息 ==="
uname -a # 显示系统内核信息
df -h # 显示磁盘空间使用情况
free -h # 显示内存使用情况
echo "=== 构建环境 ==="
echo $ANDROID_BUILD_TOP # 显示Android构建根目录
echo $TARGET_PRODUCT # 显示目标产品
echo $TARGET_BUILD_VARIANT # 显示构建变体
echo "=== 最近错误 ==="
tail -50 build.log # 显示构建日志的最后50行
echo "=== 磁盘空间 ==="
du -sh out/ # 显示构建输出目录大小
8.2 性能优化
bash
# 并行构建优化
export MAKEFLAGS="-j$(nproc)" # 设置make使用所有CPU核心
# 缓存优化
export CCACHE_DIR=/path/to/ccache # 设置ccache缓存目录
export USE_CCACHE=1 # 启用ccache编译缓存
# 内存优化
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g" # 设置Jack编译服务器内存参数
9. 项目特定命令详解
9.1 固件查找命令
bash
find -name Insta360X4AirFW.bin # 查找特定的固件文件
find . -name "*.bin" -type f # 查找所有二进制固件文件
find . -name "*FW*" -type f # 查找所有包含FW的固件文件
find . -path "*/firmware/*" -name "*.bin" # 在firmware目录中查找固件
9.2 构建产物管理
bash
# 查找所有构建产物
find out/ -name "*.img" -o -name "*.bin" -o -name "*.zip" # 查找所有镜像和固件文件
# 按时间排序查看最新构建产物
find out/ -name "*.img" -printf "%T@ %p\n" | sort -n | tail -10 # 显示最近修改的10个镜像文件
# 统计构建产物大小
find out/ -name "*.img" -exec ls -lh {} \; # 显示所有镜像文件的大小
9.3 源代码分析
bash
# 查找特定功能的源代码
grep -r "camera" src/ --include="*.c" --include="*.h" # 搜索摄像头相关代码
# 查找函数定义
grep -r "^[[:space:]]*[a-zA-Z_][a-zA-Z0-9_]*[[:space:]]*(" src/ --include="*.c" # 查找所有函数定义
# 查找宏定义
grep -r "^[[:space:]]*#define" src/ --include="*.h" # 查找所有宏定义
10. 开发环境配置
10.1 环境变量设置
bash
# 设置项目环境变量
export PROJECT_ROOT=/home/share/primary/b2_dev/sportcamera # 设置项目根目录
export PATH=$PROJECT_ROOT/tools:$PATH # 添加项目工具到PATH
export ANDROID_BUILD_TOP=$PROJECT_ROOT # 设置Android构建根目录
# 设置编译环境
export ARCH=arm64 # 设置目标架构
export CROSS_COMPILE=aarch64-linux-gnu- # 设置交叉编译工具链
export KERNEL_DIR=$PROJECT_ROOT/kernel # 设置内核源码目录
10.2 工具链配置
bash
# 检查工具链可用性
which aarch64-linux-gnu-gcc # 检查交叉编译工具链
which make # 检查make工具
which git # 检查git版本控制工具
# 设置工具链路径
export TOOLCHAIN_PATH=/opt/toolchain/aarch64-linux-gnu # 设置工具链路径
export PATH=$TOOLCHAIN_PATH/bin:$PATH # 添加工具链到PATH
11. 版本控制和协作
11.1 分支管理策略
bash
# 创建功能分支
git checkout -b feature/camera-module # 创建摄像头模块功能分支
git push -u origin feature/camera-module # 推送并设置上游分支
# 合并代码
git checkout develop # 切换到开发分支
git pull origin develop # 拉取最新代码
git merge feature/camera-module # 合并功能分支
git push origin develop # 推送合并结果
# 清理分支
git branch -d feature/camera-module # 删除本地分支
git push origin --delete feature/camera-module # 删除远程分支
11.2 代码审查流程
bash
# 准备代码审查
git diff develop...HEAD # 查看与develop分支的差异
git log --oneline develop..HEAD # 查看提交历史
# 创建补丁
git format-patch develop -o patches/ # 创建补丁文件
git send-email patches/ # 发送补丁邮件
# 应用补丁
git am patches/*.patch # 应用补丁文件
12. 构建和部署
12.1 自动化构建脚本
bash
#!/bin/bash
# auto_build.sh
# 设置错误处理
set -e
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
# 构建函数
build_project() {
log "Starting project build..."
# 设置环境
cd /home/share/primary/b2_dev/sportcamera
source build_envsetup.sh
source build/envsetup.sh
lunch 10
# 清理构建
log "Cleaning previous build..."
m clean_all
# 构建项目
log "Building project..."
m all -j$(nproc)
# 查找构建产物
log "Finding build artifacts..."
find . -name "*.bin" -o -name "*.img"
log "Build completed successfully!"
}
# 执行构建
build_project
12.2 部署脚本
bash
#!/bin/bash
# deploy.sh
# 部署函数
deploy_firmware() {
local firmware_path="$1"
local target_device="$2"
echo "Deploying firmware: $firmware_path to $target_device"
# 检查文件是否存在
if [ ! -f "$firmware_path" ]; then
echo "Error: Firmware file not found: $firmware_path"
exit 1
fi
# 复制固件到目标设备
scp "$firmware_path" "$target_device:/tmp/"
# 在目标设备上安装固件
ssh "$target_device" "sudo dd if=/tmp/$(basename $firmware_path) of=/dev/mmcblk0 bs=4M"
echo "Firmware deployment completed!"
}
# 使用示例
deploy_firmware "./out/target/product/device/firmware.bin" "user@device-ip"
13. 总结
这些命令和脚本构成了一个完整的嵌入式Linux项目开发工作流,涵盖了从代码管理到构建部署的各个环节。每个命令都有详细的注释说明其作用和用途,帮助开发者更好地理解和使用这些工具。
13.1 关键要点
- 版本控制:使用Git进行代码管理,包括分支管理、代码审查和协作
- 构建系统:使用Android构建系统进行项目编译和打包
- 调试工具:使用grep、find等工具进行代码搜索和问题排查
- 自动化:编写脚本自动化构建和部署流程
- 环境管理:正确设置开发环境和工具链
13.2 最佳实践
- 定期提交代码,保持版本历史的清晰
- 使用有意义的分支名和提交信息
- 在构建前清理环境,确保构建的一致性
- 使用并行编译提高构建效率
- 保存构建日志用于问题排查
- 定期备份重要的构建产物
通过掌握这些命令和技巧,开发者可以更高效地进行嵌入式Linux项目的开发和维护工作。