linux-2.6.14内核移植

来源:互联网 发布:jquery定义一个数组 编辑:程序博客网 时间:2024/04/30 05:24

下载linux-2.6.14.1.tar.bz2

tar -zxvf linux-2.6.14.1.tar.bz2

下载arm-linux-3.4.1.tar.jz

tar -jxvf arm-linux-3.4.1.tar.jz

修改内核目录树根下的的 Makefile,指明交叉编译器

[arm@localhost linux-2.6.14]# vi Makefile

找到 ARCH 和 CROSS_COMPILE,修改(大约在183行)

ARCH            ?= arm

CROSS_COMPILE   ?= /usr/local/arm/3.4.1/bin/arm-linux-

修改环境变量   将交叉编译工具路径和内核路径加入环境变量

[arm@localhost linux-2.6.14]# vi /etc/profile

在最后添加 export PATH=/usr/local/arm/3.4.1/bin:$PATH

                 export KERNEL=/home/admin/linux-2.6.14.1

#make menuconfig

system type:-> arm system type:->samsung s3c2410

make zImage  报错

drivers/video/console/vgacon.c:290: error:'PCIMEM_BASE'undeclared(first use in this function)

解决办法

make menuconfig

device drivers->

   Graphics support->

      Console display driver support->

         [ ]VGA text console (去掉即可)

再次编译 又报错

LD      .tmp_vmlinux1

  arm-linux-ld:arch/arm/kernel/vmlinux.lds:1439: parse error

  make: *** [.tmp_vmlinux1] Error 1

解决办法

[root@localhost linux-2.6.14]$ vi arch/arm/kernel/vmlinux.lds

将文件尾2条的ASSERT注释掉

/* ASSERT((__proc_info_end - __proc_info_begin), "missing CPU support") */

/* ASSERT((__arch_info_end - __arch_info_begin), "no machine record defined") */

 终于编译过去了

 

************************************************************************************************************

                                                                 交叉编译内核

************************************************************************************************************

一、设置flash分区

指明分区信息

在arch/arm/machs3c2410/devs.c文件中添加如下内容:

#include <linux/mtd/partitions.h>
        #include <linux/mtd/nand.h>
        #include <asm/arch/nand.h>

/* NAND Controller */

1.、建立Nand Flash分区表

          static struct mtd_partition partition_info[] ={
               {
                            name:  "vivi",
                            offset:  0,
                           size:  0x00020000,
  
                }, {
                           name:  "param",
                           offset:  0x00020000,
                           size:  0x00010000,
                 }, {
                           name:  "kernel",
                           offset:  0x00030000,
                           size:  0x001d0000,
                  }, {
                            name:  "root",
                            offset:  0x00200000,
                            size:  0x00a00000,
                   }, {
                            name:  "jffs2",
                            offset:  0x00c00000,
                           size:  0x01400000,
                        }
                   };
             name: 代表分区名字
             size: 代表flash分区大小(单位:字节)
             offset: 代表flash分区的起始地址(相对于0x0的偏移)
             目标板计划分5个区,分别存放vivi,param, kernel, root以及以便以后扩展使用的用户文件系统空间。

 2、加入Nand Flash分区

         struct s3c2410_nand_set nandset ={
                            nr_partitions: 5,    /* the number of partitions */
                            partitions: partition_info,  /* partition table */
                         };
                nr_partitions: 指明partition_info中定义的分区数目
               partitions: 分区信息表

3、 建立Nand Flash芯片支持

          struct s3c2410_platform_superlpplatform_nand={
                                                 tacls:0,
                                                 twrph0:30,
                                                 twrph1:0,
                                                 sets: &nandset,
                                                 nr_sets: 1,
                                    };
               tacls, twrph0, twrph1的意思见S3C2410手册的63,
               这3个值最后会被设置到NFCONF中,见S3C2410手册66.
               sets: 支持的分区集
               nr_set:分区集的个数

