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

【Linux-点灯烧录-SD卡/USB烧写】

目录

  • 1. 烧写方式
  • 2. 烧写之代码编译
    • 2.1 led.s->led.o
    • 2.2 led.o->led.elf
    • 2.3 led.elf->led.bin
    • 2.4 反汇编:led.elf->led.dis
  • 3. 烧写之烧录到SD卡上:
    • 3.1 开启烧录软件权限:
    • 3.2 确定SD卡的格式:FAT32
    • 3.3 烧录到SD卡上
    • 3.4 SD卡插到板子上并SD卡启动
  • 4. Makefiel的文件编写:

1. 烧写方式

  这里推荐两种,一种就是SD卡烧写,一种就是USB烧写;

  • USB烧写:这里推荐一位博主写的比较好:是正点原子的IMXULL的板子
  • SD烧写:接下来就细讲一下SD烧写

2. 烧写之代码编译

  由于是在LInux环境下写的.s汇编文件,因此要编译成ARM环境下的二进制文件,这里就要用到交叉编译器:arm-linux-gnueabihf,一般整体思路就是,led.s->led.o->led.elf->led.bin,先把led.s文件编译成led.o文件,再由led.o文件链接成led.elf文件,二然后再把led.elf文件转换成二进制led.bin文件,如果进行调试要把.elf文件反汇编一下:下面简要介绍一下这些步骤的命令:

2.1 led.s->led.o

  1. arm-linux-gnueabihf-gcc -g -c led.s -o led.o :这条指令是在使用 arm-linux-gnueabihf-gcc 编译器进行编译操作。具体解释如下:
  • -g:表示生成调试信息,以便在调试时使用。
  • -c:表示只进行预处理、编译和汇编,生成目标文件(.o 文件)。
  • led.s:是要编译的源文件的名称。
  • -o led.o:指定输出的目标文件的名称为 led.o

2.2 led.o->led.elf

  1. arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf :该指令的作用是将目标文件 led.o 链接成可执行文件 led.elf,并指定了代码段的起始地址。
  • arm-linux-gnueabihf-ld:这是链接器程序。
  • -Ttext 0x87800000:指定代码段的起始地址为 0x87800000
  • led.o:这是要链接的目标文件。
  • -o led.elf:指定输出的链接结果文件名为 led.elf

2.3 led.elf->led.bin

  1. arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin :是一个格式转换指令,用于将 led.elf 文件转换为二进制格式的 led.bin 文件,通过执行这个指令,可以将 led.elf 文件转换为可在目标设备上运行的二进制文件 led.bin
  • -O binary:指定输出格式为二进制。
  • -S:表示不复制源文件中的重定位信息和符号信息。
  • -g:表示不复制源文件中的调试信息。

2.4 反汇编:led.elf->led.dis

  1. arm-linux-gnueabihf-objdump -D led.elf > led.dis :使用 arm-linux-gnueabihf-objdump 工具对 led.elf 文件进行反汇编操作。
  • -D选项表示反汇编所有的段
  • > led.dis:将反汇编的结果输出到文件 led.dis 中。

3. 烧写之烧录到SD卡上:

  这里要用到烧录软件:这个软件是在Linux环境下运行的,因此要给其开启权限:

3.1 开启烧录软件权限:

  • chmod 777 imxdownload:即可读可写可执行

3.2 确定SD卡的格式:FAT32

  如果存储卡的SD卡的容量比较大的话,要进行手动的格式话,这里必须采用FAT32的格式,怎么更改格式可以参考这个视频,非常简单:链接,如不改的话挂载不到Ubuntu的系统上;

3.3 烧录到SD卡上

  • ./iimxdownload led.bin /dev/sdb :即把二进制的文件led.bin烧录到sdb设备上,其中sdb设备就是我们挂载的SD卡,因此要确定SD卡挂载在了那个上面,叫什么名称;

3.4 SD卡插到板子上并SD卡启动

  结果如下:
在这里插入图片描述

4. Makefiel的文件编写:

  还是老规矩,把一个led.s的文件变成一个可以烧录的可执行文件,如果每次都进行手动的操作这是一件非常繁琐的事情,因此可以使用make工具进行一件编译,就是把我们手动编译的过程用代码的形式描述下来,具体如下,注意make语法中不要使用空格,要使用tap的按键;具体如下:

led.bin	:	led.sarm-linux-gnueabihf-gcc	-g 	-c	led.s	-o	led.oarm-linux-gnueabihf-ld	-Ttext	0x87800000	led.o	-o	led.elfarm-linux-gnueabihf-objcopy	-O	binary	-S	-g	led.elf	led.binarm-linux-gnueabihf-objdump	-D	led.elf	>	led.dis
clean:rm	-rf	*.o	led.bin	led.elf	led.dis
http://www.lryc.cn/news/341444.html

相关文章:

  • PostgreSQL自带的命令行工具06- pg_isready
  • 【请投票】嘉立创EDA中LED发光二极管是否应有统一的引脚定义?
  • LT6911UXB HDMI2.0 至四端口 MIPI DSI/CSI,带音频 龙迅方案
  • 网络培训议题@2
  • linux文本三剑客之sed
  • nginx封禁恶意IP
  • 「PHP系列」PHP MySQL 简介及运用
  • 深度学习论文: XFeat: Accelerated Features for Lightweight Image Matching
  • C++之Eigen库基本使用
  • 2024年 Java 面试八股文——SpringBoot篇
  • C/C++的指针、万能指针、常量指针和指针常量
  • 【讲解下如何解决一些常见的 Composer 错误】
  • qq空间:图片批量下载js脚本工具,javascript批量下载图片
  • 滑动验证码登陆测试编程示例
  • 爬取89ip代理、 爬取豆瓣电影
  • XBoot:基于Spring Boot 2.x的一站式前后端分离快速开发平台
  • 24年最新抖音、视频号0成本挂机,单号每天收益上百,可无限挂
  • Day31:单元测试、项目监控、项目部署、项目总结、常见面试题
  • Flutter笔记:使用Flutter私有类涉及的授权协议问题
  • 面试过程种遇到的面试题收集
  • Vue学习:21.mixins混入
  • 上传文件到 linux
  • NEO 学习之session7
  • 毕业设计uniapp+vue有机农产品商城系统 销售统计图 微信小程序
  • php使用Canal监听msyql
  • metabase部署与实践
  • nacos v2.2.3 docker简单安装使用
  • java设计模式-生成器模式
  • 《前端面试题》- TypeScript - TypeScript的优/缺点
  • 微服务---feign调用服务