返回列表 发帖

[站长原创] 跟我动手移植内核系列 - 移植一个最简单的内核到6410开发板

[站长原创] 跟我动手移植内核系列 - 移植一个最简单的内核到6410开发板

移植一个最简单的内核到6410开发板

嵌入式开发联盟www.mcuos.com

Osboy站长原创

QQ:82475491

Mcuos.com@gmail.com


(一)下载Linux内核

ftp://ftp.kernel.org/pub/linux/kernel/v3.0/linux-3.0.30.tar.bz2

下载3.0.30的内核文件

(二)解压缩

Tar zcvf linux-3.0.30.tar.bz2

(三)预编译

步骤如下:

1cd arch/arm/configs

下面找针对smdk6410的开发板的默认内核配置文件,因为ok6410的板子是模仿三星的官方开发板smdk6410来制作的,所以我们先找到针对smdk6410的开发板的linux内核配置。

该配置文件应该为:s3c6400_defconfig

2cd linux-3.0.30

3) make s3c6400_defconfig ARCH=arm

4) make menuconfig ARCH=arm

这一步可以检查你设置的平台是不是s3c64xx的平台:

System Type  ---> ARM system type (Samsung S3C64XX)  --->

5)修改Makefile,静态指定ARCH,CROSS_COMPILE参数

如果你不清楚为什么要做这一步,请查看我的之前的帖子

http://mcuos.com/thread-8256-1-1.html

打开Linux-3.0.1里面的Makefile

搜索:CROSS_COMPILE.找到:

export KBUILD_BUILDHOST := $(SUBARCH)

ARCH            ?= $(SUBARCH)

CROSS_COMPILE   ?= $(CONFIG_CROSS_COMPILE:"%"=%)

修改为:

export KBUILD_BUILDHOST := $(SUBARCH)

ARCH            ?= arm

CROSS_COMPILE   ?= arm-linux-


这么修改之后的34)步骤就不用后边再加ARCH=arm
6)第一次编译smdk6410的内核

输入make命令编译内核

做这一步预编译的步骤是必要的,因为我们所有的移植最终都是要编译通过才行,那么我们就应该还没有修改任何一行code的时候就要确保能够编译通过,因为有些时候linux的标准代码下载下来后也不能保证完全编译通过的。

(四)创建自己的开发板类型文件


linux内核中linux-3.0.30\arch\arm中的所有目录都是和arm开发板相关的,你可以查看下,这里的文件目录都是各自半导体公司的arm芯片相关的目录哦。而三星的6410相关的目录是放在:

linux-3.0.30\arch\arm\mach-s3c64xx

在这个目录下,你能看到好多类似于mach-xxx.c的文件,就是针对使用6410芯片制作的每个开发板的文件,这个文件是移植的时候非常重要的。


这里贴出我的部分machine相关代码:



static struct map_desc mcuos6410_iodesc[] = {};


static struct platform_device *mcuos6410_devices[] __initdata = {


};


static void __init mcuos6410_map_io(void)

{

       s3c64xx_init_io(mcuos6410_iodesc, ARRAY_SIZE(mcuos6410_iodesc));

       s3c24xx_init_clocks(12000000);

       s3c24xx_init_uarts(mcuos6410_uartcfgs, ARRAY_SIZE(mcuos6410_uartcfgs));

}


static void __init mcuos6410_machine_init(void)

{

       platform_add_devices(mcuos6410_devices, ARRAY_SIZE(mcuos6410_devices));

}


MACHINE_START(MCUOS6410, "MCUOS6410")

       /* Maintainer: Ben Dooks <ben-linux@fluff.org> */

       .boot_params  = S3C64XX_PA_SDRAM + 0x100,


       .init_irq   = s3c6410_init_irq,

       .map_io          = mcuos6410_map_io,

       .init_machine  = mcuos6410_machine_init,

       .timer             = &s3c24xx_timer,

MACHINE_END


其实我们在内核移植的时候就需要实现上面的这几个函数。

大家可以先去下载我的这个文件:

本帖隐藏的内容需要回复才可以浏览


(五)修改kconfigmakefile文件


linux-3.0.30\arch\arm\mach-s3c64xx下面找到Makefile文件,打开,搜索找到# Machine support这行,添加针对我们新加的文件一行:

obj-$(CONFIG_MACH_MCUOS6410) += mach-mcuos6410.o


