終於suclearcase/" target="_blank" >ccessful 了,雖然還不知道為什麼要那麼改,疑問留著一點點解決吧.
這裡用的源代碼是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,接下去的事情就是將內核文件燒入到板子了..