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