linux-3.0.30\arch\arm\mach-s3c64xx下面找到kconfig文件,打开,搜索找到MACH_SMDK6410这行,这个是针对smdk6410kconfig项目,要参考这个来实现我们自己的,由于我们是新移植的平台,驱动什么的还没弄好,所以这边就没有MACH_SMDK6410这么多,我给出我们移植的代码:

config MACH_MCUOS6410

       bool "MCUOS.COM-6410"

       select CPU_S3C6410

       help

         Machine support for the mcuos.com ok6410 board

         Technical support please login www.mcuos.com


config MACH_SMDK6410

       bool "SMDK6410"

       select CPU_S3C6410

       select SAMSUNG_DEV_ADC

       select S3C_DEV_HSMMC

       select S3C_DEV_HSMMC1

       select S3C_DEV_I2C1

       select SAMSUNG_DEV_IDE

       select S3C_DEV_FB

       select S3C_DEV_RTC

       select SAMSUNG_DEV_TS

       select S3C_DEV_USB_HOST

       select S3C_DEV_USB_HSOTG

       select S3C_DEV_WDT

       select SAMSUNG_DEV_KEYPAD

       select SAMSUNG_DEV_PWM

       select HAVE_S3C2410_WATCHDOG if WATCHDOG

       select S3C64XX_SETUP_SDHCI

       select S3C64XX_SETUP_I2C1

       select S3C64XX_SETUP_IDE

       select S3C64XX_SETUP_FB_24BPP

       select S3C64XX_SETUP_KEYPAD

       help

         Machine support for the Samsung SMDK6410



这边我们只有一个select CPU_S3C6410,因为我们其他的驱动还没实现,所以暂时不用那么多的配置项。


(六)加开发板类型号码支持


打开arch/arm/tools/mach-types,然后再最后一行添加:


mcuos6410            MACH_MCUOS6410            MCUOS6410         3495


(七)使用我们默认的内核配置文件

下载我移植的默认内核配置文件:

本帖隐藏的内容需要回复才可以浏览

mcuos.com_6410_defconfig

然后直接make mcuos.com_6410_defconfig使用,配置之后。重新检查你设置的平台是不是s3c64xx中的mcuos-6410配置的平台:

System Type  ---> ARM system type (Samsung S3C64XX)  --->这个下面应该选择Samsung S3C64XX,然后在System Type  --->下面应该能看到如下图的字样:




(八)编译内核

直接make就可以了。编译好了,就直接运行下内核看看吧。


总结:此文比较简洁,主要是我需要要大家先有个移植内核的概念,下几篇文章我会详细讲解,与开发板相关的文件里面的函数具体的实现过程和原理,Kconfig,Makefile的基本原理和使用,等等深入的内核移植知识,这一篇移植的文章只是个引子。


附件: 您需要登录才可以下载或查看附件。没有帐号?本站只开放邀请码注册,QQ:82475491,索要邀请码
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

我是沙发,我第一个来。

TOP

我也来试试

TOP

我也来试试

TOP

我也来试试

TOP

learn and learn

TOP

学习一下

TOP

很好的帖子,楼主好人啊

TOP

回复 1# osboy


    学习嘘嘘嘘嘘嘻嘻嘻小

TOP

楼主好人一生平安

TOP

谢谢老大

TOP

大厦大厦大厦大厦大厦大厦大厦大厦大厦大厦大厦大厦大厦大厦大厦大厦

TOP

我也来试试

TOP

开始移植内核。。。。

TOP

正好是在研究 S3C6410的移植

TOP

学习啦,谢谢啊

TOP

RE: 跟我动手移植内核系列 - 移植一个最简单的内核到6410开发板。看一看

TOP

谢谢分享,手上正有一个ok6410板

TOP

学习了~~~~~~~~~~~~~

TOP

正跟着课程学习

TOP

正跟着课程学习
huiqiaoqiu0224 发表于 2013-3-11 18:52



   你的板子是2440,这个对你来说是个挑战也是个锻炼的机会哦,原理都是一样的。

TOP

回复 21# osboy


   嗯嗯,知道的,师傅   而且这几天板子还在建国手里,我们的那个比赛项目程序还在他那里调试。。。我估计还得等几天板子。。我先看看这些文档,在PC上试试些东西

TOP

有点晚了......

TOP

回复 1# osboy


  好,看下。

TOP

学习一下地说

TOP

回复 1# osboy


   学习,看看。。

TOP

看一看~~~

TOP

回复 1# osboy


    学习了, 谢谢!

TOP

学习学些~

TOP

学习学习!!!

TOP

返回列表
网页右侧QQ悬浮滚动在线客服
网页右侧QQ悬浮滚动在线客服