Nanopct6SDK问题汇总与解决方案
📋 今日问题汇总与解决方案
🎯 问题概览
今天共遇到 8个主要问题,涉及以下技术领域:
- Git网络配置 (2个问题)
- Shell脚本执行 (1个问题)
- 内核编译 (4个问题)
- 代码调试 (1个问题)
📝 详细问题记录
1. Git网络连接问题 ⚡
问题描述: 无法访问远程Git仓库
fatal: 无法访问 'https://github.com/friendlyarm/kernel-rockchip/':Failed to connect to 192.168.1.120 port 7890 after 3084 ms: 没有到主机的路由
fatal: 无法访问 'https://github.com/friendlyarm/kernel-rockchip/':Failed to connect to 127.0.0.1 port 7890 after 0 ms: 连接被拒绝
fatal: 无法访问 'https://github.com/friendlyarm/kernel-rockchip/':gnutls_handshake() failed: The TLS connection was non-properly terminated
根本原因: 代理配置错误或网络连接问题
解决步骤:
# 1. 检查当前代理设置
git config --global --get http.proxy# 2. 清除错误的代理设置
git config --global --unset http.proxy
git config --global --unset https.proxy# 3. 重新设置正确的代理
git config --global http.proxy http://127.0.0.1:7890
git config --global http.sslVerify false# 4. 测试连接
git fetch origin
学习要点: Git代理配置的重要性,SSL验证的关闭方法
2. Shell脚本执行问题 🔧
问题描述: 脚本无法执行
-bash: ./mk-emmc-image.sh: /bin/bash^M: 错误的解释器: 没有那个文件或目录
: 无效的选项h: 第 2 行: set: -
根本原因: Windows格式的CRLF行结束符
解决步骤:
# 1. 检查文件格式
file mk-emmc-image.sh# 2. 转换单个文件
sed -i 's/\r$//' mk-emmc-image.sh# 3. 批量转换所有文件
find . -type f -exec dos2unix {} \;# 4. 验证转换结果
file mk-emmc-image.sh
学习要点: Windows和Unix行结束符的区别,文件格式转换工具的使用
3. Git克隆权限问题 🔐
问题描述: 使用sudo时无法克隆仓库
fatal: 无法访问 'https://github.com/friendlyarm/r8125/':Failed to connect to github.com port 443 after 136320 ms: 连接超时
根本原因: sudo使用root用户环境,没有配置代理
解决步骤:
# 为root用户设置代理
sudo git config --global http.proxy http://127.0.0.1:7890
sudo git config --global http.sslVerify false# 验证克隆
sudo git clone https://github.com/friendlyarm/r8125
学习要点: 不同用户环境的配置隔离,sudo权限的影响
4. 内核编译权限问题 🛠️
问题描述: 编译时出现权限不足错误
/bin/sh: 1: cannot create include/config/.kernel.release.tmp: Permission denied
根本原因: 文件所有权被sudo操作改变
解决步骤:
# 修改文件所有权
sudo chown -R $(whoami):$(whoami) .
学习要点: Linux文件权限和所有权的概念
5. 内核编译autoconf.h缺失问题 📁
问题描述: 编译时缺少必要的配置文件
fatal error: generated/autoconf.h: 没有那个文件或目录
根本原因: 内核配置不完整或编译环境被污染
解决步骤:
# 1. 清理编译环境
make mrproper# 2. 重新配置内核
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi6_linux_defconfig# 3. 重新编译
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi6-images -j$(nproc)
学习要点: 内核编译的完整流程,配置文件的生成机制
6. 内核编译cryptodev模块权限问题 🔑
问题描述: 编译第三方模块时出现权限错误
mkdir: 无法创建目录 "/home/keqikeji/nanopct6/sd-fuse_rk3588-master/out/cryptodev-linux/.tmp_1415981": 权限不够
根本原因: 输出目录权限不足
解决步骤:
# 修改整个项目目录的权限
sudo chown -R $(whoami):$(whoami) /home/keqikeji/nanopct6/sd-fuse_rk3588-master/out/
学习要点: 第三方模块编译的权限要求
7. Deb包创建权限问题 📦
问题描述: 无法创建deb包文件
dpkg-deb: 错误: 无法创建 ../linux-headers-5.10.160_5.10.160-1_arm64.deb: 权限不够
根本原因: 整个项目目录权限不足
解决步骤:
# 修改整个项目目录的权限
sudo chown -R $(whoami):$(whoami) /home/keqikeji/nanopct6/
学习要点: Deb包创建的权限要求
8. 链表反转算法代码问题 💻
问题描述: test_solution.c
中的链表反转算法出现无限循环
根本原因: 第4步 current = next;
被注释掉,导致指针无法前进
解决步骤:
// 修复前(错误)
// current = next;// 修复后(正确)
current = next;
学习要点: 指针操作的逻辑,算法步骤的完整性
🔧 常用命令速查表
Git操作
git status # 检查状态
git fetch origin # 获取远程更新
git stash # 暂存本地修改
git merge origin/branch # 合并远程分支
git stash pop # 恢复本地修改
git config --global --get http.proxy # 检查代理设置
git config --global --unset http.proxy # 清除代理设置
内核编译
export CROSS_COMPILE=aarch64-linux-gnu- # 设置交叉编译工具链
export ARCH=arm64 # 设置架构
make mrproper # 清理编译环境
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi6_linux_defconfig # 配置内核
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi6-images -j$(nproc) # 编译内核
权限修复
sudo chown -R $(whoami):$(whoami) . # 修改当前目录所有权
sudo chown -R $(whoami):$(whoami) /path/to/directory # 修改指定目录所有权
文件格式转换
file filename # 检查文件格式
sed -i 's/\r$//' filename # 转换单个文件
find . -type f -exec dos2unix {} \; # 批量转换所有文件
📚 创建的文档
- GIT_OPERATION_GUIDE.md - 完整的Git操作指南
- PROJECT_STRUCTURE.md - 项目目录结构说明
- GIT_INDEX.md - Git文档导航索引
- FPGA_Verilog_入门语法.md - Verilog基础语法教程
- 今日问题汇总.md - 本文档
🎯 学习要点总结
技术要点
- 网络配置: Git代理设置的重要性
- 文件格式: Windows和Unix行结束符的区别
- 权限管理: Linux文件权限和所有权的概念
- 编译流程: 内核编译的完整流程和常见问题
- 算法调试: 代码逻辑错误的识别和修复
方法论
- 问题排查: 从网络→权限→配置→代码逻辑的系统化排查方法
- 文档记录: 及时记录问题和解决方案,便于后续参考
- 环境隔离: 不同用户环境(普通用户vs root)的配置差异
- 工具使用: 善用系统工具(file, sed, find等)进行问题诊断和修复
📈 项目进展状态
- ✅ Git操作流程完整记录
- ✅ 内核编译环境配置完成
- ✅ 链表反转算法修复完成
- ✅ 项目文档体系建立
- 🔄 内核编译进行中(遇到权限问题)
- ⏳ 镜像制作待完成
💡 经验总结
- 权限问题是Linux编译的最大障碍 - 80%的编译问题都与权限相关
- 网络配置需要全局考虑 - 不仅要配置普通用户,还要考虑sudo环境
- 文件格式转换是跨平台开发的必备技能 - Windows和Linux的文件格式差异
- 系统化的问题记录方法 - 及时记录问题、原因、解决方案,形成知识库
- 工具链的完整配置 - 内核编译需要完整的环境配置和权限设置
🔮 后续建议
- 创建自动化脚本 - 将常用的权限修复和编译命令脚本化
- 建立环境检查清单 - 编译前检查网络、权限、工具链等
- 完善错误处理机制 - 针对常见错误建立快速修复流程
- 定期更新文档 - 随着项目进展持续更新问题解决方案