分享
 
 
 

Arm-elf编译工具链的编译及Minigui

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

Arm-elf编译工具链的编译

一、环境说明

PC-CPU:i386

操作系统:Fedora II

操作系统自带GCC:version 3.3.3 20040412 (Red Hat Linux 3.3.3-7)

嵌入式CPU:ARM 920T

嵌入式内核:uClinux-Samsung-2510

嵌入式图形系统:Minigui-1.3.3

嵌入式应用程序:Mgdillo(浏览器)

二、重新编译原因

1.方案一采用20011219 版arm-elf编译器

购买的测试开发板自带uClinux-Samsung-2510内核以及其编译器版本为20011219的。但在编译Minigui时出现很多难以解决的编译错误(Minigui推荐的版本为20030314)。

2.方案二采用20030314 版arm-elf编译器

若采用20030314版本来编译内核,能编译出来,代码却不能完全运行①,但可以拷贝20011219的elf2flt文件覆盖原来的文件,再编译内核就可以了。接着来编译Mgdillo,解决一些编译问题后,最后链接时出现一个无法修正的严重错误②。

由于上两种方案都不行,据网络信息说明可能要升级整个编译工具,因此就有下面系列工作了。

注:①BINFMT_FLT:reloc outside program ! init

②关于ld.real的段错误

三、编译前的源码准备

1. 下载工具链

进入http://www.uclinux.org/pub/uClinux/arm-elf-tools/tools-20030314/有如下文件,见备注栏说明

文件名

备注

STLport-4.5.3.patch

需要

STLport-4.5.3.tar.gz

需要

binutils-2.10-full.patch

需要升级不下载

binutils-2.10.tar.bz2

需要升级不下载

build-uclinux-tools.sh

需要

elf2flt-20030314.tar.gz

需要

elf2flt-cygwin-020612.patch

不需要

gcc-2.95.3-arm-mlib.patch

需要

gcc-2.95.3-arm-pic.patch

需要

gcc-2.95.3-arm-pic.patch2

需要

gcc-2.95.3-cygwin-020611.patch

不需要

gcc-2.95.3-full.patch

需要

gcc-2.95.3-sigset.patch

需要

gcc-2.95.3.tar.gz

需要

genromfs-0.5.1-cygwin-020605.patch

不需要

genromfs-0.5.1.tar.gz

需要

uClibc-0.9.19.patch.gz

需要升级不下载

uClibc-20030314.tar.gz

需要升级不下载

2. Binutils高版本下载

进入http://ftp.gnu.org/gnu/binutils 下载 binutils-2.11.2.tar.gz 文件

3. uClibc高版本下载

进入http://www.uclibc.org/downloads/ 下载文件 uClibc-0.9.26.tar.gz和uClibc-locale-030818.tgz 。

4. 说明

所有下载的文件都先不解压缩放到自己一个目录中。

四、部分源码的升级说明

1. Binutils的升级说明

把binutils-2.11.2.tar.gz 解压到当前目录会产生一个binutils-2.11.2目录,在文件build-uclinux-tools.sh中的一些操作都是争对binutils-2.10的,所以只要相对应的修改,并注释掉对binutils-2.10的升级语句就可以了。

2. uClibc的升级修改

把uClibc-0.9.26.tar.gz解压到本目录,产生 uClibc-0.9.26的目录,文件名许改为uClibc 。

复制uClibc-locale-030818.tgz(无需解压)到uClibc\extra\locale目录中。因为Mgdillo的编译需要locale的支持。

修改uClibc/extra/Configs/config.in,在文件中有一段choice 和 endchoice包的代码,这结代码包函了Malloc的配置。删除整个段。采用下面代码

config MALLOC

bool "malloc"

default y

config MALLOC_SIMPLE

bool "malloc-simple"

default n

config MALLOC_STANDARD

bool "malloc-standard"

depends on UCLIBC_HAS_MMU

因为在整个编译过程中不允许出现编译配置确认的等待,必须全部配置完成。但choice的代码会不断的提示确认。

配置生成.config文件,在uClibc目录中运行

make oldconfig CROSS=arm-elf TARGET_ARCH=arm

就会出现配置操作过程,根据实际情况选择。配置完成后就在uClibc目录中产生一个.config文件,它包含了所以的配置。复制该文件到uClibc/extra/Configs/目录中并改名为Config.arm.default 。下面是我所配置的Config.arm.default的内容

#

# Automatically generated make config: don't edit

#

# TARGET_alpha is not set

TARGET_arm=y

# TARGET_cris is not set

# TARGET_e1 is not set

# TARGET_h8300 is not set

# TARGET_i386 is not set

# TARGET_i960 is not set

# TARGET_m68k is not set

# TARGET_microblaze is not set

# TARGET_mips is not set

# TARGET_powerpc is not set

# TARGET_sh is not set

# TARGET_sparc is not set

# TARGET_v850 is not set

#

# Target Architecture Features and Options

#

HAVE_ELF=y

TARGET_ARCH="arm"

# CONFIG_GENERIC_ARM is not set

# CONFIG_ARM610 is not set

