基于S3C2410平台的Linux 2.6.14内核+平台驱动的移植指南(最终版)

本文档详细介绍了如何将Linux 2.6.14内核移植到S3C2410平台上,包括平台驱动的适配和配置步骤,旨在为开发者提供全面的移植指南。
摘要由CSDN通过智能技术生成

基于S3C2410平台移植Linux 2.6.14内核&驱动指南


安装交叉编译工具

Ø        下载交叉编译工具
(本文默认所有软件均下载在用户主目录下)
arm-linux-gcc-3.4.1 —— 交叉编译工具
Ø        安装
       //将压缩包移动至根目录下
       #mv arm-linux-gcc-3.4.1.tar.bz2 /
       //解压,默认路径为 /usr/local/arm /3.4.1
       #tar jxvf arm-linux-gcc-3.4.1.tar.gz2

下载Linux内核

Ø        下载 Linux 2.6.14 内核
Ø        解压内核
       #cd ~
       #tar jxvf linux-2.6.14.tar.bz2

建立环境变量

Ø        将交叉编译工具路径和内核路径加入环境变量
#vi ~/.bashrc
export KERNEL=~/linux-2.6.14
export PATH=/usr/local/arm/3.4.1/bin:$PATH

内核移植

Ø        Flash 进行分区
       启动开发板,进入vivi,对vivi进行分区操作
       vivi>bon part 0 128k 192k 2240k 5312k:m 64704k
       分区信息如下所示:
分区
起始地址
分区大小
分区作用
Part0
0x0
0x00020000 (128k)
bootloader
Part1
0x00020000
0x00010000 (64k)
bootloader params
Part2
0x00030000
0x00200000 (2m)
linux kernel
Part3
0x00230000
0x00300000 (3m)
root filesystem
Part4
0x00530000
0x03A00000 (58m)
yaffs filesystem
       将vivi写进Flash
       vivi>load flash vivi x
Ø        修改 Makefile
       #vi $KERNEL/Makefile
       找到ARCH与CROSS_COMPILE,修改为
       ARCH ?= arm
       CROSS_COMPILE ?= arm-linux-
Ø        将分区信息加入内核
#vi $KERNEL/arch/arm/mach-s3c2410/devs.c
添加头文件:
              #include <linux/mtd/partitions.h>
#include <linux/mtd/nand.h>
#include <asm/arch/nand.h>
添加分区结构:
              static struct mtd_partition partition_info[]={
                     {
                            name: "loader",             //分区名字,任意
                            size: 0x00020000,         //分区大小
                            offset: 0x0,                   //分区的起始地址,相对于0x0的偏移
                     },{
                            name: "param",
                            size: 0x00010000,
                            offset: 0x00020000,
                     },{
                            name: "kernel",
                            size: 0x00200000,
                            offset: 0x00030000,
                     },{
                            name: "rootfs",
                            size: 0x00300000,
                            offset: 0x00230000,
                     },{
                            name: "yaffs",
                            size: 0x03A00000,
                            offset: 0x00530000,
                     }
};
 
struct s3c2410_nand_set nandset={
                     nr_partitions: 5,                          //分区数量
                     partitions: partition_info,             //分区表
};
struct s3c2410_platform_nand superlpplatform={
       //NAND Flash芯片支持
       //参数意义可参考S3C2410手册
                     tacls: 0,
                     twrph0: 30,
                     twrph1: 0,
                     sets: &nandset,
                     nr_sets: 1,
};
修改s3c_device_nand,以加入NAND Flash驱动:
              struct platform_device s3c_device_nand = {
                     .name = "s3c2410-nand",      //设备名称
                     .id = -1, //有效设备编号,-1表示唯一设备
                     .num_resources = ARRAY_SIZE(s3c_nand_resource),              //寄存器区的个数
                     .resource = s3c_nand_resource,     //寄存器区的首地址
                     //添加如下信息,表示NAND Flash设备
       .dev={
                            .platform_data=&superlpplatform
                     }
};
Ø        指定启动时的设备初始化
       #vi $KERNEL/arch/arm/mach-s3c2410/mach-smdk2410.c
       修改:
       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 效验
内核通过vivi把数据写入NAND Flash,而vivi的ECC效验算法和内核的不同,内核的效验码是由NAND Flash控制器产生的,所以在此必须禁用NAND Flash ECC。
#vi $KERNEL/drivers/mtd/nand/s3c2410.c
找到s3c2410_nand_init_chip函数,将chip->eccmode的值修改为:
NAND_ECC_NONE
Ø        修正 Kernel 错误
编辑partitions.h,增加list.h头文件。
#vi $KERNEL/include/linux/mtd/partitions.h
在头文件中添加:
              #include <linux/list.h>
Ø
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值