jetbot uboot中运行程序 电脑版发表于:2024/8/18 19:40 ![](https://img.tnblog.net/arcimg/hb/6930d1439f4b43e785a433685b813262.png) >#jetbot uboot中运行程序 [TOC] 创建裸机程序 ------------ tn2>编写一个`led.s`的程序 ```bash mov x3,#0x5A mov x4,#0x55 loop: b loop ``` tn2>创建一个`Makefile`文件用于编译。 ```bash CROSS = aarch64-linux-gnu- CC=$(CROSS)gcc LD=$(CROSS)ld OBJCOPY=$(CROSS)objcopy all: led.s $(CC) -g -c -o led.o led.s $(LD) led.o -Ttext 0x80090000 -o led.elf $(OBJCOPY) -O binary -S led.elf led.bin $(CROSS)objdump -D led.elf > led.dis clean: rm -f *.o *.elf *.bin *.dis ``` ```bash # 设置交叉编译工具前缀为 aarch64-linux-gnu- CROSS = aarch64-linux-gnu- # 定义编译器为 aarch64-linux-gnu-gcc CC=$(CROSS)gcc # 定义链接器为 aarch64-linux-gnu-ld LD=$(CROSS)ld # 定义目标文件格式转换工具为 aarch64-linux-gnu-objcopy OBJCOPY=$(CROSS)objcopy # all 目标: 编译、链接、生成二进制文件和反汇编文件 all: led.s # 使用 gcc 编译 led.s 汇编文件,生成 led.o 目标文件,启用调试信息 $(CC) -g -c -o led.o led.s # 使用 ld 链接 led.o,指定起始地址 0x80090000,生成 led.elf 可执行文件 $(LD) led.o -Ttext 0x80090000 -o led.elf # 使用 objcopy 将 led.elf 转换为 led.bin 二进制文件,并去除多余的符号信息 $(OBJCOPY) -O binary -S led.elf led.bin # 使用 objdump 生成 led.elf 的反汇编文件并保存为 led.dis $(CROSS)objdump -D led.elf > led.dis # clean 目标: 删除生成的中间文件和输出文件 clean: # 删除所有 .o、.elf、.bin 和 .dis 文件 rm -f *.o *.elf *.bin *.dis ``` tn2>编译我们的程序,并放到FTP目录下面。 ```bash make cp led.bin /tftpboot/ ``` ![](https://img.tnblog.net/arcimg/hb/1efdcc4018724359849f40ec0e66bd40.png) jetbot板运行程序 ------------ tn2>执行`sudo reboot`命令进行重启,然后快速按`Enter`键进入u-boot模式。 然后启动我们的网卡,设置ftp服务器,然后下载我们的`led.bin`文件。 ```bash pci enum;pci setenv serverip 192.168.9.119 setenv ipaddr 192.168.9.9 saveenv tftp led.bin ``` ![](https://img.tnblog.net/arcimg/hb/c2deaa914ae64ad18783af7ef883b3e1.png) tn2>可以看到地址是`0x84000000`。 执行如下命令: ```bash go 0x84000000 ``` ![](https://img.tnblog.net/arcimg/hb/cf0fbd0fa2064485a0722da01e7fe69d.png) tn2>如果我们不加后面的`loop`死循环命令,它会直接执行`0x84000000`后面的,一般都会重启。