目录
- 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
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
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
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
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.s
arm-linux-gnueabihf-gcc -g -c led.s -o led.o
arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf
arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin
arm-linux-gnueabihf-objdump -D led.elf > led.dis
clean:
rm -rf *.o led.bin led.elf led.dis