主题 : 版主,请教为mini2440编译busybox的问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 59757
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
综合积分: 16 分
注册时间: 2011-11-29
最后登录: 2012-01-12
楼主  发表于: 2011-12-01 19:24

 版主,请教为mini2440编译busybox的问题

版主,您好;
请教一下编译mini2440上的busybox的问题;
使用的编译器:gcc version 4.5.2 (Sourcery G++ Lite 2011.03-41,下载于codesoucery);
内核版本:linux2.26.32.2 (下载于kernenl.org);
busybox版本:linux-busybox-mini2440-1.13.3.tgz(下载于友善官网)
我参考了http://www.aiothome.net/read.php?tid-2986.html这个帖子,使用您提供的busybox,可以成功启动;
但是使用您提供的.config文件,并配置Makefile中:
ARCH ?=armv4t
CROSS_COMPILE ?=/home/.../bin/arm-none-linux-gnueabi-
自己编译,得到的busybox获得以下Log:
...
s3c2410-rtc s3c2410-rtc: setting system clock to 2011-12-01 14:09:08 UTC (1322748548)
yaffs: dev is 32505859 name is "mtdblock3" rw
yaffs: passed flags ""
VFS: Mounted root (yaffs filesystem) on device 31:3.
Freeing init memory: 124K
Kernel panic - not syncing: Attempted to kill init!
[<c002db60>] (unwind_backtrace+0x0/0xcc) from [<c02c1858>] (panic+0x3c/0x118)
[<c02c1858>] (panic+0x3c/0x118) from [<c003d70c>] (do_exit+0x58/0x58c)
[<c003d70c>] (do_exit+0x58/0x58c) from [<c003df0c>] (do_group_exit+0x88/0xbc)
[<c003df0c>] (do_group_exit+0x88/0xbc) from [<c0046350>] (get_signal_to_deliver+0x31c/0x354)
[<c0046350>] (get_signal_to_deliver+0x31c/0x354) from [<c002a560>] (do_signal+0x64/0x5bc)
[<c002a560>] (do_signal+0x64/0x5bc) from [<c002af70>] (do_notify_resume+0x14/0x5c)
[<c002af70>] (do_notify_resume+0x14/0x5c) from [<c0027ea8>] (work_pending+0x1c/0x20)
至此挂起

请问可能存在什么原因呢?
感觉应该不是编译器的配置或者编译的内核的问题,
因为内核可以成功启动您提供的busybox,同样友善提供的qtopia的文件系统也可以启动;
编译器的话配置busybox中的Makefile应当可行吧。。。
级别: 新手上路
UID: 59757
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
综合积分: 16 分
注册时间: 2011-11-29
最后登录: 2012-01-12
1楼  发表于: 2011-12-01 19:40
我使用arm-none-linux-gnueabi-readelf查看自己编译的busybox

$arm-none-linux-gnueabi-readelf -A busybox
Attribute Section: aeabi
File Attributes
  Tag_CPU_name: "5TE"
  Tag_CPU_arch: v5TE
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-1
  Tag_ABI_PCS_wchar_t: 4
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-byte
  Tag_ABI_align_preserved: 8-byte, except leaf SP
  Tag_ABI_enum_size: int
  Tag_DIV_use: Not allowed

同样使用readelf查看您提供的busybox
$arm-none-linux-gnueabi-readelf -A busybox
Attribute Section: aeabi
File Attributes
  Tag_CPU_name: "4T"
  Tag_CPU_arch: v4T
  Tag_ARM_ISA_use: Yes
  Tag_ABI_PCS_wchar_t: 4
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-byte
  Tag_ABI_align_preserved: 8-byte, except leaf SP
  Tag_ABI_enum_size: int

很明显前者基于的架构armv5,可是为什么呢,Makefile中这么配置不行吗?
级别: 新手上路
UID: 59757
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
综合积分: 16 分
注册时间: 2011-11-29
最后登录: 2012-01-12
2楼  发表于: 2011-12-01 19:56
同样修改linux2.26.32.2内核中的Makefile,进行编译,查看代码得到如下结果:

$arm-none-linux-gnueabi-readelf -A vmlinux
Attribute Section: aeabi
File Attributes
  Tag_CPU_name: "4T"
  Tag_CPU_arch: v4T
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-1
  Tag_ABI_PCS_wchar_t: 4
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-byte
  Tag_ABI_enum_size: int
  Tag_DIV_use: Not allowed
级别: 新手上路
UID: 59757
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
综合积分: 16 分
注册时间: 2011-11-29
最后登录: 2012-01-12
3楼  发表于: 2011-12-01 20:11
问题解决了。。。
编译参数中不仅要指定CPU的架构,还需指定具体的CPU型号,
Makefile中添加 -mtune=arm920t
这样似乎解决了问题,但是还是不清楚为什么单纯指定CPU架构不行。。。
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
4楼  发表于: 2011-12-01 22:44
在我看来,参数里的-march=armv4t才是决定ARM指令集的。
"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."