# CONFIG_ARM710 is not set

# CONFIG_ARM720T is not set

CONFIG_ARM920T=y

# CONFIG_ARM922T is not set

# CONFIG_ARM926T is not set

# CONFIG_ARM_SA110 is not set

# CONFIG_ARM_SA1100 is not set

# CONFIG_ARM_XSCALE is not set

ARCH_LITTLE_ENDIAN=y

# ARCH_BIG_ENDIAN is not set

# ARCH_HAS_NO_MMU is not set

# UCLIBC_HAS_MMU is not set

UCLIBC_HAS_FLOATS=y

# HAS_FPU is not set

UCLIBC_HAS_SOFT_FLOAT=y

DO_C99_MATH=y

WARNINGS="-Wall"

KERNEL_SOURCE="/home/houen/arm-elf-toolschain/linux-2.4.x"

UCLIBC_UCLINUX_BROKEN_MUNMAP=y

EXCLUDE_BRK=y

C_SYMBOL_PREFIX=""

HAVE_DOT_CONFIG=y

#

# General Library Settings

#

# HAVE_NO_PIC is not set

# DOPIC is not set

# HAVE_NO_SHARED is not set

# ARCH_HAS_NO_LDSO is not set

# UCLIBC_PIE_SUPPORT is not set

UCLIBC_CTOR_DTOR=y

# UCLIBC_PROPOLICE is not set

# UCLIBC_PROFILING is not set

# HAS_NO_THREADS is not set

UCLIBC_HAS_THREADS=y

# PTHREADS_DEBUG_SUPPORT is not set

UCLIBC_HAS_LFS=y

MALLOC=y

MALLOC_GLIBC_COMPAT=y

UCLIBC_DYNAMIC_ATEXIT=y

# HAS_SHADOW is not set

# UNIX98PTY_ONLY is not set

# ASSUME_DEVPTS is not set

# UCLIBC_HAS_TM_EXTENSIONS is not set

# UCLIBC_HAS_TZ_CACHING is not set

# UCLIBC_HAS_TZ_FILE is not set

#

# Networking Support

#

# UCLIBC_HAS_IPV6 is not set

# UCLIBC_HAS_RPC is not set

#

# String and Stdio Support

#

UCLIBC_HAS_CTYPE_TABLES=y

UCLIBC_HAS_CTYPE_SIGNED=y

UCLIBC_HAS_CTYPE_UNSAFE=y

# UCLIBC_HAS_CTYPE_CHECKED is not set

# UCLIBC_HAS_CTYPE_ENFORCED is not set

UCLIBC_HAS_WCHAR=y

UCLIBC_HAS_LOCALE=y

UCLIBC_PREGENERATED_LOCALE_DATA=y

# UCLIBC_DOWNLOAD_PREGENERATED_LOCALE_DATA is not set

# UCLIBC_HAS_XLOCALE is not set

# UCLIBC_HAS_HEXADECIMAL_FLOATS is not set

# UCLIBC_HAS_GLIBC_DIGIT_GROUPING is not set

# UCLIBC_HAS_GLIBC_CUSTOM_PRINTF is not set

UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9

# UCLIBC_HAS_SCANF_GLIBC_A_FLAG is not set

# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set

# UCLIBC_HAS_STDIO_BUFSIZ_256 is not set

# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set

# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set

# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set

UCLIBC_HAS_STDIO_BUFSIZ_4096=y

# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set

UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y

# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set

# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set

UCLIBC_HAS_STDIO_GETC_MACRO=y

UCLIBC_HAS_STDIO_PUTC_MACRO=y

UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y

# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set

# UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE is not set

# UCLIBC_HAS_GLIBC_CUSTOM_STREAMS is not set

# UCLIBC_HAS_PRINTF_M_SPEC is not set

UCLIBC_HAS_ERRNO_MESSAGES=y

# UCLIBC_HAS_SYS_ERRLIST is not set

UCLIBC_HAS_SIGNUM_MESSAGES=y

# UCLIBC_HAS_SYS_SIGLIST is not set

# UCLIBC_HAS_GETTEXT_AWARENESS is not set

UCLIBC_HAS_GNU_GETOPT=y

#

# Big and Tall

#

UCLIBC_HAS_REGEX=y

# UCLIBC_HAS_WORDEXP is not set

# UCLIBC_HAS_FTW is not set

UCLIBC_HAS_GLOB=y

#

# Library Installation Options

#

RUNTIME_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/"

DEVEL_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/usr/"

#

# uClibc development/debugging options

#

# DODEBUG is not set

# DOASSERTS is not set

# UCLIBC_MALLOC_DEBUGGING is not set

# UCLIBC_MJN3_ONLY is not set

这样理论上在编译过程中就不会出现配置提示了,但不知什么原因还是出现了。但可以另外方法解决。

修改 build-uclinux-tools.sh 的fix_uclibc_config()函数。许改部分如下

echo '# UCLIBC_HAS_MMU is not set'

echo '# HAVE_SHARED is not set'

echo '# BUILD_UCLIBC_LDSO is not set'

echo '# HAS_SHADOW is not set'

