Welcome 微信登录

首页 / 操作系统 / Linux / 移植Linux内核2.6.32.2到QQ2440开发板

好长时间没写了,实际上这个工作在很早的时候就完成了,但是一直没有写下来,今天花点时间把Linux内核移植的步骤详细的总结一下,方便自己知识的积累:一. 移植环境主机:虚拟机 Fedora9目标机:友善之臂 QQ2440开发板交叉编译器:arm-linux-3.4.1二. 移植linux-2.6.32.2内核到QQ2440开发板1.获得内核: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.2.tar.bz22.解压内核: tar –jxvf  linux-2.6.32.2.tar.bz23.修改参数:1、    进入内核目录,修改makefileARCH ?=armCROSS_COMPILE ?=arm-linux-然后执行如下的命令,使用arch/arm/configs/s3c2410_defconfig文件来配置内核,它生成.config配置文件,以后就可以直接使用”make menuconfig”修改配置了。make s3c2410_defconfig最后是编译生成内核,执行”make”命令将在顶层目录下生成内核映像文件vmlinux;执行”make uImage”除生成vmlinux外,还在arch/arm/boot目录下生成U-Boot格式的内核映像文件uImage;执行”make zImage”除生成vmlinux外,还在arch/arm/boot目录下生成vivi引导的内核映像文件zImage。2、  修改平台输入时钟由于QQ2440板子 系统时钟源为 12M 无源晶振找到内核源码arch/arm/mach-s3c2440/mach-smdk2440.c文件,static void __init smdk2440_map_io(void){s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));s3c24xx_init_clocks(12000000);//原来是16934400s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));}3、  修改MTD分区信息修改文件arch/arm/plat-s3c24xx/common-smdk.c。第一,修改分区信息(64M):static struct mtd_partition smdk_default_nand_part[] = {[0] = {.name = "bootloader",.offset = 0x00000000,.size = 0x00030000,},[1] = {.name = "kernel",.offset = 0x00050000,.size = 0x00200000,},[2] = {.name = "root",.offset = 0x00250000,.size = 0x03dac000,}};4、  修改S3C2440 的机器号由于Bootloader 传递给Linux 内核的机器号为782(根据实际的情况)修改 arch/arm/tools/mach-types 文件s3c2440      ARCH_S3C2440 S3C2440    7825、 给内核打yaffs2文件系统的补丁从http:/www.aleph1.co.uk/cgi-bin/viewcvs.cgi/获取源代码文件cvs-root.tar,解压源码目录并进入目录cd /…/…/cvs/yaffs2./patch-ker.sh c  /上面命令完成下面三件事情:(1) 修改内核fs/Kconfig增加一行:source "fs/yaffs2/Kconfig"(2) 修改内核fs/Kconfig增加一行:ojb-$(CONFIG_YAFFS_FS) +=yaffs2/(3) 在内核fs/目录下创建yaffs2 目录将yaffs2 源码目录下面的Makefile.kernel 文件复制为fs/yaffs2/Makefie;将yaffs2 源码目录的Kconfig 文件复制到内核fs/yaffs2 目录下;将yaffs2 源码目录下的*.c *.h 文件复制到内核fs/yaffs2 目录下.