模块 1:NFS 网络文件系统(主机 Ubuntu ↔ ARM 开发板文件互通)
1. 基础环境固定信息
- 本机 Ubuntu IP:
192.168.46.121 - 本机共享目录:
/NFS,目录下仅存在文件夹1
2. 完整安装、配置、启停指令(Ubuntu 主机端)
-
安装 NFS 服务端
sudo apt update
sudo apt install nfs-kernel-server -
创建共享目录并授权权限
sudo mkdir -p /NFS
sudo chmod 777 /NFS
sudo chown nobody:nogroup /NFS -
修改核心配置文件
/etc/exportssudo vim /etc/exports
写入配置(伪根+nohide参数,允许局域网所有设备读写)
/NFS *(rw,sync,no_subtree_check,all_squash,anonuid=65534,anongid=65534,nohide,fsid=0)
参数逐条解释:
rw:开发板读写权限;ro只读sync:同步写入,数据落盘后返回,防止文件损坏all_squash:所有客户端访问映射为匿名用户 nobody,解决权限报错nohide:嵌套子目录对外可见,不加该参数/NFS/1挂载后看不到fsid=0:伪根机制,限制客户端仅能访问/NFS内部,无法跳转到主机/etc、/home等系统目录
-
重载配置、启停 NFS 服务指令
重新加载exports配置,无需重启服务
sudo exportfs -arv
查看当前生效共享目录
exportfs -v
停止/启动/重启服务
sudo systemctl stop nfs-kernel-server
sudo systemctl start nfs-kernel-server
sudo systemctl restart nfs-kernel-server设置开机自启
sudo systemctl enable nfs-kernel-server
查看服务运行状态
sudo systemctl status nfs-kernel-server
-
防火墙放行 NFS 端口(如开启 ufw)
sudo ufw allow nfs
sudo ufw reload
3. 嵌入式开发板挂载指令(ARM Linux 端)
# 临时挂载(重启失效)
mount -t nfs 192.168.46.121:/NFS /mnt/nfs -o nolock
# 永久挂载(写入/etc/fstab,开机自动挂载)
192.168.46.121:/NFS /mnt/nfs nfs defaults,nolock 0 0
挂载参数 -o nolock:嵌入式设备无文件锁服务,必须加,否则挂载卡死
4. 高频故障 & 排错指令
-
开发板提示
Permission denied- 排错:检查 exports
all_squash参数、目录权限 777、主机防火墙
- 排错:检查 exports
-
挂载后看不到
/NFS/1子文件夹- 修复:配置增加
nohide参数,执行exportfs -arv重载
- 修复:配置增加
-
挂载超时连接失败
- 排查网络连通:
ping 192.168.46.121;检查主机 NFS 服务是否 running
- 排查网络连通:
-
查看 NFS 服务日志
journalctl -u nfs-kernel-server -f
模块 2:Samba 跨 Windows ↔ Ubuntu 文件共享
1. 全套安装配置指令
1.安装服务
sudo apt install samba samba-common-bin
2.备份配置文件,编辑 /etc/samba/smb.conf
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
sudo vim /etc/samba/smb.conf
3.共享段配置示例(共享 /NFS 目录给 Windows)
[share]
path = /NFS
browseable = yes
read only = no
writable = yes
guest ok = no
create mask = 0777
directory mask = 0777
4.创建 Samba 独立账号(必须为系统已存在用户)
sudo smbpasswd -a 你的用户名
# 删除samba账号
sudo smbpasswd -x 用户名
5.重载配置、启停服务
# 校验配置语法是否错误
testparm
# 重启服务
sudo systemctl restart smbd nmbd
sudo systemctl enable smbd nmbd
# 查看状态
sudo systemctl status smbd
2. Windows 访问方式
文件资源管理器地址栏输入:\\192.168.46.121\share,输入 samba 账号密码登录
3. 常见故障
- Windows 无法发现主机:确保
nmbd服务正常运行;关闭双方防火墙 - 无写入权限:配置
writable=yes,本地目录权限 777
模块 3:VNC 远程图形桌面(无显示器远程操控 Ubuntu)
1. 安装 + 启动全套指令
# 安装vnc服务端
sudo apt install tigervnc-standalone-server
# 设置VNC访问密码
vncpasswd
# 启动vnc服务(:1 对应5901端口)
vncserver :1 -geometry 1920x1080
# 关闭指定桌面会话
vncserver -kill :1
2. systemd 托管 VNC 服务(开机自启)
编写 /etc/systemd/system/vncserver@.service 服务单元文件
[Unit]
Description=VNC Remote Desktop
After=network.target
[Service]
User=你的用户名
ExecStart=/usr/bin/vncserver %i -geometry 1920x1080
ExecStop=/usr/bin/vncserver -kill %i
[Install]
WantedBy=multi-user.target
托管指令:
sudo systemctl daemon-reload
sudo systemctl enable --now vncserver@1
3. 客户端连接
Windows/VNC Viewer 输入地址:192.168.46.121:5901
4. 故障排查
- 连接黑屏:修改 vnc 启动脚本加载桌面环境;查看日志
journalctl -u vncserver@1 -f - 端口占用:
vncserver -kill :1杀掉旧会话重启
模块 4:Git 版本控制
1. 核心概念
- remote/upstream:双远程仓库管理,origin 本地仓库,upstream 上游官方源码仓库
- Git 子模块:项目嵌套依赖第三方源码仓库,单独管理版本
2. 高频操作流程 + 配套指令
-
远程仓库配置
添加上游仓库
git remote add upstream 仓库地址
查看全部远程仓库
git remote -v
拉取上游最新代码
git fetch upstream
合并上游代码到本地master分支
git merge upstream/master
切换分支
git checkout master
2.子模块完整同步流程(嵌入式项目高频)
# 首次拉取包含子模块的项目
git clone 仓库地址 --recursive
# 已有项目,补全初始化子模块代码
git submodule update --init --recursive
# 更新所有子模块到上游最新版本
git submodule update --remote
# 单独进入子模块目录操作
cd 子模块文件夹 && git pull
3.基础提交推送流程
git add .
git commit -m "提交注释"
git push origin master
git pull origin master
# 查看提交日志
git log --oneline
# 撤销未提交修改
git checkout -- .
3. 踩坑故障
- 子模块代码为空:克隆未加
--recursive,未执行 submodule update 初始化 - 上游仓库代码不同步:未配置 upstream 远程,fetch 拉取不到官方更新
- 分支冲突:合并上游代码产生代码冲突,需手动编辑冲突文件后重新 add/commit
模块 5:CMake 嵌入式项目编译构建(补充完整指令、CMake 代码片段)
1. 完整编译流程指令
# 1. 创建独立编译目录,隔离源码
mkdir build && cd build
# 2. 读取上级CMakeLists.txt生成Makefile
cmake ..
# 3. 多线程编译(-j后填CPU核心数,加速编译)
make -j8
# 4. 清理编译产物
make clean
# 5. 重新完整构建
rm -rf build && mkdir build && cd build && cmake .. && make -j8
2. 嵌入式关键 CMakeLists.txt 片段(Protobuf/Grpc 依赖解决)
# 指定交叉编译工具链
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
# 配置第三方库头文件路径
include_directories(
${PROJECT_SOURCE_DIR}/include
/opt/protobuf/include
/opt/grpc/include
)
# 链接库文件路径
link_directories(
/opt/protobuf/lib
/opt/grpc/lib
)
# 链接依赖库
target_link_libraries(你的可执行文件 protobuf grpc++)
3. 高频编译报错 & 解决方案
protobuf/xxx.h: No such file or directory原因:CMake 未配置 include 头文件路径,补充include_directories()undefined reference to protobuf函数原因:未链接库文件,补充target_link_libraries- 交叉编译生成 x86 程序:未指定 arm 交叉编译器,添加 CMAKE_C/CXX_COMPILER 配置
模块 6:systemd 系统服务管理
1. systemd 核心通用指令
# 重新加载所有service单元文件(修改服务配置后必执行)
sudo systemctl daemon-reload
# 启停/重启服务
sudo systemctl start 服务名
sudo systemctl stop 服务名
sudo systemctl restart 服务名
# 设置开机自启/取消开机自启
sudo systemctl enable 服务名
sudo systemctl disable 服务名
# 启动+开机自启一步执行
sudo systemctl enable --now 服务名
# 查看服务运行状态、报错
sudo systemctl status 服务名
# 实时打印服务日志
journalctl -u 服务名 -f
# 查看系统全部运行中的服务
systemctl list-units --type=service
# 查看开机自启服务列表
systemctl list-unit-files --type=service
2. 自定义后台服务单元文件模板(xxx.service,存放路径 /etc/systemd/system/)
[Unit]
# 服务描述
Description=嵌入式后台业务服务
# 网络就绪后再启动
After=network.target nfs-kernel-server.service
# 依赖服务启动
Wants=nfs-kernel-server
[Service]
# 运行用户
User=root
# 程序绝对路径
ExecStart=/opt/app/main
# 进程崩溃自动重启
Restart=always
# 重启间隔秒数
RestartSec=3
# 进程退出信号
KillSignal=SIGINT
[Install]
# 开机多用户模式下启动
WantedBy=multi-user.target
3. 嵌入式常用 systemd 服务示例
NFS、Samba、VNC、自定义设备业务程序均使用 systemd 托管,统一启停、日志查看、开机自启。
模块 7:Ubuntu 内核降级操作(完整步骤 + 指令)
-
查看当前内核、可安装内核列表
uname -r
apt search linux-image | grep amd64
2.安装指定版本内核镜像 + 头文件
sudo apt install linux-image-5.15.0-xx-generic linux-headers-5.15.0-xx-generic
3.修改 grub 启动项,默认使用降级内核
sudo vim /etc/default/grub
# 修改配置
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.15.0-xx-generic"
GRUB_SAVEDEFAULT=true
# 更新grub引导
sudo update-grub
# 重启生效
sudo reboot
4.重启后验证内核版本
uname -r
故障:降级后无法启动
- 修复:开机长按 Shift 调出 grub 菜单,手动选择旧内核启动,重新核对 grub 配置
模块 8:交叉编译工具链(ARM 嵌入式编译)
1. 工具链安装指令
# 安装ARM Linux交叉编译器
sudo apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
# 验证工具链是否可用
arm-linux-gnueabihf-gcc -v
2. 单文件交叉编译指令
# 编译arm架构可执行程序
arm-linux-gnueabihf-gcc main.c -o app_arm
# 验证程序架构(确认是ARM,而非x86)
file app_arm
3. CMake 交叉编译配套
在 CMakeLists 内指定交叉编译器,或编译时传参:
cmake .. -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++
4. 部署流程
交叉编译生成 arm 程序 → NFS 共享目录存放 → 开发板挂载 NFS 直接运行
模块 10:嵌入式技术栈清单
- 编程语言:C、C++
- 硬件架构:ARM
- 图形界面:Qt
- 厂商 SDK:NX-SDK
- 通信组件:Protobuf、Grpc
- 操作系统:Ubuntu PC、嵌入式 Linux 设备