echo 'MALLOC=y'

echo '# MALLOC_SIMPLE is not set'

echo 'MALLOC_GLIBC_COMPAT=y'

echo '# MALLOC_930716 is not set'

echo '# UNIX98PTY_ONLY is not set'

echo 'UCLIBC_CTOR_DTOR=y'

echo 'UCLIBC_DYNAMIC_ATEXIT=y'

echo '# UCLIBC_MALLOC_DEBUGGING is not set'

echo "UCLIBC_HAS_WCHAR=y"

echo "UCLIBC_HAS_LOCALE=y"

echo "UCLIBC_HAS_THREADS=y"

echo "# DOPIC is not set"

修改uClibc/libc/unistd/exec.c,这个文件不知道是不是一个 bug,在编译的时候该文件会被编译很多次,不同的预定义条件产生多个.o文件。

L_execl -> execl.o

L_execv -> execv.o

L_execle -> execle.o

L_execlp -> execlp.o

L_execvp ->execvp.o

在文件中还存在L___exec_alloc的定义,它包含的两个函数没有被编译进去,因而链接应用程序时会产生链接错误,没定义_exec_alloc 和__exec_free。根据实际情况我做了如下修改,把L___exec_alloc修改为 L_execl把_exec_alloc 和__exec_free 编译到execl.o中。

3. 其他修改

修改 build-uclinux-tools.sh 的multilib_table() 函数

注释片断如下几行

#echo "mbig-endian/fp

#echo "mbig-endian/fp

#echo "mbig-endian/ma

#echo "mbig-endian/fp

#echo "mbig-endian/fp

因为系统为小端的,uclibc的配置也是小端的。

在build-uclinux-tools.sh文件开头,有 PREFIX=/usr/local设置安装路径。

五、编译及可能碰到的问题

1.正式编译

编译前还需解压elf2flt-20030314.tar.gz,生成一个elf2flt的目录。在当前目录中还需要产生一个链接指向嵌入式内核链接名为linux-2.4.x 。

在当前路径运行

./build-uclinux-tools.sh build 2>&1 | tee errs

就开始编译了

2.问题解决

在build-uclinux-tools.sh文件末尾有一些 stage1 stage2的函数调用。你可以根据目录中产生的stage文件,查看进度。若出现stage1则表明函数stage1执行完成了。

在编译过程中产生了问题,可以注释掉其他stage,仅仅调试错误的stage了。还有一个error文件是整个编译的过程,对除错有很大的帮助。

4. 编译内核的问题

这样编译出来的内核还是不能运行在开发办中。经过测试,还是需要内核自带编译器的elf2flt覆盖到 usr/local/arm-elf/bin中。

5.

六、加入Minigui的编译环境

在Fedora中编译Minigui会产生一个错误,应该是汇编语句的错误。可以如下进行修改

在原来的文件中可能是这样书写的

(“

abcd

“ …..

修改为

(“abcd”

空一行

……

假设路径就是/usr/local

CC=arm-elf-gcc AR=arm-elf-ar RANLIB=arm-elf-ranlib LDFLAGS="-elf2flt" ./configure

--prefix="/usr/local/arm-elf"

--host=arm-elf

--build=i386-linux

--disable-shared

--enable-lite=yes

--enable-video-fbcon=yes

--enable-nativegal=yes

--enable-nativeial=yes

--enable-newgal=yes

--enable-timerunitms=no

--enable-nativegalqvfb=no

--enable-fblin8=no

--enable-fblin16=no

--enable-fblin24=no

--enable-fblin32=yes

--enable-dummyial=yes

--enable-qvfbial=no

--enable-nativeps2=no

--enable-nativeimps2=no

--enable-nativems=no

--enable-nativems3=no

--enable-nativegpm=no

--enable-textmode=no

--enable-rbfsupport=yes

--enable-rbfgb12=no

--enable-vbfsupport=no

--enable-fontsserif=no

--enable-fontcourier=no

--enable-fontsymbol=no

--enable-fontvgas=no

--enable-qpfsupport=no

--enable-ttfsupport=no

--enable-type1support=no

--disable-ttfsupport

--enable-latin2support=no

--enable-latin3support=no

--enable-latin4support=no

--enable-latin9support=yes

--enable-gbsupport=yes

--enable-gbksupport=no

--enable-big5support=no

--enable-unicodesupport=no

--enable-savebitmap=yes

--enable-gifsupport=yes

--enable-jpgsupport=no

--enable-pngsupport=no

--enable-imegb2312=no

--enable-imegb2312py=no

--enable-aboutdlg=yes

--enable-savescreen=no

--enable-tinyscreen=no

--enable-extfullgif=no

--enable-video-dummy=no

--enable-extskin=no

make

make install

七、Mgdillo的编译

./autogen

LIBS="-lminigui -lm -lpthread" CC=arm-elf-gcc AR=arm-elf-ar

RANLIB=arm-elf-ranlib

LDFLAGS="-elf2flt "

./configure

--host=arm-elf

--build=i386-linux --enable-shared=no

make

可执行文件在src中

八、

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有