您的位置:首页 > 其它

OK6410内核移植笔记

2012-06-25 19:49 232 查看
1. 飞凌的UBOOT源代码指定机器码是1626,那么是在那些文件里定义的哪?

首先在 uboot1.16/include/configs/smdk6410.h 文件中定义了

#define MACH_TYPE 1626 //在这里定义了 宏 MACH_TYPE

#define UBOOT_MAGIC (0x43090000 | MACH_TYPE)

然后在uboot1.16/board/samsung/smdk6410/smdk6410.c 中把这个宏赋值给uboot的机器码。

gd->bd->bi_arch_number = MACH_TYPE;

gd->bd->bi_boot_params = (PHYS_SDRAM_1+0x100);

对于其他的开发板,机器码的定义位置在 uboot/include/asm-arm/mach-types.h中。
2. linux内核机器码的指定:

当在移植内核的时候,首先要进行内核配置(make menuconfig ),在配置采用什么类型开发板的时候,会指定一个代表机器设备的宏,比如我移植的开发板叫OK6410,那么在开发板的配置选项里边就会生成一个宏,

进入源代码目录,按CTRL+H 显示隐含的文件.config, 会有如下一段代码:

#

# System MMU

#

CONFIG_PLAT_S3C64XX=y

CONFIG_CPU_S3C6410=y

CONFIG_S3C64XX_DMA=y

CONFIG_S3C64XX_SETUP_SDHCI=y

CONFIG_S3C64XX_SETUP_I2C0=y

CONFIG_S3C64XX_SETUP_I2C1=y

CONFIG_S3C64XX_SETUP_FB_24BPP=y

CONFIG_S3C64XX_SETUP_SDHCI_GPIO=y

# CONFIG_MACH_SMDK6400 is not set

# CONFIG_MACH_ANW6410 is not set

CONFIG_MACH_OK6410=y

# CONFIG_MACH_MINI6410 is not set

# CONFIG_MACH_REAL6410 is not set

# CONFIG_MACH_SMDK6410 is not set

在这里会产生一个CONFIG_MACH_OK6410,并且=y,这个宏本来在make menuconfig选项里边是没有的,需要自己手动添加。

打开 arch/arm/mach-s3c64xx/Kconfig文件,添加如下代码:

config MACH_OK6410

bool "OK6410"

select CPU_S3C6410

select S3C_DEV_HSMMC

select S3C_DEV_HSMMC1

select S3C64XX_SETUP_SDHCI

select S3C_DEV_USB_HOST

select S3C_DEV_NAND

select S3C_DEV_FB

select S3C64XX_SETUP_FB_24BPP

select SAMSUNG_DEV_ADC

select SAMSUNG_DEV_TS

help

Machine support for the Forlinx ok6410

这段代码是从紧挨着他的MINI6410复制过来改了下名字,这样,在make menuconfig 的时候,就有了ok6410选项。

选了以后,就会产生CONFIG_MACH_OK6410
,被放置在.config文件里并且被设置为=y。

那么这个宏是在哪里赋值的那?在 arch/arm/tools/mach-types.h里边, 在这里手工添加如下代码:

ok6410 MACH_OK6410 OK6410 1626

代表CONFIG_MACH_OK6410被赋值为 1626。

那么这个机器码在哪里被引用的那,在 arch/arm/mach-s3c64xx/mach-ok6410.c 中,这个文件也是自己添加的,可以拷贝一个mach-mini6410.c 作为自己的mach-ok6410.c,并且把里边所有的mini6410,带换为ok6410。其中有个函数要注意:

MACHINE_START(OK6410, "OK6410")

/* Maintainer: Darius Augulis <augulis.darius@gmail.com> */

.boot_params = S3C64XX_PA_SDRAM + 0x100,

.init_irq = s3c6410_init_irq,

.map_io = ok6410_map_io,

.init_machine = ok6410_machine_init,

.timer = &s3c24xx_timer,

MACHINE_END

在文件的最后有如上代码,第一个参量OK6410,就代表的mach-types.h里边指定的机器码,这里要大写OK。这样内核就指定了一个机器码。需要和uboot的机器码相同。

如果此时编译内核,mach-ok6410.c不会被编译,还需要在本级目录下的Makefile文件里指定编译规则,打开 arch/arm/mach-s3c64xx/目录下的Makefile文件,在下边添加如下代码:

# Machine support

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

这样,当宏被指定后,才会编译mach-ok6410.c,这样内核移植才能成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: