主题 : 关于《嵌入式linux应用开发完全手册》一书 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 4875
精华: 0
发帖: 32
金钱: 325 两
威望: 321 点
综合积分: 64 分
注册时间: 2009-04-01
最后登录: 2010-03-02
楼主  发表于: 2009-05-09 10:57

 关于《嵌入式linux应用开发完全手册》一书


版主您好,相信您一定看过 韦东山编著的《嵌入式linux应用开发完全手册》一书,
但是在实验本书的一些例程的时候,我发现一些自己无法解决的错误,希望能够得到帮助。

我使用的是QQ2440V3的板子,最近按照本书的第15章 u-boot的分析和移植的方法来移植u-boot的时候发现总是会出现错误,错误如下
我的实验步骤:(1)新建开发板相应目录和文件(此步骤没问题)
                        (2)修改SDRAM的配置(此步骤没问题)
                          (3)  增加对S3C2440的支持
                                     1。修改board/100ask24x0/100ask24x0.c
                                      2. 修改cpu/arm920t/s3c24x0/speed.c(问题可能处在这里)
修改完上面的设置:执行命令 make distclean
                                               make 100ask24x0_config
                                               make all
出现如下错误:speed.c:1: warning: target CPU does not support interworking
speed.c: In function 'get_HCLK':
speed.c:114: error: 'S3C24X0_CLOCK_POWER' has no member named 'CAMDIVN'
speed.c: In function 'get_PCLK':
speed.c:154: error: 'S3C24X0_CLOCK_POWER' has no member named 'CAMDIVN'
make[1]: *** [speed.o] 错误 1
make[1]:正在离开目录 `/opt/FriendlyARM/QQ2440/u-boot-1.1.6/cpu/arm920t/s3c24x0'
make: *** [cpu/arm920t/s3c24x0/libs3c24x0.a] 错误 2

不知该如何解决,请求帮助

(注明:在没有修改任何文件之前曾经使用 make smdk2410_config    make all  成功编译了u-boot,不知这是否可以说明我的交叉编辑链是没有问题的(我使用的是4.3.2 ))
注:希望您能给我一个支持软浮点的交叉编译链的下载地址~~~~
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2009-05-09 13:38
抱歉,我没有看过这本书,也不清楚按照书本修改的U-Boot是什么样的。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 4875
精华: 0
发帖: 32
金钱: 325 两
威望: 321 点
综合积分: 64 分
注册时间: 2009-04-01
最后登录: 2010-03-02
2楼  发表于: 2009-05-11 21:48
错误问题解决了,方法是在u-boot-1.1.6/include/s3c24x0.h中添加一行
     S3C24X0_REG32    CLKCON;
     S3C24X0_REG32    CLKSLOW;
     S3C24X0_REG32    CLKDIVN;
        S3C24X0_REG32    CAMDIVN;  /*此行为添加行*/





*******************************************


另外,关于编译U-boot时3.4.1提示不支持软浮点运算   出错的问题,
也解决了。方法如下
:uboot移植参考说明:

       该移植有部分移植参考互联网资源,如有侵权,请与我联系。大部分为自己原创,如有转载请注明出处,该技术仅供学习交流,不可商用。------小盒子  于哈尔滨2009年03月10日整理

这里介绍一下有关编译器的问题,如果你使用的交叉编译器版本不是3.4.1,你可以跳过此节。注意使用3.3.2版本的也需要看一下,后面有一个小地方需要修改一下。

如果你使用的是3.4.1在编译u-boot的时候大多数人会遇到以下这样的错误,这个时候你别紧张,这里给你提供了一个好的解决办法:

rm-linux-ld:ERROR:usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_udivdi3.oS) uses hardware FP, whereas u-boot uses software FP

arm-linux-ld:failed to merge target specific data of file /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_udivdi3.oS)

arm-linux-ld: ERROR: /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_clz.oS) uses hardware FP, whereas u-boot uses software FP

arm-linux-ld: failed to merge target specific data of file /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_clz.oS)

make: *** [u-boot] Error 1

解决的办法:

找到/u-boot-1.1.4/cpu/arm920t/config.mk文件

该文件内容如下所示:

PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 \

       -msoft-float



PLATFORM_CPPFLAGS += -march=armv4

# =========================================================================

#

# Supply options according to compiler version

#

# =========================================================================

PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)

PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))



修改该文件:

PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 \

#     -msoft-float



PLATFORM_CPPFLAGS += -march=armv4

# =========================================================================

#

# Supply options according to compiler version

#

# =========================================================================

PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32)#,-mabi=apcs-gnu)

PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))

请注意紫色部分的修改!

问题是编译链接器3.4.1用的是hardware FP,而u-boot 使用的是 software FP 也可以使用2.95或者3.3.2版本可解决这个问题。

如果使用3.3.2编译器编译出错的话

编译错误:error: invalid option `abi=apcs-gnu'

出错原因:

指示编译器不支持选项 -mabi=apcs-gnu

出错的文件是/cpu/arm920t/下的config.mk

函数cc-option用于检查编译器是否支持给定的选项

在PLATform_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)中

apcs:指的是 ARM 过程调用标准

apcs-32和apcs-gnu是APCS 标准中的两个版本。

在上边脚本中cc-option首先检查是否支持apcs-32标准,如果不支持的话就使用apcs-gnu标准,而3.3.2 arm-linux-gcc也不支持apcs-gnu标准,所以出错。而PLATform_CPPFLAGS +=$(call cc-option,-mapcs-32,$(call cc-option,-mabi=apcs-gnu,))

脚本中如果给定的两个标准都不支持的话就不指定了。



如果你用的是3.3.2版本你可以按照我的修改



PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32)#,-mabi=apcs-gnu)

PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))



连载三先到这里吧,这里解决了有关交叉编译环境版本与u-boot编译参数配置的问题。下面请关注《【原创】u-boot移植-->连载四》开始修改源码。

PS:自从《【原创】u-boot移植-->连载二》写完之后没几天,我生活发生一些变化,导致我的心思没能放到这里来,最后忘记了连载的问题,这里小盒子谢谢北京这位朋友的提醒!(转贴)
级别: 新手上路
UID: 5635
精华: 0
发帖: 19
金钱: 190 两
威望: 190 点
综合积分: 38 分
注册时间: 2009-05-01
最后登录: 2010-03-11
3楼  发表于: 2009-05-17 23:24
班组好,我也买了本《嵌入式linux应用开发完全手册》,在做第8章nand flash实验时,按照书中代码《见附件》,结果为四个灯一起亮,不知道是什么原因,麻烦你帮忙分析一下,十分感谢
附件: nand.rar (4 K) 下载次数:10