linux 移植

  步骤一:解压

# tar xvf linux-3.6.3.tar.bz2

  步骤二:制作OK6410的拷贝

  1、以mini6410的文件为模板

  文件目录:/arch/arm/mach-s3c64xx/

# cp mach-mini6410.c mach-ok6410.c

  2、替换文件内容

# vim mach-ok6410.c

  进入底行模式

:%s/mini6410/ok6410/g
:%s/MINI6410/OK6410/g
:wq

  3、修改struct mtd_partition结构为

复制代码
struct mtd_partition ok6410_nand_part[] = {
        {
                .name           = "Bootloader",
                .offset         = 0,
                .size           = (1 * SZ_1M),
                .mask_flags     = MTD_CAP_NANDFLASH,
        },
        {
                .name           = "Kernel",
                .offset         = (1 * SZ_1M),
                .size           = (5*SZ_1M) ,
                .mask_flags     = MTD_CAP_NANDFLASH,
        },
        {
                .name           = "File System",
                .offset         = MTDPART_OFS_APPEND,
                .size           = MTDPART_SIZ_FULL,
        }
};
复制代码

  步骤三:修改Kconfig、Makefile与mach-types

  1、/linux-3.6.3/arch/arm/mach-s3c64xx/Kconfig

  复制一段SMDK6410的配置项

  然后将副本的config MACH_SMDK6410中的 “SMDK” 更改为 “OK”

 

  2、/linux-3.6.3/Makefile

  更新为

  ARCH  ?= arm

  CROSS_COMPILE  ?= arm-linux-

  还有/linux-3.6.3/arch/arm/mach-s3c64xx/Makefile添加一行

  obj-$(CONFIG_MACH_OK6410)         += mach-ok6410.o

  

  3、arch/arm/tools/mach-types

  添加一行:

  ok6410 MACH_OK6410 OK6410 1626

  这里的类型号,要和uboot中的类型号对应

//uboot中的类型号定义地址在/include/configs/smdk6410.h
#define  MACH_TYPE    1626
#define  UBOOT_MAGIC   (0x43090000 | MACH_TYPE)    

 

  步骤四: 配置config

  1、在linux-3.6.3根目录下make menuconfig

  (此处可以先将飞凌的3.0.1中的.config复制到这边根目录下,然后load一下再进行配置,如果曾自己编译过一次linux-3.0.1)

  2、因为用的是旧版本的.config,接着直接就make zImage了

 

 

  内核编译过程中出现如下错误(1): 

复制代码
drivers/base/power/domain.c: In function '__pm_genpd_add_device':
drivers/base/power/domain.c:1312: error: implicit declaration of function 'genpd_acquire_lock'
drivers/base/power/domain.c:1356: error: implicit declaration of function 'genpd_release_lock'
drivers/base/power/domain.c: In function 'pm_genpd_add_subdomain':
drivers/base/power/domain.c:1545: error: implicit declaration of function 'genpd_sd_counter_inc'
drivers/base/power/domain.c: In function 'pm_genpd_remove_subdomain':
drivers/base/power/domain.c:1588: error: implicit declaration of function 'genpd_sd_counter_dec'
drivers/base/power/domain.c: In function 'genpd_attach_cpuidle':
drivers/base/power/domain.c:1745: error: implicit declaration of function 'genpd_recalc_cpu_exit_latency'
make[3]: *** [drivers/base/power/domain.o] 错误 1
make[2]: *** [drivers/base/power] 错误 2
make[1]: *** [drivers/base] 错误 2
make: *** [drivers] 错误 2
复制代码

 

  具体解决方法参详 http://comments.gmane.org/gmane.linux.kernel.samsung-soc/10344

  不得不再次赞叹,内核社区的牛人们…

   不过趁编译内核的空当,自己还是记录一下吧。

  修改两个文件:

   arch/arm/mach-exynos/Kconfig 

   arch/arm/mach-s3c64xx/Kconfig 

 

  1、 arch/arm/mach-exynos/Kconfig

  修改下面的内容

复制代码
config CPU_EXYNOS4210
     select ARM_CPU_SUSPEND if PM
     select S5P_PM if PM
     select S5P_SLEEP if PM
-    select PM_GENERIC_DOMAINS
+    select PM_GENERIC_DOMAINS if PM
     help
       Enable EXYNOS4210 CPU support
复制代码

  2、arch/arm/mach-s3c64xx/Kconfig

  修改下面的内容

复制代码
config PLAT_S3C64XX
     bool
     depends on ARCH_S3C64XX
     select SAMSUNG_WAKEMASK
-    select PM_GENERIC_DOMAINS
+    select PM_GENERIC_DOMAINS if PM
     default y
     help
       Base platform code for any Samsung S3C64XX device
复制代码

   

 

你可能感兴趣的:(linux)