Ubuntu下ARM交叉编译环境

版权声明:本文多数内容来自互联网,只经过本人修改组合,无版权,故可随意转载。( ¯▽¯;) https://blog.csdn.net/kxwinxp/article/details/85481852

Ubuntu下ARM交叉编译环境

初次接触ARM开发版,才知道交叉编译这个名词,鉴于自己刚入门,肯定以后要经历数次才记得住,故在这做个记录,方便自己忘记时做个参考。

1.准备编译基础环境

因为ARM是32位,而Ubuntu是64位的,所以先安装一些32位的库。

sudo apt-get install lib32ncurses5 lib32z1 lib32stdc++6

2.安装ARM-Linux-gcc

因为我的是三星s3c2440的SOC,所以这里使用的友善之臂提供的交叉编译工具。
友善之臂官网 下载页面直接下载ARM-Linux GCC 4.4.3

# 下载交叉编译工具
wget http://112.124.9.243/arm9net/mini2440/linux/arm-linux-gcc-4.4.3-20100728.tar.gz
# 解压到当前目录
tar zxvf arm-linux-gcc-4.4.3-20100728.tar.gz -C ./
# 创建文件目录(这里只是一个建议的存放目录,可自定义)
sudo mkdir /var/local/arm
# 将文件移入
sudo mv -f opt/FriendlyARM/toolschain/4.4.3 /var/local/arm/
# 添加到环境变量
vi ~/.bashrc
#添加如下内容到末尾
export PATH=$PATH:/usr/local/arm/4.4.3/bin
#立即生效环境变量
source ~/.bashrc

3.查看安装状态

arm-linux-gcc -v
#可以看到如下内容:
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /opt/FriendlyARM/mini2440/build-toolschain/working/src/gcc
-4.4.3/configure --build=i386-build_redhat-linux-gnu --host=i386-build_redh
at-linux-gnu --target=arm-none-linux-gnueabi --prefix=/opt/FriendlyARM/tool
schain/4.4.3 
省略...
Thread model: posix
gcc version 4.4.3 (ctng-1.6.1) 

在编译项目时,可能会遇到找不到除法函数等问题,这时需要将链接库加上。
链接库目录:/opt/FriendlyARM/toolschain/4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/

示例Makefile文件:

Makefile更多的使用说明请参考:Makefile 配置和使用

CC = arm-linux-gcc
LD = arm-linux-ld
AR = arm-linux-ar
OBJCOPY = arm-linux-objcopy
OBJDUMP = arm-linux-objdump
LIBPATH =-lgcc -L/opt/FriendlyARM/toolschain/4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/
#扫描所有文件,指定所需生成的.o文件
all_o_files:=$(patsubst %.c,%.o,$(wildcard **/*.c)) $(patsubst %.S,%.o,$(wildcard **/*.S))
all_o_files+=$(patsubst %.c,%.o,$(wildcard *.c)) $(patsubst %.S,%.o,$(wildcard *.S))
#test:
#echo $(all_o_files)
#依赖库查找方法:grep "__floatsisf" * -nR
all: $(all_o_files)
	${LD} $(LIBPATH) -T all.lds -o [email protected] $^ ${LIBPATH}
	${OBJCOPY} -O binary -S [email protected] [email protected]
	${OBJDUMP} -D [email protected] > [email protected]

%.o: %.c
	${CC} -march=armv4 -c -o $@ $<

%.o: %.S
	${CC} -march=armv4 -c -o $@ $<


clean:
	rm -rf */*.o */*.elf */*.bin */*.dis
	rm -f *.o *.elf *.bin *.dis

#伪目标
.PHONY:clean

#清理依赖
clean-dist:
	rm -f *.o.d

猜你喜欢

转载自blog.csdn.net/kxwinxp/article/details/85481852
今日推荐