歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> mini2440 移植Linux2.6.30.10 及yaffs2文件系統

mini2440 移植Linux2.6.30.10 及yaffs2文件系統

日期:2017/2/28 16:15:03   编辑:Linux教程

研究了四天linux內核移植和文件系統制作,總算移植成功,在這裡和大家分享一下,我是一個初學者,有不對的地方,請大家指點。

一,准備工作
1,內核版本:2.6.30.10
busybox 1.13.0
編譯器:arm-linux-3.4.1
文件系統:yaffs2
平台:mini2440
2,移植linux
1)Linux 2.6.30.10的下載地址:
http://www.kernel.org/

2)yaffs2文件系統的下載地址:
http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/
點擊Download GNU tarball,下載cvs-root.tar.gz
3)busybox的下載地址:
http://www.linuxidc.com/Linux/2011-02/32615.htm
我用的是busybox-1.13.0.tar.bz2
4)下載mkyaffs2image
http://www.linuxidc.net/thread-2226-1-1.html

二、移植內核
1,解壓內核源碼包
# tar jxvf linux-2.6.30.10.tar.bz2 -C /opt/FriendlyARM/mini2440/

2,進入內核目錄
# cd /opt/FriendlyARM/mini2440/linux-2.6.30.10

3,修改頂層Makefile
# gedit Makefile
在193行
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
修改為
ARCH ?=arm
CROSS_COMPILE ?=arm-linux-

4,修改機器碼
# gedit arch/arm/tools/mach-types
在379行
s3c2440 ARCH_S3C2440 S3C2440 362
修改為
s3c2440 ARCH_S3C2440 S3C2440 782
與supervivi傳入的機器碼參數一致即可!

5,修改時鐘頻率
# gedit arch/arm/mach-s3c2440/mach-smdk2440.c
在160行

static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
//s3c24xx_init_clocks(16934400); //注釋這句,加入下一句
s3c24xx_init_clocks(12000000);
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}

6,修改Nand Flash分區
# gedit arch/arm/plat-s3c24xx/common-smdk.c
在109行

static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "supervivi",
.size = 0x00030000,
.offset = 0,
},
[1] = {
.name = "Kernel",
.offset = 0x00050000,
.size = 0x00200000,
},
[2] = {
.name = "root",
.offset = 0x00250000,
.size = 0x03dac000,
}
};

7,加入對yaffs2文件系統的支持

1,解壓yaffs2文件系統源碼包
# tar zxvf cvs-root.tar.gz -C /opt/FriendlyARM/mini2440/

2,進入yaffs2源碼目錄
# cd /opt/FriendlyARM/mini2440/cvs/yaffs2

3,打補丁
# ./patch-ker.sh c ../../linux-2.6.30.10
Updating ../../linux-2.6.30.10/fs/Kconfig
Updating ../../linux-2.6.30.10/fs/Makefile

8,配置內核
# cp arch/arm/configs/s3c2410_defconfig .config
# make menuconfig
1,機器類型只選以下三項:

System Type ---> S3C2410 Machines ---> [*] SMDK2410/A9M2410
S3C2440 Machines ---> [*] SMDK2440
[*] SMDK2440 with S3C2440 CPU module

2,我用得編譯器是3.4.1沒有配置Kernel Feature


3,File systems ---> [*] Miscellaneous filesystems ---> <*> YAFFS2 file system support

4,Boot options-
noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0

9,重新編譯內核
# make zImage
注意:如果是重新編譯內核需要遵守以下步驟:
1、make dep
make dep的意思就是說:如果你使用程序A(比如支持特殊設備),而A需用到B(比如B是A的一 個模塊/子程序)。而你在做 make config的時候將一個設備的驅動 由內核支持改為module,或取消支持,這將可能影響到B的一個參數的設置,需重新編譯B,重新編譯或連接A....如果程序數量非常多, 你是很難手工完全做好此工作的。make dep實際上讀取配置過程生成的配置文件,來創建對應於配置的依賴關系樹,從而決定哪些需要編譯而那些不需要編譯。所以,你要make dep。
2、make clean
清除一些以前留下的文件,比如以前編譯生成的目標文件,這一步必須要進行。否則,即使內核配置改動過,編譯內核時還是將原來生成的目標文件進行連接,而不生成改動後的文件。
3、make zImage
Linux內核有兩種映像:一種是非壓縮內核,叫 Image,另一種是它的壓縮版本,叫zImage。根據內核映像的不同,Linux內核的啟動在開始階段也有所不同。zImage是Image經過壓縮形成的,所以它的大小比 Image小。但為了能使用zImage,必須在它的開頭加上解壓縮的代碼,將 zImage解壓縮之後才能執行,因此它的執行速度比Image要慢。但考慮到嵌入式系統的存儲空容量一般比較小,采用zImage可以占用較少的存儲空間,因此犧牲一點性能上的代價也是值得的,所以一般的嵌入式系統均采用壓縮內核的方式。
編譯完成後,會在內核目錄arch/arm/boot/下生成zImage內核映像文件。

Copyright © Linux教程網 All Rights Reserved