?? peizhi2.6.txt
字號:
基于S3C2410平臺移植Linux 2.6內核指南
安裝交叉編譯工具
? 下載交叉編譯工具
(本文默認所有軟件均下載在用戶主目錄下)
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內核
? 下載Linux 2.6.14.1內核
URL: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.1.tar.bz2
? 解壓內核
#cd ~
#tar jxvf linux-2.6.14.1.tar.bz2
建立環境變量
? 將交叉編譯工具路徑和內核路徑加入環境變量
#vi ~/.bashrc
export KERNEL=~/linux-2.6.14.1
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
Yaffs2加載
? 下載Yaffs2
URL: http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/yaffs2.tar.gz?view=tar
? 解壓Yaffs2并將其加入Linux內核
#cd ~
#tar zxvf yaffs2.tar.gz
#cd yaffs2
#sh patch-ker.sh c $KERNEL
內核配置(.config)與編譯
? 內核配置(基于$KERNEL/arch/arm/configs/s3c2410_defconfig)
(見附錄)
? 編譯內核
#make zImage
修改根文件系統
在宿主機上進入目錄/arm2410s(博創2410-s平臺提供),該目錄下的root目錄就是一個制作好的根文件系統。在此基礎上,我們要對root/etc/fstab分區配置文件進行修改,用來掛載Yaffs文件系統。
#vi /arm2410s/root/etc/fstab
找到yaffs,修改為:
/dev/mtdblock/4 /mnt/yaffs yaffs defaults 1 1
然后制作根文件系統鏡像。
#mkcramfs root root.cramfs
安裝內核和根文件系統
? 將編譯好的內核2.6.14.1寫入Flash
vivi>load kernel x
? 將制作的根文件系統root.cramfs寫入Flash
vivi>load root x
? 修改vivi啟動參數
vivi>param set linux_cmd_line “noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200”
vivi>param save
? 重啟開發板,完成工作。
附錄:內核配置文件.config
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.14.1
# Sat Aug 18 18:40:48 2007
#
CONFIG_ARM=y
CONFIG_MMU=y
CONFIG_UID16=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_GENERIC_IOMAP=y
# Code maturity level options
CONFIG_EXPERIMENTAL=y
CONFIG_CLEAN_COMPILE=y
CONFIG_BROKEN_ON_SMP=y
# General setup
CONFIG_LOCALVERSION=""
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
# CONFIG_AUDIT is not set
CONFIG_LOG_BUF_SHIFT=14
CONFIG_HOTPLUG=y
CONFIG_KOBJECT_UEVENT=y
# CONFIG_IKCONFIG is not set
# CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SHMEM=y
CONFIG_CC_ALIGN_FUNCTIONS=0
CONFIG_CC_ALIGN_LABELS=0
CONFIG_CC_ALIGN_LOOPS=0
CONFIG_CC_ALIGN_JUMPS=0
# CONFIG_TINY_SHMEM is not set
# Loadable module support
CONFIG_MODULES=y
# CONFIG_MODULE_UNLOAD is not set
CONFIG_OBSOLETE_MODPARM=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
# System Type
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_ARCH_CAMELOT is not set
# CONFIG_ARCH_FOOTBRIDGE is not set
# CONFIG_ARCH_INTEGRATOR is not set
# CONFIG_ARCH_IOP3XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_L7200 is not set
# CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set
CONFIG_ARCH_S3C2410=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
# CONFIG_ARCH_VERSATILE is not set
# CONFIG_ARCH_IMX is not set
# CONFIG_ARCH_H720X is not set
# S3C24XX Implementations
# CONFIG_ARCH_BAST is not set
# CONFIG_ARCH_H1940 is not set
CONFIG_ARCH_SMDK2410=y
# CONFIG_MACH_VR1000 is not set
# CONFIG_MACH_RX3715 is not set
CONFIG_CPU_S3C2410=y
# S3C2410 Setup
CONFIG_S3C2410_DMA=y
# CONFIG_S3C2410_DMA_DEBUG is not set
CONFIG_S3C2410_LOWLEVEL_UART_PORT=0
# Processor Type
CONFIG_CPU_32=y
CONFIG_CPU_ARM920T=y
CONFIG_CPU_32v4=y
CONFIG_CPU_ABRT_EV4T=y
CONFIG_CPU_CACHE_V4WT=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_COPY_V4WB=y
CONFIG_CPU_TLB_V4WBI=y
# Processor Features
CONFIG_ARM_THUMB=y
# CONFIG_CPU_ICACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
# General setup
CONFIG_ZBOOT_ROM_TEXT=0
CONFIG_ZBOOT_ROM_BSS=0
# CONFIG_XIP_KERNEL is not set
# PCCARD (PCMCIA/CardBus) support
# CONFIG_PCCARD is not set
# PC-card bridges
# At least one math emulation must be selected
CONFIG_FPE_NWFPE=y
# CONFIG_FPE_NWFPE_XP is not set
# CONFIG_FPE_FASTFPE is not set
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_AOUT=y
# CONFIG_BINFMT_MISC is not set
# Generic Driver Options
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_FW_LOADER is not set
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_PM is not set
# CONFIG_PREEMPT is not set
# CONFIG_ARTHUR is not set
CONFIG_CMDLINE="noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200"
CONFIG_ALIGNMENT_TRAP=y
# Parallel port support
# CONFIG_PARPORT is not set
# Memory Technology Devices (MTD)
CONFIG_MTD=y
# CONFIG_MTD_DEBUG is not set
CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_CONCAT is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_CMDLINE_PARTS is not set
# CONFIG_MTD_AFS_PARTS is not set
# User Modules And Translation Layers
CONFIG_MTD_CHAR=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
# CONFIG_INFTL is not set
# RAM/ROM/Flash chip drivers
CONFIG_MTD_CFI=y
# CONFIG_MTD_JEDECPROBE is not set
CONFIG_MTD_GEN_PROBE=y
# CONFIG_MTD_CFI_ADV_OPTIONS is not set
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_CFI_I4 is not set
# CONFIG_MTD_CFI_I8 is not set
CONFIG_MTD_CFI_INTELEXT=y
# CONFIG_MTD_CFI_AMDSTD is not set
# CONFIG_MTD_CFI_STAA is not set
CONFIG_MTD_CFI_UTIL=y
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_ROM is not set
# CONFIG_MTD_ABSENT is not set
# CONFIG_MTD_XIP is not set
# Mapping drivers for chip access
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
# CONFIG_MTD_PHYSMAP is not set
# CONFIG_MTD_ARM_INTEGRATOR is not set
# CONFIG_MTD_EDB7312 is not set
# Self-contained MTD device drivers
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
# CONFIG_MTD_MTDRAM is not set
# CONFIG_MTD_BLKMTD is not set
# CONFIG_MTD_BLOCK2MTD is not set
# Disk-On-Chip Device Drivers
# CONFIG_MTD_DOC2000 is not set
# CONFIG_MTD_DOC2001 is not set
# CONFIG_MTD_DOC2001PLUS is not set
# NAND Flash Device Drivers
CONFIG_MTD_NAND=y
# CONFIG_MTD_NAND_VERIFY_WRITE is not set
CONFIG_MTD_NAND_IDS=y
CONFIG_MTD_NAND_S3C2410=y
# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
# CONFIG_MTD_NAND_S3C2410_HWECC is not set
# CONFIG_MTD_NAND_DISKONCHIP is not set
# CONFIG_MTD_NAND_NANDSIM is not set
# Plug and Play support
# Block devices
# CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_DEV_COW_COMMON is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_UB is not set
# CONFIG_BLK_DEV_RAM is not set
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -