当前位置: 首页 > news >正文

粤嵌GEC6818-学习笔记1-从零搭建嵌入式开发环境

1. 从零搭建嵌入式开发环境:为什么选择GEC6818?

第一次接触嵌入式开发的朋友可能会被各种开发板型号搞得眼花缭乱。我刚开始学习时也纠结了很久,直到遇到粤嵌的GEC6818开发板。这块板子特别适合新手入门,原因很简单:资源丰富社区支持强性价比高。它采用ARM架构,跑的是Linux系统,能让你完整地体验从代码编写到板载运行的全流程。

记得我第一次点亮开发板时,看到串口输出的系统启动信息,那种成就感至今难忘。不过在这之前,我们需要先搞定开发环境。嵌入式开发有个特点:你既要在电脑上写代码,又要把程序放到开发板上运行。这就涉及到交叉编译——用电脑的CPU架构(比如x86)生成能在ARM芯片上运行的程序。

2. 开发环境搭建:双系统协作实战

2.1 共享文件夹:Windows与Linux的桥梁

大多数开发者习惯在Windows下写代码,但编译需要在Linux环境下完成。来回传文件太麻烦,共享文件夹就是最佳解决方案。我推荐用VMware安装Ubuntu 18.04,稳定性经过大量项目验证。

具体操作:

  1. 在VMware菜单选择"虚拟机设置"→"选项"→"共享文件夹"
  2. 点击"总是启用",添加你的代码目录(比如D:\embedded_code
  3. 在Ubuntu中进入/mnt/hgfs就能看到共享内容

踩坑提醒:如果看不到共享文件夹,可能需要安装VMware Tools。执行这个命令:

sudo apt-get install open-vm-tools open-vm-tools-desktop

2.2 Linux必备指令速成班

刚开始用Linux终端可能会手足无措,其实掌握这几个命令就能应付大部分场景:

  • 文件操作三剑客

    ls -l # 详细列表查看(我习惯加-al参数看隐藏文件) cp -r # 递归复制目录时一定要加-r参数 mv old new # 重命名和移动文件都靠它
  • 目录导航技巧

    cd ~ # 秒回用户主目录 cd - # 返回上一个目录(比反复按Tab方便) pwd # 当你迷路时的"GPS"
  • vim生存指南: 新手先用nano编辑器过渡,等熟悉了再学vim。记住三个关键操作:

    1. i进入编辑模式
    2. Esc退回命令模式
    3. :wq保存退出

3. 第一个嵌入式程序:从编译到运行

3.1 Hello World的嵌入式版本

在共享文件夹创建hello.c

#include <stdio.h> int main() { printf("嵌入式版Hello World!\n"); return 0; }

编译命令看似简单,但有讲究:

gcc hello.c -o hello # 普通编译 ./hello # 在Ubuntu运行 arm-linux-gcc hello.c -o hello.arm # 交叉编译

特别注意:如果报错"arm-linux-gcc未找到",说明交叉编译工具链没装好。安装命令:

sudo apt install gcc-arm-linux-gnueabihf

3.2 SecureCRT连接开发板详解

串口调试是嵌入式开发的日常,SecureCRT的配置有几个关键点:

  1. 在Windows设备管理器查看COM口号(比如COM5)
  2. 波特率必须设为115200(这是开发板默认值)
  3. 流控制要取消所有勾选

连接成功后,你会看到类似这样的启动日志:

[ 0.120000] Linux version 3.4.39 [ 0.240000] CPU: ARMv7 Processor

4. 交叉开发全流程实操

4.1 程序传输的两种姿势

方法一:Xmodem协议传输

  1. 开发板端执行:
    rx hello.arm
  2. SecureCRT菜单选择"传输"→"发送Xmodem"

方法二:TF卡直拷(适合大文件)

  1. 将编译好的程序拷贝到TF卡
  2. 插入开发板挂载:
    mount /dev/mmcblk0p1 /mnt cp /mnt/hello.arm ~

4.2 文件权限那些坑

Linux严格的权限管理常让新手头疼。记得第一次运行程序时报错"Permission denied",解决方法:

chmod +x hello.arm # 添加可执行权限 ./hello.arm # 现在可以运行了

如果想批量修改权限,可以用数字表示法:

chmod 755 hello.arm # 7=rwx(所有者) 5=rx(其他用户)

5. 文件IO操作实战精讲

5.1 Linux文件操作三步骤

就像操作冰箱:

  1. open()打开冰箱门
  2. read()/write()存取食物
  3. close()关门(重要!否则会"食物变质")

示例:读取配置文件

int fd = open("/etc/config", O_RDONLY); char buf[256]; read(fd, buf, sizeof(buf)); close(fd);

5.2 文件指针控制妙招

lseek()就像文件的GPS,典型应用场景:

  • 获取文件大小:
    int size = lseek(fd, 0, SEEK_END);
  • 追加写入:
    lseek(fd, 0, SEEK_END); write(fd, data, len);

5.3 文件复制实战

综合运用IO函数实现文件拷贝:

while((len = read(src_fd, buf, BUF_SIZE)) > 0) { write(dst_fd, buf, len); }

性能提示:缓冲区大小建议设为4K的倍数(如4096),这是很多硬盘的块大小。

6. 常见问题排查指南

问题1:共享文件夹看不到?

  • 检查VMware Tools是否安装
  • 确认/mnt/hgfs目录权限

问题2:交叉编译报架构错误?

  • 确认用的是arm-linux-gcc而非普通gcc
  • 检查工具链路径是否在PATH中

问题3:SecureCRT连接无响应?

  • 检查USB转串口驱动是否安装
  • 确认波特率是否为115200
  • 尝试更换USB口(有些USB3.0口兼容性差)

刚开始玩开发板时,我经常因为没插紧串口线而折腾半天。后来养成了习惯:先查物理连接,再查软件配置。嵌入式开发就是这样,越注重细节越少走弯路。下次我们可以聊聊如何用这个开发板驱动LCD屏幕,那又是另一个有趣的故事了。

http://www.jsqmd.com/news/599027/

相关文章:

  • GPT-SoVITS实战教学:如何用少量数据训练高质量语音模型
  • Python flask django爱心公益网站
  • 广告投放系统
  • Windows Defender Remover:系统安全管理与性能优化的专业解决方案
  • 高数赋能编程:从理论到实战的跨界应用,你知道高等数学你一直学的是什么吗?
  • C#的Task取消机制:CancellationToken的使用模式
  • 打卡信奥刷题(3071)用C++实现信奥题 P6951 [ICPC 2018 WF] Wireless is the New Fiber
  • 证件照 API 怎么选?2026 年主流方案深度对比 + Python / Java / PHP 对接示例
  • 别再让GUI卡死了!用PySide6信号槽搞定后台任务,附完整线程示例代码
  • 5个实战技巧:构建高效跨平台番茄钟应用
  • RetDec反编译器深度解析:从二进制到高级语言的智能转换
  • C语言的初步认识
  • 开源可部署+零代码:春联生成模型-中文-base WebUI快速体验指南
  • 关于V6 Command Center系列实时频谱仪型号匹配
  • 大学生必看!用Python给智慧树课程挂机:从环境配置到定时播放完整指南
  • 实战应用开发:为风车动漫网站集成个性化推荐与弹幕功能
  • AutoGLM-Phone-9B效果展示:轻量化大模型在移动端的惊艳表现
  • 前端如何实现长连接之使用WebSocket长连接
  • MaxKB源码部署实战:当Docker遇上Poetry,如何优雅解决PostgreSQL pgvector依赖和路径硬编码问题?
  • RVC快速体验:无需复杂配置,轻松玩转语音变声
  • 基于MATLAB的车牌识别系统开发与设计|含完整源码、技术报告及PPT演示
  • 《公安实战:如何实现“目标持续掌控”?》——从“看见目标”到“永不丢失”,空间智能的真实落地
  • 用STC89C52RC单片机DIY一个八路抢答器(附完整源码+PCB文件)
  • 告别信号毛刺!手把手教你为AD9910设计一个干净的数百兆赫兹输出滤波器
  • Go接口interface与鸭子类型
  • 《为什么90%的数字孪生都是假的?》——没有空间数据的“孪生”,只是一个会动的PPT
  • OpenClaw配置优化指南:提升Phi-3-vision-128k长文本处理效率
  • 拓朋N86车载台:畜牧运输的隐形守护者
  • 六相(双三相)永磁同步电机PMSM双闭环矢量控制仿真模型
  • Go Channel 死锁排查经验