给OK6410配置新内核
由于学校的校园网服务器比较旧,开发板无法直接使用DHCP。
所以有两种解决思路:
1、在接入开发板之前,先接入一个交换机,接出来的接口再接开发板。
2、可能由于开发板内核版本旧导致的驱动版本比较旧(因为开发板OK6410买来的时候,配给的是3.01,而12.04版本的ubuntu的内核版本是3.2,在接入时,PC是可以适配这个校园网并获得ip),所以现在进行对开发板内核进行更新,目标版本3.6.3。
过程参考:http://blog.csdn.net/lwfbibi/article/details/7471877
步骤一:解压
# 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
错误(2):
make[1]: *** 没有规则可以创建“firmware/sd8686_helper.bin.gen.o”需要的目标“firmware/sd8686_helper.bin”。 停止。 make[1]: *** 没有规则可以创建“firmware/sd8686.bin.gen.o”需要的目标“firmware/sd8686.bin”。 停止。
具体参详:http://bbs.witech.com.cn/forum.php?mod=viewthread&tid=11518
据飞凌官方人员透露,他们对配发的linux-3.0.1版本的内核进行了大量的改动。所以这里可以进入linux-3.6.3的firmware文件夹看到
并没有依赖文件sd8686_helper.bin和sd8686.bin文件
我的做法是直接将飞凌的sd8686.bin 和 sd8686_helper.bin 复制到当前内核的fireware目录下,然后继续编译。