- 论坛徽章:
- 0
|
我需要通过交叉编译生成可执行文件,在ARM裸板(不带操作系统)上运行
基于上述前提,现在遇到几个问题,求高手帮忙解答,多谢
1.从网上下载了arm-linux-gcc4.3.2, 同时下载了32位的lib库,在64位ubuntu上搭建了交叉编译环境。如果不带编译选项,arm-linux-gcc -o main xxx.c xxx.c可以编译生成目标文件,如果带-mcpu cortex-m4 会提示error.bad value(cortex-m4) for -mcpu=switch,请问这个怎么解决?
我的arm是STM32F429,对应的架构就是cortex-m4,另外我试过带其它选项,-mcpu=cortex-a8则会提示warning:switch -mcpu=cortex-a8 conflicts with -mcpu=switch,assuming cpu feature set,此时可以生成目标文件
2.第一个问题没解决,我就不带编译选项继续往下走,通过file查看生成的可执行文件
main: ELF 32-bit LSB executable, ARM, EABI5 Version 1(SYSV), dynamically linked(uses shared libs), for GNU/Linux 2.6.14, not stripped
请问这个怎么确认这个文件可以在哪些架构的arm上执行?
3. 用IAR编译我的工程生成main.bin,通过j-tag加载可以运行并能够从串口打印数据。通过arm-linux-gcc生成目标文件main,
用J-TAG加载提示不支持这个文件类型,我手动将main修改为main.bin,J-TAG就可以识别并加载,请问这个手动修改对文件有影响吗?
4.将手动修改的main.bin通过J-TAG加载到arm中,输入开始地址08000000,执行program&verifyy,但是不通过串口看到打印输出,说明有问题。请问生成的文件可以直接在裸板上执行吗?执行main之前是否需要初始化、设置堆栈等操作?如果需要,应该怎么做?
另外,因为我的工程不依赖任何库函数,printf\memset\memcpy等都是自己重新写的,所以交叉编译环境也没有下载ARM需要的内核lib,这个应该不影响吧?
先多谢各位帮忙解答的大牛们 |
|