嵌入式开发板Khadas VIM3挂载SD存储卡到home目录

这篇博客详细介绍了如何在Ubuntu20.04系统中,将插入的SD卡通过A311D NPU芯片的开发板自动挂载到/home目录。首先创建临时挂载点,然后备份并替换原有/home内容,接着设置开机自动挂载,特别提到了根据SD卡类型(如exfat)安装相应软件确保挂载成功,最后重启验证设置。

开发板:khadas VIM3 内置A311D NPU芯片
系统环境:ubuntu20.04

首先,插入SD卡后,系统会自动挂载SD卡到默认目录,为了使用方便,我进行如下操作,将其挂载到home目录

1.挂载临时分区
先在/mnt下新建个文件夹home

cd /mnt/
sudo mkdir home

2.将硬盘挂载到/mnt/home

sudo mount /dev/nvme0n1p1 /mnt/home

查看挂载情况

df -h

4.将临时挂载目录转为原/home目录备份原home目录,将数据复制到临时的/home目录下

sudo cp -a /home/* /mnt/home

5.删除原/home目录下的内容,此时桌面菜单任务栏都会消失不见

sudo 
<think>我们之前讨论了在Linux用户态编写点灯驱动的几种方法(sysfs、内存映射等)。现在用户的问题是:在编写好用户态点灯程序后,如何将程序烧录到嵌入式开发中运行。 根据引用[5]和用户需求,烧录方法主要分为两类:小文件(如编译后的可执行程序)和大文件(如整个系统镜像)。用户编写的点灯程序是编译后的可执行文件(例如`led_user`),属于小文件烧录。 以下是详细步骤: ### 1. **编译程序** 首先在开发主机(如Ubuntu)上使用交叉编译工具链编译程序: ```bash arm-linux-gnueabihf-gcc -o led_user led_user.c ``` 生成可执行文件`led_user`(注意:根据目标架构选择合适的交叉编译器)。 ### 2. **传输程序到开发板** 有几种常用方法将可执行文件传输到开发板: #### a) **TFTP传输**(适合网络启动的子) 1. 在主机搭建TFTP服务器: ```bash sudo apt install tftpd-hpa sudo systemctl restart tftpd-hpa ``` 2. 将可执行文件放入TFTP目录(默认为`/srv/tftp`): ```bash cp led_user /srv/tftp/ ``` 3. 在开发板上通过TFTP下载: ```bash tftp -g -r led_user <主机IP> chmod +x led_user # 添加执行权限 ``` #### b) **NFS挂载**(适合调试阶段) 1. 在主机搭建NFS服务器: ```bash sudo apt install nfs-kernel-server sudo vim /etc/exports # 添加:/nfsroot *(rw,sync,no_root_squash) sudo exportfs -a sudo systemctl restart nfs-kernel-server ``` 2. 将可执行文件放入NFS共享目录(如`/nfsroot`): ```bash cp led_user /nfsroot/ ``` 3. 在开发板挂载NFS目录: ```bash mount -t nfs <主机IP>:/nfsroot /mnt cd /mnt ./led_user # 直接运行 ``` #### c) **U盘/SD拷贝** 1. 将可执行文件复制到U盘或SD 2. 插入开发板挂载存储设备: ```bash mount /dev/sda1 /mnt # 根据实际设备名调整 cp /mnt/led_user ~/ cd ~ chmod +x led_user ``` #### d) **串口传输**(速度慢,适合极小文件) 使用`rz/sz`工具: 1. 开发板安装`lrzsz`: ```bash opkg install lrzsz # 或根据发行版使用apt/apt-get ``` 2. 主机运行: ```bash sz --version # 确保已安装 ``` 3. 开发板接收文件: ```bash rz -y # 弹出文件选择窗口,选择led_user chmod +x led_user ``` ### 3. **运行程序** 在开发板上执行(可能需要root权限): ```bash sudo ./led_user # 或直接以root用户运行 ``` ### 4. **烧录到开发板内部存储(可选)** 如果希望程序永久保存在子上(即使断电后依然存在),需要将程序复制到载存储: ```bash cp led_user /usr/local/bin/ # 复制到系统路径 ``` ### 注意事项 1. **交叉编译工具链**:必须与开发板系统匹配(如armv7、aarch64等) 2. **依赖库**:静态编译避免动态库依赖问题: ```bash arm-linux-gnueabihf-gcc -static -o led_user led_user.c ``` 3. **权限问题**:操作GPIO可能需要root权限,可通过以下方式解决: - 使用`sudo`运行 - 设置SUID权限(不安全,不推荐): ```bash sudo chown root:root led_user sudo chmod u+s led_user ``` - 配置udev规则(推荐)[参考之前回答] > **引用说明**: > - 引用[5]提到两种烧录方式(JTAG/USB),但主要针对**裸机程序或系统镜像**。用户态程序属于应用层程序,不需要烧录到Flash特定位置,只需放入文件系统即可。 > - 对于用户态点灯程序,通常采用上述文件传输方法(TFTP/NFS/UART/USB)即可[^5]。 ### 不同烧录方式对比 | 方法 | 速度 | 复杂度 | 适用场景 | |---------|--------|--------|------------------------| | TFTP | 快 | 中等 | 网络启动的子 | | NFS | 快 | 中等 | 频繁调试的开发阶段 | | U盘/SD | 中等 | 简单 | 无网络环境 | | 串口 | 慢 | 简单 | 极小文件或紧急修复 | ### 常见问题解决 1. **运行提示"Permission denied"**: ```bash chmod +x led_user # 添加执行权限 ``` 2. **提示"not found"**:动态链接库缺失,建议静态编译 3. **无法操作GPIO**:检查权限和GPIO编号是否正确 §§相关问题§§ 1. 如何为嵌入式Linux开发板配置TFTP和NFS服务? 2. 交叉编译时如何解决动态库依赖问题? 3. 在开发板上永久保存用户程序的正确方法是什么? 4. 如何避免每次运行GPIO控制程序都需要root权限?</think>### 在Linux用户态编写点灯驱动后如何烧录到嵌入式开发 在Linux用户态编写点灯驱动后,烧录到开发板需要以下步骤(以sysfs点灯程序为例): #### 1. **交叉编译程序** 在开发主机(PC)上使用交叉编译工具链编译程序: ```bash # 安装交叉编译工具链(示例为ARM架构) sudo apt install gcc-arm-linux-gnueabihf # 交叉编译点灯程序 arm-linux-gnueabihf-gcc -o led_user led_user.c -static # 静态编译避免依赖问题 ``` #### 2. **文件传输到开发板** 选择以下任一方式传输编译后的`led_user`文件: ##### a) TFTP传输(推荐小文件) ```bash # 开发板操作(需网络连接): tftp -g -r led_user <PC的IP地址> chmod +x led_user ``` ##### b) U盘/SD拷贝 1. 将`led_user`复制到U盘/SD 2. 插入开发板挂载: ```bash mkdir /mnt/usb mount /dev/sda1 /mnt/usb # 设备名根据实际情况调整 cp /mnt/usb/led_user /home ``` ##### c) NFS挂载(推荐频繁调试) ```bash # 开发板操作: mount -t nfs <PC_IP>:/nfsroot /mnt cp /mnt/led_user /home ``` #### 3. **设置执行权限** ```bash chmod +x led_user ``` #### 4. **运行点灯程序** ```bash sudo ./led_user # 需要root权限操作GPIO ``` > **关键提示**: > 1. 若使用`/dev/mem`内存映射方式,需确保内核配置开启`CONFIG_DEVMEM`和`CONFIG_DEVKMEM` > 2. GPIO编号需与硬件实际连接一致(通过`gpioinfo`命令查看) > 3. 可通过udev规则避免sudo权限[参考之前回答] #### 烧录方式对比 | **方法** | **速度** | **适用场景** | **依赖条件** | |---------------|----------|------------------------|----------------------| | **TFTP** | ★★★★ | 小文件快速传输 | 网络连接 | | **U盘/SD** | ★★★☆ | 无网络环境 | USB/SD接口 | | **NFS** | ★★★★★ | 频繁调试开发 | 网络+PC端NFS服务 | | **串口** | ★☆ | 紧急修复(速度极慢) | 串口线+rz/sz工具 | > **实际案例**:在树莓派上通过TFTP烧录点灯程序 > ```bash > # PC端(IP:192.168.1.100) > sudo cp led_user /srv/tftp/ > > # 树莓派开发板 > tftp -g -r led_user 192.168.1.100 > sudo ./led_user > ``` ### 完整烧录流程(以全志R329开发板为例) 1. **编译程序**: ```bash arm-linux-gnueabihf-gcc -static -o led_user led_user.c ``` 2. **设置TFTP服务**: ```bash sudo apt install tftpd-hpa sudo systemctl restart tftpd-hpa ``` 3. **开发板获取文件**: ```bash tftp -g -r led_user 192.168.1.100 ``` 4. **永久存储程序**: ```bash cp led_user /usr/local/bin/ echo "sudo /usr/local/bin/led_user" >> /etc/rc.local ``` > **注意**:不同开发板的GPIO编号不同,需根据原理图修改程序中的`GPIO_PIN`值[^4]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值