Linux内核移植-移植2.6.35.4内核到s3c2440


硬件平台:FL2440

主机平台:Ubuntu 11.04

交叉编译器:arm-linux-gcc 4.3.2

本来是想移植最新的内核2.6.39但是总是在编译快完成的时候报错,有人说是新的内核对arm平台的支持不好,所以就降低了一下版本,这里移植2.6.35.4内核

一、准备工作

1、下载 解压内核

从官网上下载linux-2.6.35的内核, ftp://ftp.kernel.org/pub/linux/kernel/v2.6/ ,文件不大,约85M。

新建一个工作目录s3c2440,将内核源码包拷贝至工作目录下,再解压。 2、移植yaffs2驱动 下载最新的驱动(见 http://www.bkjia.net/thread-2408-1-1.html) 解压在工作目录s3c2440下 进入yaffs2:  cd yaffs2  给内核打补丁: ./patch-ker.sh  c ../linux-2.6.35

3、安装交叉编译环境

下载arm-linux-gcc 4.3.2,然后安装并配置环境变量

最后执行arm-linux-gcc -v查看


二、移植

 

??1、修改机器码 飞凌开发板的bootloader默认的机器码是193,所以我们在使用smdk2440机器的时候,需要修 改机器码。修改内核2.6.35.3中的arch/arm /tools/mach-types。 ?? 删掉 s3c2410      ARCH_S3C2410    S3C2410    182  然后将 s3c2440      ARCH_S3C2440    S3C2440    362  修改为 s3c2440      ARCH_S3C2440    S3C2440    193 2、指定目标板machine、编译器和编译器路径 ?修改linux-2.6.35.3/Makefile,将 ARCH                ?= $(SUBARCH)  CROSS_COMPILE        ?=  修改成ARCH                ?= arm  CROSS_COMPILE        ?= /opt/arm/4.3.2/bin/arm-linux-  注意:CROSS_COMPILE是指交叉编译器的路径,该路径一定要完整,否则最后make zImage时提示文件不存在。

3、增加devfs文件管理器的支持

我们所用的文件系统使用的是devfs文件管理器。修改fs/Kconfig

找到

menu "Pseudo filesystems"

添加如下语句:

config DEVFS_FS

         bool "/dev file system support (OBSOLETE)"

         default y    

config DEVFS_MOUNT

bool "Automatically mount at boot"

default y

depends on DEVFS_FS

 

帮助理解:Kconfig就是对应着内核的配置菜单。假如要想添加新的驱动到内核的源码中,能够修改Kconfig,

这样就能够选择这个驱动,假如想使这个驱动被编译,要修改Makefile。

4、修改晶振频率可解决打印信息乱码问题 )

文件:arch/arm/mach-s3c2440/mach-smdk2440.c

/*s3c24xx_init_clocks(16934400);*/  s3c24xx_init_clocks(12000000);

5、修改MTD分区

  1. static struct mtd_partition smdk_default_nand_part[] = {  
  2. [0] = {  
  3.         .name   = "Boot",  
  4.         .size   = 0x00100000,  
  5.         .offset = 0  
  6.     },  
  7.     [1] = {  
  8.         .name   = "MyApp",  
  9.         .size   = 0x003c0000,  
  10.         .offset = 0x00140000,  
  11.     },  
  12.     [2] = {  
  13.         .name   = "Kernel",  
  14.         .size   = 0x00300000,  
  15.         .offset = 0x00500000,  
  16.     },  
  17.     [3] = {  
  18.         .name   = "fs_yaffs",  
  19.         .size   = 0x0f000000,    //240M   
  20.         .offset = 0x00800000,  
  21.     },    
  22.     /*[4] = { 
  23.         .name   = "WINCE", 
  24.         .size   = 0x03c00000, 
  25.         .offset = 0x04400000, 
  26.     } 
  27.     */  
  28. };        

具体参考

6、关闭ECC校验

文件:drivers/mtd/nand/s3c2410.c 
函数:s3c2410_nand_init_chip

/*chip->ecc.mode = NAND_ECC_SOFT; */  chip->ecc.mode = NAND_ECC_NONE;

 

问题:关于ECC:ECC是“Error Correcting Code”的简写,中文名称是“错误检查和纠正”。ECC是一种能够实现

“错误检查和纠正”的技术,ECC内存就是应用了这种技术的内存,一般多应用在服务器及图形工作站上,这将使整个

电脑系统在工作时更趋于安全稳定。此处为避免容易出错,将ECC关闭。

7、修改nandflash驱动,支持K9F1G08nandflash

    修改drivers/mtd/nand下面的nand_bbt.c 文件:

  1. static struct nand_bbt_descr largepage_memorybased = {  
  2.         .options = 0,  
  3.         .offs = 0,  
  4.         .len = 1,           // 原数值为2,支持2K每页的flash修改为1。K9F1G08,K9F2G08是2k每页的flash   
  5.         .pattern = scan_ff_pattern  
  6. };  
  7. static struct nand_bbt_descr largepage_flashbased = {  
  8.         .options = NAND_BBT_SCAN2NDPAGE,  
  9.         .offs = 0,  
  10.         .len = 1,           //原数值为2,支持2K每页的flash修改为1。K9F1G08,K9F2G08是2k每页的flash   
  11.         .pattern = scan_ff_pattern  
  12. };  

8、下面,开始配置内核。

进入linux-2.6.35目录,把s3c2410的默认配置写入config文件。

make s3c2410_defconfig

make menuconfig

配置内核特点使用ARM EABI编译



配置文件系统选项
配置yaffs2文件系统 
修改配置如下:

 File systems  ---> 

    [*] Miscellaneous filesystems  --->

        <*>   YAFFS2 file system support 

            -*-     512 byte / page devices

            -*-     2048 byte (or larger) / page devices 

                [*]       Autoselect yaffs2 format 

                [*]     Cache short names in RAM

配置cpu相关选项
修改配置如下:

System Type  ---> 

    S3C2440 Machines  ---> 

        [*] SMDK2440

        [*] SMDK2440 with S3C2440 CPU module

去掉S3C2400 MachinesS3C2410 MachinesS3C2412 MachinesS3C2442 Machines的所有选项 

否则会报错。如果现在编译内核,下载到开发板中,内核就可以正常启动了.有了雏形,继续移植设备驱动。

这里,内核选项*代表编译至内核,M代表编译为模块 

  • 1
  • 2
  • 3
  • 下一页

相关内容