简单的2.6.14内核移植

时间:2023-02-10 15:05:18

这次移植只实现了最基本的,很多驱动还没有加进去(当时刚接触嵌入式,第一次自己做课题,嘿嘿)。网上也有很多2.14的移植文章了,但是自己做的时候还是要根据板子的情况来修改一些东西,毕竟板子不一样嘛,不要一味的按照人家的做法做,把它发到这里也就是记录下自己做过的东西了,嘿嘿。

一. 准备必要的文件

       首先去官方网站下载最新的 llinux 内核

     http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2

因为 linux2.6.14 内核需要更新版本的编译器,所以需要下载交叉编译器

  ftp://ftp.handhelds.org/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz2

二. 安装文件

        gcc 安装在 /usr/local/arm/3.4.1 目录下,安装方法和安装 gcc2.95.3 gcc3.3.2 是相同的!

接下来需要解压 linux 内核,输入命令:

[root · localhost hfrk]# tar jxvf linux-2.6.14.tar.bz2

内核被解压到 linux-2.6.14 目录下。

三. 修改 makefile 文件

       内核的编译是根据 makefile 文件的指示进行的, Makefile 文件来组织内核的各模块之间的关系,记录了各个模块之间的相互联系和依赖关系。

       我们首先修改 linux-2.6.14 的根目录下的 makfile 文件,须改的主要内容是目标代码的类型和为编译内核指定一个编译器。注释掉以下内容:

     #ARCH    ?= $(SUBARCH)

     #CROSS_COMPILE       ?=

增加如下内容:

        ARCH      : = arm

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

四. 修改相关的文件。

1.        修改 arch/arm/mach-s3c2410/devs.c 文件

       增加头文件定义

               /***********add here***********/

              

                /**************end add********/

增加 nand flash 分区信息

               /***********add here***********/

               static struct mtd_partition partition_info[] ={

               {

               name: "vivi",

               size: 0x00020000,

               offset: 0,

               }, {

               name: "param",

               size: 0x00010000,

               offset: 0x00020000,

               }, {

               name: "kernel",

               size: 0x001c0000,

               offset: 0x00030000,

               }, {

               name: "root",

               size: 0x00400000,

               offset: 0x00200000,

               mask_flags: MTD_WRITEABLE,

               }, {

               name: "usr",

               size: 0x03a00000,

               offset: 0x00600000,

               }

               }; /*这部分很重要,千万要跟vivi里的分区信息相同*/

/*加入NAND FLASH 分区*/

               struct s3c2410_nand_set nandset ={

               nr_partitions: 5 ,

               partitions: partition_info ,

               };

         /*建立芯片支持*/

               struct s3c2410_platform_nand superlpplatform={

               tacls:0,

               twrph0:30,

               twrph1:0,

               sets: &nandset,

               nr_sets: 1,

               };

               /**************end add********/

               struct platform_device s3c_device_nand = {

               .name                = "s3c2410-nand",

               .id              = -1,

               .num_resources        = ARRAY_SIZE(s3c_nand_resource),

               .resource   = s3c_nand_resource,

               /***********add here****************/

               .dev = {

               .platform_data = &superlpplatform

               }

               /**************end here************/

               };

2. 修改 arch/arm/mach-s3c2410/mach-smdk2410.c 文件

 

               Startic struct platform_device *smdk2410_devices[] __initdata={

                      &s3c_device_usb,

                      &s3c_device_lcd;

                      &s3c_device_wdt,

                      &s3c_device_i2c;

                      &s3c_device_iis,

                      &s3c_device_nand, /*add here*/

               };

3修改drivers/mtd/nand/s3c2410.c禁止flash ECC校验

找到s3c2410_nand_init_chip()函数,在该函数体最后加上:

chip->ecc.mode = NAND_ECC_NONE;

4. 支持启动时挂载devfs
为了我们的内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/devdevfs文件系统。

修改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

五. 做完以上修改以后,内核编译以后就可以在te2410 开发板上运行了。

       打开终端窗口,切换到 linux-2.6.14 目录下,输入命令:

[root · localhost linux-2.6.14]# make smdk2410_defconfig

[root · localhost linux-2.6.14]#make menuconfig

增删的内核配置选项如下:

Loadable module suport--->

[*]Enable loadable module suport

[*]Automatic kernel module loading

System Type--->[*]S3C2410 DMA suport

Boot options --->Default kernel command string:

noinitrd root=/dev/mtdblock3 init=/linuxrc consolettySAC0,115200

mtdblock3 代表第四个flash分区,为root分区

Floating point emulation---->

[*]NWFPE math emulation

#MTD子系统的配置

Device Drivers--->

Memory Technology Devices(MTD)--->

............................................

[*]MTD partitioning support

[*]Command line partition table parsing

............................................

NAND Flash Device Drivers--->

................................

<*>NAND Device Support

<*>NAND Flash support foe S3C2410/S3C2440 Soc

Character devices--->

.............................

[*]S3C2410 RTC Driver

File systems--->

<>Second extended fs support #去除ext2支持

Pseudo filesystems--->

[*]Virtual memory file system support(former shm fs)

[*]/dev file system support(OBSOLETE)

[*]Automatically mount at boot(NEW)

Miscellaneous filesystems--->

............................

<*>cramfs

.............................

Network File Systems---->

<*>NFS file system support

[root · localhost linux-2.6.14]# make zImage

编译完成以后,会生成镜像文件 arch/arm/boot/zImage ,把这个文件下载到开发板上!

六 .修改vivi串口参数

2.6 内核中, 2410 的串口由原来的 ttyS0 变为 ttySAC0启动te2410目标板,进入vivi,在vivi提示符下输入:

vivi>param set linux_cmd_line "noinitrd root=/dev/mtdblock/3  init=/linuxrc console=ttySAC0115200"

vivi>param save

七.启动信息

 

    welcome           

S3C2410 DEVELOP KIT                   

VIVI version 0.1.4 (root@localhost.localdomain) (gcc version 2.95.2 20000516 (re                                                                             

lease) [Rebel.com]) #0.1.4 12 24 13:09:55 CST 2006                 

MMU table base address = 0x33DFC000                                   

Succeed memory mapping.                       

NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung K9D1208V0M)   

Found saved vivi parameters.                        

....................................

         做的时候遇到了文件系统不能挂载的问题,自己查看后是由于vivi中分区信息和板子里面的分区不匹配导致的,改过来就没有问题了。

#include <linux/mtd/partitions.h>

#include <linux/mtd/nand.h>

#include <asm/arch/nand.h>