利用U-Boot實現(xiàn)uClinux向S3C44B0的移植
3.3.1 uClinux-dist源碼包的準備
從uClinux的官方網(wǎng)站下載uclinux-dist源碼包。源碼包中包含了uClinux內(nèi)核、uClibc庫和busybox等 uClinux下的用戶應(yīng)用程序,本文中下載的是uClinux-dist-20041215.tar.gz,在linux系統(tǒng)下解壓后會生成一個 uClinux-dist目錄,該目錄包含了編譯uClinux內(nèi)核需要的所有文件。在uClinux-dist目錄中包含有l(wèi)inux-2.2.x、 linux-2.4.x、linux-.2.6.x三個子目錄,就是三種版本的uClinux內(nèi)核的源碼,我們的目的是把uClinux-2.6.9版本移植到目標平臺上,所以我們還需要從http://www.kernel.org上下載linux-2.6.9.tar.bz2,從http: //www.uClinux.org上下載linux-2.6.9-uc0.patch,從Samsung的網(wǎng)站http: //www.oprensrc.sec.samsung.com上下載補丁文件linux-2.6.9-uc0.hsc0.patch。在Linux系統(tǒng)下解壓內(nèi)核Linux-2.6.9.tar.bz2并打上補丁文件linux-2.6.9-uc0.patch和linux-2.6.9-uc0- hsc0.patch,將打上補丁的2.6.9內(nèi)核改名為linux-2.6.x并替換在uClinux-dist包中的linux-2.6.x,完成移植前的準備工作。
3.3.2 uClinux-dist源碼的修改
按照如下步驟添加S3C44B0的相關(guān)文件:
# cp uClinux-dist/vendors/Samsung/4510b –r uClinux-dist/vendors/Samsung/44b0,將源代碼包中已經(jīng)有的Samsung的4510b的文件復(fù)制一份并改名為44b0 ,這一過程也可以直接用鼠標完成;
# cp linux-2.6.x/arch/armnommu/configs/s3c44b0x_defconfig
vendors/Samsung/44b0/config.linux-2.6.x,該步驟是將s3c44b0x_defconfig文件復(fù)制到44b0目錄下,該步驟同樣可以復(fù)制、粘貼完成;
雖然已經(jīng)給linux-2.6.9內(nèi)核打了補丁文件,但是我們依然需要對源代碼進行修改才能順理的編譯通過,文件的修改如下:
(1) 修改linux-2.6.x/arch/armnommu/arch/kernel/vmlinux.lds.S,添加以下內(nèi)容:
(.got)?Global offset table */
romfs_start = .;
romfs.o
romfs_end = .;
這樣修改的目的是把romfs文件系統(tǒng)連接到內(nèi)核映象中。
(2) 修改linux-2.6.x/arch/armnommu/kernel/setup.c, 添加變量romfs_start,romfs_end及修改
其設(shè)置如下:
default_command_line
extern int _stext, _text, _etext, _edata, _end;
extern int romfs_start,romfs_end;
char *from = default_command_line;
sprintf(default_command_line, root=/dev/ram0 initrd=0x%08lx,%ldk keepinitrd, (unsigned
long)romfs_start,((unsigned long)romfs_end - (unsigned long)romfs_start)>>10);
(3) 修改vendors/Micetek/44b0/rc文件中 /bin/expand /etc/ramfs.img /dev/ram1;
(4) 添加串口驅(qū)動程序,添加文件linux-2.6.x/drivers/serial/serial_s3c44b0.c和linux-2.6.x /include/asm-armnommu/arch-s3c44b0/uart.h,因為在linux-2.6.9內(nèi)核中對S3C44B0的支持并不是很好,系統(tǒng)只是提供了一個簡易的串口驅(qū)動,所以需要添加串口驅(qū)動。
3.3.3 內(nèi)核的配置與編譯
在編譯內(nèi)核之前需要進行配置,可以通過三種方式對內(nèi)核進行配置:在uClinux-dist目錄下運行make config/make menuconfig/make xconfig,其中make config是在字符界面下,make menuconfig是在字符界面下實現(xiàn)的菜單界面,make xconfig為圖形界面,三種配置方式是一致的,xconfig界面比較友好,容易掌握,但它卻沒有menuconfig菜單穩(wěn)定,而且在有些機器上運行不起來,本文是使用make menuconfig完成的。運行make menuconfig時, 程序會依次出現(xiàn)開發(fā)平臺、內(nèi)核、文件系統(tǒng)、應(yīng)用程序的配置界面, 可以根據(jù)自己的需要進行配置。配置時大部分選項可以使用其缺省值,只有小部分需要用戶根據(jù)需求進行選擇,進行內(nèi)核配置時,有3種選擇,它們分別代表的含義如下:
“Y” - 將該功能編譯進內(nèi)核;
“N” -不將該功能編譯進內(nèi)核;
“M” -將該功能編譯成可以在需要時動態(tài)插入到內(nèi)核中的模塊;
將與核心其它部分關(guān)系較遠且不經(jīng)常使用的部分功能代碼編譯成為可加載模塊,有利于減小內(nèi)核的長度,減小內(nèi)核消耗的內(nèi)存,簡化該功能相應(yīng)的環(huán)境改變時對內(nèi)核的影響,許多功能都可以這樣處理,例如網(wǎng)卡的支持、對FAT等文件系統(tǒng)的支持等。
在配置好內(nèi)核后依次執(zhí)行以下命令:
make dep; make clean; make lib_ only; make user_ only; make romfs; make image; make編譯完成之后,會在uClinux-dist/linux-2.6.x/下會生linux.bin,在uClinux-dist/images /下會生成linux.data、linux.text、image.bin等目標文件。在編譯中可能會產(chǎn)生錯誤,需要根據(jù)錯誤信息進行調(diào)試修改。
評論