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,这样内核移植才能成功。
首先在 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,这样内核移植才能成功。
相关文章推荐
- linux内核移植-内核调试工具KGBD、DDD、GDB移植笔记
- [原创]Linux 2.6.27 for ARM9/S3C2410 内核移植笔记
- TE2440II内核移植笔记--redxu
- 移植内核学习笔记4-----内核之裁剪及ECC简介及制作补丁
- 嵌入式软件开发培训笔记——嵌入式linux内核与文件系统移植与分析
- 移植内核学习笔记2-----修改分区及制作根文件系统
- 为AM335x移植Linux内核主线代码(4)booting-without-of.txt学习笔记上
- s5pv210 内核移植与nfs文件系统笔记
- Uboot、内核、文件、移植 笔记
- 移植内核学习笔记1-----框架介绍及简单修改··
- 为AM335x移植Linux内核主线代码(5)booting-without-of.txt学习笔记中
- ok6410移植内核问题 针对自己的ubuntu
- 为AM335x移植Linux内核主线代码(6)booting-without-of.txt学习笔记下
- Linux2.6.32内核笔记(5)在应用程序中移植使用内核链表【转】
- Linux2.6内核移植笔记(一)
- 基于JZ2440移植Linux3.4.2内核版本完整搭建笔记
- 移植最新的内核linux-4.9到开发板JZ2440全过程笔记
- OK6410(256MRAM2Gnandflash) uboot2010.03移植笔记
- TQ2440 学习笔记—— 34、移植 Linux 内核【 Makefile 分析 】
- Linux学习内核移植相关笔记第1部分