You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BeagleBone Black开发板上优先将文件保存至SD卡?

嘿,我给你整理了一套完整的实现方案,刚好匹配你在BeagleBone Black上的需求——有SD卡就把数据存到卡上,没卡就存当前目录:

实现步骤详解

1. 写个自动检测+挂载的Shell脚本

咱们先搞个shell脚本,自动完成SD卡检测、挂载(如果需要),然后确定数据保存路径。直接复制下面的代码存成save_data.sh就行:

#!/bin/bash

# 定义SD卡分区和挂载点,BBB的SD卡一般就是mmcblk0p1
SD_PART="/dev/mmcblk0p1"
SD_MOUNT="/mnt/sdcard"
CURRENT_DIR=$(pwd)

# 检测SD卡是否存在
if fdisk -l | grep -q "$SD_PART"; then
    # 先检查挂载点文件夹有没有,没有就创建
    if [ ! -d "$SD_MOUNT" ]; then
        sudo mkdir -p "$SD_MOUNT"
    fi
    # 再检查SD卡是不是已经挂载了
    if ! mount | grep -q "$SD_MOUNT"; then
        sudo mount "$SD_PART" "$SD_MOUNT"
        # 怕挂载失败,加个降级方案:挂不上就用当前目录
        if [ $? -ne 0 ]; then
            SAVE_DIR="$CURRENT_DIR"
        else
            SAVE_DIR="$SD_MOUNT"
        fi
    else
        SAVE_DIR="$SD_MOUNT"
    fi
else
    # 没检测到SD卡,直接用当前目录
    SAVE_DIR="$CURRENT_DIR"
fi

# 这里替换成你实际要写入的数据,比如从传感器读来的内容
echo "`date`: 采集到的样本数据" >> "$SAVE_DIR/data_log.txt"

# 要是你写完数据想立刻卸载SD卡,可以解开下面这行注释,不过一般保持挂载更方便
# sudo umount "$SD_MOUNT"

2. 给脚本设置权限,避免每次输密码

因为脚本里用到了sudo,总输密码太麻烦,咱们搞定权限问题:

  • 先给脚本加执行权限:chmod +x save_data.sh
  • 要是想彻底不用输密码,编辑sudoers文件:sudo visudo,然后加一行(把debian换成你的BBB用户名):
    debian ALL=(ALL) NOPASSWD: /bin/mount, /bin/umount, /bin/mkdir
    

3. 集成到你的应用里(可选)

要是你的数据采集是用Python写的,也可以直接在代码里实现这个逻辑,不用单独跑脚本:

import os
import subprocess

def get_save_path():
    sd_part = "/dev/mmcblk0p1"
    sd_mount = "/mnt/sdcard"
    current_dir = os.getcwd()
    
    # 检测SD卡是否存在
    fdisk_output = subprocess.run(["fdisk", "-l"], capture_output=True, text=True).stdout
    if sd_part in fdisk_output:
        # 创建挂载点(如果需要)
        if not os.path.exists(sd_mount):
            subprocess.run(["sudo", "mkdir", "-p", sd_mount], check=True)
        # 检查是否已挂载
        mount_output = subprocess.run(["mount"], capture_output=True, text=True).stdout
        if sd_mount not in mount_output:
            try:
                subprocess.run(["sudo", "mount", sd_part, sd_mount], check=True)
                return sd_mount
            except subprocess.CalledProcessError:
                # 挂载失败,退回到当前目录
                return current_dir
        else:
            return sd_mount
    else:
        return current_dir

# 调用示例:写入数据到日志文件
save_dir = get_save_path()
with open(os.path.join(save_dir, "sensor_data.txt"), "a") as log_file:
    log_file.write(f"{os.popen('date').read().strip()}: 新增数据\n")

几个关键注意点

  • SD卡格式:确保你的SD卡是BBB支持的格式,比如FAT32或者ext4,不然挂载会失败。如果是FAT32,挂载时可以加权限参数让普通用户能读写:sudo mount -o uid=debian,gid=debian "$SD_PART" "$SD_MOUNT"
  • 开机自动挂载(可选):要是想开机就自动挂载SD卡,编辑/etc/fstab加一行,但要加noauto避免没卡时开机报错:
    /dev/mmcblk0p1 /mnt/sdcard auto noauto,user,rw 0 0
    

内容的提问来源于stack exchange,提问作者Salahuddin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:02:18