由於學校的校園網服務器比較舊,開發板無法直接使用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目錄下,然后繼續編譯。