2009年4月20日星期一

X5平台上几个问题的思考

作者:Sam(甄峰) sam_code@hotmail.com



问题1:
Sam在使用X5平台时,发现如果kernel升级一次(kernel版本没有变化),则之前编译好的modules insmod时会出现错误:
Unknown symbol in module (-1): No such file or directory

Sam刚开始想当然的认为是因为有人对kernel中版本信息作了变化。于是打开:include/linux/version.h。却发现其中UTS_RELEASE并没变化。
感觉非常奇怪。这个问题等待之后解决。

问题2:
Sam在使用X5平台时。通常是使用芯片提供商提供的Makefile直接编译出kernel.后来有一次无意中自己进入kernel目录,make menuconfig;make clean;make dep;make bzImage
得到的Image直接烧入,发现出错。
HiBoot 1.1.0.0 (Jan 8 2009 - 12:16:13)
HiBoot code: 60E00000 -> 60E37254
BSS: -> 60E62888
RAM Configuration: Bank #0: 60000000 128 MB Flash: 16 MB MAC: 00-00-00-00-00-02
Hit any key to stop autoboot: 0
Bad Magic Number

Sam检查多次,也没发现自己做错了什么。于是去查看芯片提供商给的外部Makefile.
其实很简单,就是copy 他们的config到linux-2.6.14/.config
然后编译kernel.最后则作了个特殊处理:
#mk-ulinux $(LINUXDIR) 0x60a00000 kernel-2.6.14-hi
Sam怀疑这是对kernel Image做了重新编排,加入一些标志然后作成kernel-2.6.14-hi。然后在u-boot中检查这些标志。
这是嵌入式系统中常用的一些做法,Sam竟然没想到,真不应该。


问题3:
在X5平台上,Sam使用动态库,编译时没问题,但运行时会报错:
Can't modify xxx.so's text section. Use GCC option -fPIC for shared objects, please.
但Sam其实在编译SO时使用了参数 -shared -fpic.
所以怀疑是编译器的问题。
Sam之前做交叉编译器都是用工具作的,对里面很多东西并不了解。看来什么时候需要具体作一个了。把类似:缺省 -I, -L目录,CPU类型等等全搞清楚。

没有评论: