参考博客:https://blog.csdn.net/stdio_h666/article/details/104330395
用VM建个虚拟机
https://blog.csdn.net/qq_41782425/article/details/85119258
建议选择kernel 是下图这几个的…不然就要降级或升级了:
同时内存建议3G以上,不然会在配置完buildroot config后make出现什么什么恶_all,[s_auto…]的问题
下载安装buildroot构建交叉编译环境
用uname -r 查询kernel版本
然后下载安装相关库:
sudo apt-get update
sudo apt-get install libncurses5-dev patch
sudo apt-get install texinfo
sudo apt-get install bison
sudo apt-get install flex
下载buildroot两种方式一种git,一种wget建议第二种,速度快很多…
第一种:
git clone https://github.com/buildroot/buildroot.git
cd buildroot
第二种:
wget http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2
tar -jxvf buildroot-snapshot.tar.bz2
cd buildroot
配置menuconfig
make menuconfig
这个界面:
选target options,配置如下(小端模式)
返回选Toolchain,配置如下(kernel根据自己uname后的选):
点Save保存
然后make,等待很长一段时间。需要联网
make
添加环境变量:
vim /root/.bashrc
在最后一行添加:
export PATH="$PATH:之前到你buildroot的路径/buildroot/output/host/usr/bin"
然后安装完成:
mipsel-linux-gcc --help
如果如下图则安装成功。
具体交叉编译例程
例程arith_logic.S如下:
.set noat
.set noreorder
.globl main
.text
main:
ori $at, $zero, 0x0064 #$at($1) = 0x64
lui $v0, 0x6500 #$v0($2) = 0x65000000
nop
nop
addiu $v1, $at, 0x4 #$v1($3) = 0x68
sltiu $a0, $at, 0x0068 #$a0($4) = 0x1
add $a1, $at, $v0 #$a1($5) = $at + $v0 = 0x65000064
subu $a2, $v0, $at #$a2($6) = $v0 - $at = 0x64FFFF9C
slt $a3, $at, $v0 #$a3($7) = 0x1
and $t0, $at, $v0 #$t0($8) = $at & $v0 = 0x0
ori $t1, $at, 0x0065 #$t1($9) = $at | 0x65 = 0x65
sll $t2, $at, 0x4 #$t2($10)= $at << 4 = 0x640
mult $at, $v0 #hi = 0x27
#lo = 0x74000000
nop
nop
mfhi $t3 #$t3($11) = hi = 0x27
mflo $t4 #$t4($12) = lo = 0x74000000
nop
编译:
mipsel-linux-as arith_logic.S -o arith_logic.o
链接:
首先编写个链接描述脚本default.ld:
OUTPUT_ARCH(mips)
ENTRY(main)
SECTIONS
{
. = 0x00000000;
.text :
{
*(.text)
_etext = .;
}
. = 0x00010000;
.data :
{
*(.data)
}
.bss :
{
*(.bss)
}
}
然后链接:
mipsel-linux-ld -T default.ld arith_logic.o -o arith_logic.om
得到bin文件
mipsel-linux-objcopy -O binary arith_logic.om arith_logic.bin
这样就得到了一个二进制文件…其实基本就算完成了但是为了让vivado识别编程.coe文件需要以下操作
mipsel-linux-objcopy -O binary -j .data arith_logic.om arith_logic.data
这个convert是个可执行文件在:https://download.csdn.net/download/u010594449/12479219
下载
./convert arith_logic.bin arith_logic.data
生成如下两个coe文件就是对应文件。
MakeFile编写(就是编译,链接,转换的整体)
首先布局如下,build放输出,src源文件。用的时候make USER_PROGRAM=待编译的文件 就好。
.PHONY: mem clean help
ifndef CROSS_COMPILE
CROSS_COMPILE := mips-sde-elf-
endif
ifndef TESTCASE_SRC_DIR
TESTCASE_SRC_DIR := src/
endif
ifndef TESTCASE_BUILD_DIR
TESTCASE_BUILD_DIR := build/
endif
DEBUG := false
CC := $(CROSS_COMPILE)gcc
AS := $(CROSS_COMPILE)as
LD := $(CROSS_COMPILE)ld
OBJCOPY := $(CROSS_COMPILE)objcopy
OBJDUMP := $(CROSS_COMPILE)objdump
CFLAGS := -mips1 -EL
ifeq ($(DEBUG), true)
CFLAGS += -g
endif
OBJECTS := $(TESTCASE_BUILD_DIR)$(USER_PROGRAM).o
export CROSS_COMPILE
export TESTCASE_SRC_DIR
export TESTCASE_BUILD_DIR
# ********************
# Rules of Compilation
# ********************
all: $(TESTCASE_BUILD_DIR)$(USER_PROGRAM).bin $(TESTCASE_BUILD_DIR)$(USER_PROGRAM).data convert
./convert $(TESTCASE_BUILD_DIR)$(USER_PROGRAM).bin $(TESTCASE_BUILD_DIR)$(USER_PROGRAM).data
rm *.mif
mv inst_rom.coe $(TESTCASE_BUILD_DIR)$(USER_PROGRAM).coe
rm *.coe
#%.S: %.c
# $(CC) -S $< -o $@
$(TESTCASE_BUILD_DIR)$(USER_PROGRAM).o: $(TESTCASE_SRC_DIR)$(USER_PROGRAM).S
$(AS) $(CFLAGS) $< -o $@
$(TESTCASE_BUILD_DIR)$(USER_PROGRAM): default.ld $(OBJECTS)
$(LD) -T default.ld $(CFLAGS) $(OBJECTS) -o $@
$(OBJDUMP) -alD $@ > $@.asm
$(TESTCASE_BUILD_DIR)$(USER_PROGRAM).bin: $(TESTCASE_BUILD_DIR)$(USER_PROGRAM)
$(OBJCOPY) -O binary -j .text $< $@
$(TESTCASE_BUILD_DIR)$(USER_PROGRAM).data: $(TESTCASE_BUILD_DIR)$(USER_PROGRAM)
$(OBJCOPY) -O binary -j .data $< $@
mem: $(TESTCASE_BUILD_DIR)$(USER_PROGRAM).bin $(TESTCASE_BUILD_DIR)$(USER_PROGRAM)
./bin2mem $(TESTCASE_BUILD_DIR)$(USER_PROGRAM) $(TESTCASE_BUILD_DIR)$(USER_PROGRAM).bin
help:
@echo "用法:make USER_PROGRAM=待编译的文件 <DEBUG=[true|false]>"
@echo "< >为可选项"
clean:
cd $(TESTCASE_BUILD_DIR) && rm -f *.o *.bin *.vh *elf