-
Notifications
You must be signed in to change notification settings - Fork 0
toolchain
Jiang Yongquan(江永泉) edited this page Aug 23, 2021
·
3 revisions
host跨平台支持,target支持全系列32位arm处理器
share/doc/gcc-arm-none-eabi/readme.txt
arm-none-eabi-gdb-py (gdb with python support) 需要安装python插件可以使用这个版本
arm处理器有很多变种,toolchain有专为不同的Cortex-A/R/M核心优化的选项
arm-none-eabi-gcc [-mthumb] -mcpu=CPU[+extension...] -mfloat-abi=ABI
arm处理器,bcm2835使用的处理器核心是arm1176jzf-s
https://gcc.gnu.org/onlinedocs/gcc-9.3.0/gcc/ARM-Options.html#index-mcpu-2
默认auto,根据mcpu选择
操作系统不需要使用floating-point ABI,可以忽略
soft softfp hard
https://gcc.gnu.org/onlinedocs/gcc-9.3.0/gcc/ARM-Options.html#index-mfloat-abi
用不到Thumb指令,可以忽略
arm-none-eabi-gcc -mcpu=arm1176jzf-s -mfloat-abi=hard --print-multi-dir
arm/v5te/hard
看见arm1176实际的march参数是armv5te
使用newlib-nano
libc_nano.a libg_nano.a
在编译、链接时加 --specs=nano.specs
头文件 newlib.h
参考 readme.nano
K=kernel
OBJS = \
$K/main.o\
$K/uart.o\
$K/string.o\
$K/trap.o\
$K/gpio.o\
$K/timer.o\
$K/spinlock.o\
$K/mailbox.o\
$K/kalloc.o\
$K/vm.o\
...
TOOLPREFIX = arm-none-eabi
CC = $(TOOLPREFIX)-gcc
LD = $(TOOLPREFIX)-ld
OBJCOPY = $(TOOLPREFIX)-objcopy
OBJDUMP = $(TOOLPREFIX)-objdump
CFLAGS = -mcpu=arm1176jzf-s -fpic -ffreestanding -g -O0 -std=gnu99 -Wall -Wextra
ASFLAGS = -mcpu=arm1176jzf-s -fpic -ffreestanding -g -O0 -std=gnu99 -Wall -Wextra
$K/kernel: $(OBJS) $K/entry.o $K/kernel.ld
$(LD) -Map $K/kernel.map -T $K/kernel.ld --oformat elf32-littlearm -o $K/kernel.elf $K/entry.o $(OBJS) -lgcc
$(OBJDUMP) -S $K/kernel.elf > $K/kernel.asm
$(OBJDUMP) -t $K/kernel.elf | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > $K/kernel.sym
$(OBJCOPY) $K/kernel.elf -O binary $K/kernel.img
clean:
rm -f $K/*.o $K/*.elf $K/*.asm $K/*.sym $K/*.img
install: $K/kernel.img
md5 /Volumes/UNTITLED/kernel.img
cp $K/kernel.img /Volumes/UNTITLED/
md5 /Volumes/UNTITLED/kernel.img
# hdiutil eject /Volumes/UNTITLED
sudo umount /Volumes/UNTITLED