基于S3C2410平臺移植Linux 2.6.14內(nèi)核&驅(qū)動指南
安裝交叉編譯工具
?下載交叉編譯工具
(本文默認所有軟件均下載在用戶主目錄下)
arm-linux-gcc-3.4.1 —— 交叉編譯工具
URL:ftp://ftp.handhelds.org/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz2
?安裝
//將壓縮包移動至根目錄下
#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內(nèi)核
?下載Linux 2.6.14內(nèi)核
URL:http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2
?解壓內(nèi)核
#cd ~
#tar jxvf linux-2.6.14.tar.bz2
建立環(huán)境變量
?將交叉編譯工具路徑和內(nèi)核路徑加入環(huán)境變量
#vi ~/.bashrc
export KERNEL=~/linux-2.6.14
export PATH=/usr/local/arm/3.4.1/bin:$PATH
內(nèi)核移植
?為Flash進行分區(qū)
啟動開發(fā)板,進入vivi,對vivi進行分區(qū)操作
vivi>bon part 0 128k 192k 2240k 5312k:m 64704k
分區(qū)信息如下所示:
分區(qū)
起始地址
分區(qū)大小
分區(qū)作用
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-
?將分區(qū)信息加入內(nèi)核
#vi $KERNEL/arch/arm/mach-s3c2410/devs.c
添加頭文件:
#include
#include
#include
添加分區(qū)結(jié)構(gòu):
static struct mtd_partition partition_info[]={
{
name: "loader", //分區(qū)名字,任意
size: 0x00020000, //分區(qū)大小
offset: 0x0, //分區(qū)的起始地址,相對于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, //分區(qū)數(shù)量
partitions: partition_info, //分區(qū)表
};
struct s3c2410_platform_nand superlpplatform={
//NAND Flash芯片支持
//參數(shù)意義可參考S3C2410手冊
tacls: 0,
twrph0: 30,
twrph1: 0,
sets: &nandset,
nr_sets: 1,
};
修改s3c_device_nand,以加入NAND Flash驅(qū)動:
struct platform_device s3c_device_nand = {
.name = "s3c2410-nand", //設(shè)備名稱
.id = -1,//有效設(shè)備編號,-1表示唯一設(shè)備
.num_resources = ARRAY_SIZE(s3c_nand_resource), //寄存器區(qū)的個數(shù)
.resource = s3c_nand_resource, //寄存器區(qū)的首地址
//添加如下信息,表示NAND Flash設(shè)備
.dev={
.platform_data=&superlpplatform
}
};
?指定啟動時的設(shè)備初始化
#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_i