uCLinux0318 release和uCLinux20020928 release的差异
作者:陆麟
转载请征得作者同意.
2003.3.23
对于S3C4510B的系统, 我们在网上有免费的OS, uCLinux. uCLinux本身在不断地修正, 修正. 我们手头上直接能跑的乃是uClinux20020318的RELEASE.
由mac.os.nctu.edu.tw发布. 但是我们还有uCLinux正统发布单位www.uclinux.org的最新发布版本uClinux20020928.
有一点要声明, uCLinux和Linux一样, 毕竟不是商业软件, 文档的烂可想而知, 很多东西需要亲自看SOURCE CODE才能了解. 术业有专攻,
如果是COMPILER出的问题, 我也无能为力.
好, 会到正题. uCLinux0318版本是我唯一的不加修改就能跑的版本. 但是, 如果你直接BUILD, 一定错误百出. 而uCLinux0928版本,
是唯一可以直接BUILD的版本. 但是BUILD好, 却是不能跑的. :D
这就引发了本文. 介绍2者的差异.
0928十分方便, 直接
1. 解包
2. MAKE MENUCONFIG... 选好PLATFORM类型为S3C4510B.
3. make dep
4. make
乃是标准的LINUX操作步骤. 会LINUX BUILD的就会.
0318的正确BUILD顺序是
1. 解包
2. MAKE MENUCONFIG... 选好PLATFORM类型为S3C4510B.
3. make dep
4. make lib_only
5. make user_only
6. make romfs
7. make image
8. make
来解释一下4-8的含义.顺便介绍差异.
make lib_only的功能是将用户选定的library BUILD出来. 记得选默认的LIB, UCLINUX提供2个LIBC的实现. 均是LIBC的简化版本.
用于嵌入式系统. 在0928RELEASE中,libc, uc-libc2个LIBC都可以正常通过BUILD.而在0318RELEASE中,uc-libc无法正确通过BUILD...
make user_only的功能是将USER MODE的部分先行BUILD出来. 缺省状况下会有约6~700K的东西被吸收到最终的ROMFS中.
make romfs是将USER MODE的工具集中到/xxxrelase/romfs目录下.
make image十分重要, 会生成一个romfs.o的文件. 但是, 在这一步, 你却会遇到一个ERROR. 搞得MAKE是以ERROR收场...
好烂啊.
执行make. 咦,完成了. 一个RELEASE出来了. 见鬼!!! 这就是0928和0318的差异. 0318的MAKEFILE没有十分完善.
导致直接BUILD会有一个OBJ依赖关系无法处理妥当.这个OBJ就是romfs.o. 而0928的BUILD就没有这个问题了.
这个ROMFS.O, 乃是ROMFS的真正IMAGE. 但是,在0318RELEASE的处理中, 被搞成一个OBJ. 然后LINK到了linux的.text
section中. 而0928对ROMFS IMAGE的处理则是将ROMFS.IMG cat到linux最终IMAGE的尾部.
在0928的RELEASE中, BUILD出的IMAGE无法正常运行. 这是因为在blcmem.c中竟然少了针对SAMSUNG CONFIG的ROM代码.
对于其他的PLATFORM, 均有对应的特定的处理代码. 而唯独SAMSUNG那段漏了. 这样, 我们需要手工修改SAMSUNG部分的代码. 使得/dev/rom0对应的AREANA0正确地指到ROMFS处的偏移.
否则东西就无法RUN了.
ROMFS被LINK到TEXT SECTION的好处在于如果BLKMEM从0地址开始搜索ROMFS. 不会有任何问题. 而ROMFS被CAT到linux文件的尾部,
就要求BLKMEM的代码必须从ROM的开始地址开始搜索ROMFS, 否则, 从RAM中搜到的ROMFS会在任意的时刻被其他内容覆盖...
本站即将推出S3C4510的开发板(可不是SAMSUNG的开发版, 是自己公司LAY出的哦)和S3C4510的UCLINUX TECH SUPPORT.
SUPPORT方式和收费额度正在考虑中, 主要是以公司对公司年度合约方式,提供各种级别的SUPPORT,从提供指导性信息到代客定制. 如果诸位有什么意见也可以MAIL给我.
记得是[email protected].