终于successful 了,虽然还不知道为什么要那么改,疑问留着一点点解决吧.
这里用的源代码是uClinux-armsys-050101.tar.gz,可以到杭州立宇泰网站查找下载.
因为采用ARMSYSB0这块板子,处理器是SAMSUNG的S3C44B0X,所以要针对这个平台修改uClinux源代码.比如SDRAM的起始地址是0x0c 000000,flashROM的起始地址是0x00000000,还有好多,要是一个一个找的话真是太累了,幸好lyt提供了一个补丁uClinux-20040408-ARMSYS.patch,只需要简单的执行一个patch -p1<uClinux-20040408-ARMSYS.patch命令就OK了.本来也是这么想的,也是这个做的.但每次patch都提示patch文件过期,去lyt网站一看说这是最新的补丁了.耽误了一段时间又去他们的bbs,才发现这个补丁是针对uClinux的发行版本的,其实uClinux-armsys-050101.tar.gz已不需要再打补丁了.晕,说了一堆废话.
将uClinux-armsys-050101.tar.gz直接解压解压缩就可以了,当然是在Linux下,在windows下可能发生一些错误 .终端输入
tar xzvf uClinux-armsys-050101.tar.gz,在当前目录下生成uClinux-dist文件夹.
cd uClinux-dist #进入uClinux-dist目录
make menuconfig#进入内核配置,主要应用方向键,Esc,[Y],回车等根据需要进行内核的裁减,这里有一个疑问,要是在库选择时采用uC-libc就不会出现后面的问题;要是选择uClibc那到内核编译make user_only会出问题,提示出错(如果没有作一定改动的话).
make dep #寻找依存关系
make clean[可选] #清除以前构造内核时生成的所有目标文件,模块文件和一些临时文件
make lib_only #编译库文件
make user_only #编译用户应用程序文件
就是这一步令我踌躇不前,到该命令执行一段时间后出现错误了:
...
/home/Jiang/Downloads/uClinux-dist
passwd.elf2flt: In function `main':
/home/Jiang/Downloads/uClinux-dist/user/login/passwd.c:123: undefined reference to `crypt_old'
collect2: ld returned 1 exit status
make[2]: *** [passwd] 错误 1
make[2]: Leaving directory `/home/Jiang/Downloads/uClinux-dist/user/login'
make[1]: *** [all] 错误 2
make[1]: Leaving directory `/home/Jiang/Downloads/uClinux-dist/user'
make: *** [user_only] 错误 2
可能并不是相同的文件,但只要使用了它提到的未定义引用'crypt_old',就会出错.打开passwd.c看到有一个条件编译
#ifdef OLD_CONFIG_PASSWORDS
#include <crypt_old.h>
#endif
想想应该是OLD_CONFIG_PASSWORDS没有定义,也不知道定义在哪个文件夹的*.后来干脆就mask这个条件编译,直接把
#include <crypt_old.h>移了出来,其它文件也作类似处理.经过再次编译,还是出错...
都已经第二天了,还没搞出来,要辜负boss了...网上苦苦寻觅,终于觅得良方,只需要在user/下的makefile增加LIBCRYPT +=-lcrypt_old一句就OK了.
这一步过后到后面就一马平川了,make romfs,生成romfs文件系统;
make image 生成映象文件,这时可能提示出现两个错误,这是因为第一次编译时还没有romfs.o这个文件,如果再次编译就没有问题了.
最后make,大约几分钟时间.
编译完成后会在/images目录下看到三个文件image.rom,image.ram和romfs.img,接下去的事情就是将内核文件烧入到板子了..
文章来源于领测软件测试网 https://www.ltesting.net/