4.、加入Nand Flash芯片支持到Nand Flash驱动

           struct platform_device s3c_device_nand = {
                                          .name = "s3c2410nand",                   /* Device name */
                                         . id = -1,                                              /* Device ID */
                                        .num_resources = ARRAY_SIZE(s3c_nand_resource),
                                        .resource = s3c_nand_resource,         /* Nand Flash Controller Registers */

          /*添加以下内容用来支持NAND Flash芯片*/

                                 .dev = {
                                                      .platform_data = &superlpplatform_nand
                                                   }

      name: 设备名称
             id: 有效设备编号,如果只有唯一的一个设备为-1,有多个设备从0开始计数.
             num_resource: 有几个寄存器区
             resource: 寄存器区数组首地址
             dev: 支持的Nand Flash设备

二、指定启动时初始化

       kernel启动时依据我们对分区的设置进行初始配置

   修改arch/arm/machs3c2410/machsmdk2410.c文件smdk2410_devices[],指明初始化时包括我们在前面所设置的flash分区信息

      static struct platform_device *smdk2410_devices[] __initdata = {
                                           &s3c_device_usb,
                                           &s3c_device_lcd,
                                           &s3c_device_wdt,
                                           &s3c_device_i2c,
                                           &s3c_device_iis,
                                   /* 添加如下语句即可 */
                                          &s3c_device_nand,
                                     };

三、 禁止Flash ECC校验

修改drivers/mtd/nand/s3c2410.c 文件s3c2410_nand_init_chip()函数,在该函数体最后加上一条语句:

chip->eccmode = NAND_ECC_NONE;

 

  edit /include/linux/mtd/partitions.h
         partitions.h文件的最前面加上#include <linux/list.h>

四、配置内核
           1、支持启动时挂载devfs

为了我们的内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/dev为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

 

       2、配置内核产生.config文件

将arch/arm/configs/smdk2410_defconfig .config拷到内核目录树根下

make menuconfig 将smdk2410_defconfig 导入,在smdk2410_defconfig基础上,配置内核

    Loadable module support >
                        [*] Enable loadable module support
                        [*] Automatic kernel module loading

    System Type >
                        [*] S3C2410 DMA support
           Boot options >
                       Default kernel command string:
                      noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200
             说明:mtdblock3代表我的第4个flash分区,它是我的rootfs
              console=ttySAC0,115200使kernel启动期间的信息全部输出到串口0上.

     Floating point emulation >
                         [*] NWFPE math emulation

接下来要做的是对内核MTD子系统的设置

     Device Drivers >
                      Memory Technology Devices (MTD) >
                        [*] MTD partitioning support        /*支持MTD分区,这样我们在前面设置的分区才有意义*/
                        [*] Command line partition table parsing    /*支持从命令行设置flash分区信息,灵活*/
                      RAM/ROM/Flash chip drivers >
                       <*> Detect flash chips by Common Flash Interface (CFI) probe
                       <*> Detect nonCFI AMD/JEDECcompatible flash chips
                       <*> Support for Intel/Sharp flash chips
                       <*> Support for AMD/Fujitsu flash chips
                       <*> Support for ROM chips in bus mapping
                     NAND Flash Device Drivers >
                       <*> NAND Device Support
                       <*> NAND Flash support for S3C2410/S3C2440 SoC
                   Character devices >
                      [*] Nonstandard serial port support
                      [*] S3C2410 RTC Driver

接下来做的是针对文件系统的设置

     File systems >
                      <> Second extended fs support #去除对ext2的支持
                Pseudo filesystems >
                       [*] /proc file system support
                       [*] Virtual memory file system support (former shm fs)
                       [*] /dev file system support (OBSOLETE)
                       [*] Automatically mount at boot (NEW)
             这里会看到我们前先修改fs/Kconfig的成果,devfs已经被支持上了
                Miscellaneous filesystems >
                      <*> Compressed ROM file system support (cramfs)        /*支持cramfs*/
               Network File Systems >
                      <*> NFS file system support

到这里就可以保存退出,make zImage了。

以上是我移植2.6.14内核参照的过程,移植成功。中间出现问题:因配置错误导致编译不能正常通过。后重新配置后,正常,而且可以正确挂载文件系统。

原创粉丝点击