天天看点

linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,来日再战!)linux 3.4.103 内核移植到 S3C6410 开发板

linux 3.4.103 内核移植到 S3C6410 开发板

这个星期几乎就搭在这里面了,一开始感觉很不值得,移植这种浪费时间的事情,想立马搞定,然后安安静静看书 & coding.

坑爹的事情就是一个多星期的时间搭进去了,还是没成功。我把我的移植失败的经验留下来做为笔记,为下次做准备,也让和我一起做移植的道友少走弯路.大家一起共同分享经验,营造更好的开发环境。

查了很多资料,在此谢谢那些bloger, thanks for your spirit of sharing.

一. 从官网获得干净的内核

https://www.kernel.org/

         我这里选择的是3.4.103,(其实已经试过很多版本的kernle了,都是失败啊,心塞~,其实我在写这篇blog的时候还在尝试再做一次,现在这次我用的3.4.103)

我的开发板是飞凌的s3c6410,开发板供应商提供的kernel是经过他们处理的,所以不要用供应商的kernel source code. 那样基本上啥经验都赚不到

二. patching yaffs2文件系统

在这个过程中我还发现yaffs2最近的版本是有问题的,源码编译过不了,有错误

http://blog.csdn.net/cinmyheart/article/details/38747505

换一个版本就正常了~ (坑爹~source code 错误!)

yaffs2-4e188b0.tar.gz

给内核打yaffs2文件系统的补丁 

解压yaffs2源文件压缩包之后,执行yaffs2源代码目录下的一个shell script

./patch-ker.sh c  /Jason_with_ARM/linux-3.4.104/ 
           

上面命令完成下面三件事情: 

(1) 修改内核fs/Kconfig 

    增加一行:source "fs/yaffs2/Kconfig" 

(2) 修改内核fs/Kconfig 

    增加一行:ojb-$(CONFIG_YAFFS_FS) +=yaffs2/ 

(3) 在内核fs/目录下创建yaffs2目录 

    将yaffs2源码目录下面的Makefile.kernel文件复制为内核fs/yaffs2/Makefie; 

    将yaffs2 源码目录的Kconfig文件复制到内核fs/yaffs2目录下; 

    将yaffs2源码目录下的*.c *.h文件复制到内核fs/yaffs2目录下. 

三. 配置内核!

               干干净净的内核移植到ARM平台还是要各种手动修改,麻烦的说~当然这也让我更熟悉Kconfig Makfile的作用和关系

                linux 默认的Kconfig 和.config不是为ARM平台准备的So...

RT,copy arm目录下的Kconfig 并且把s3c6400_defconfig copy成.config (s3c6400和s3c6410的配置差不多,于是内核就只给出了一个config)

linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,来日再战!)linux 3.4.103 内核移植到 S3C6410 开发板

运行一次make menuconfig 然后再添加点东东

照着下面这个blog的方法做,补全MTD选项

http://blog.csdn.net/cinmyheart/article/details/38754669

为了增加devfs文件管理器的支持,补全fs/Kconfig

我们所用的文件系统使用的是devfs文件管理器。修改fs/Kconfig,

找到

menu "Pseudo filesystems"

添加如下语句:

config DEVFS_FS
         bool "/dev file system support (OBSOLETE)"
         default y    
config DEVFS_MOUNT
bool "Automatically mount at boot"
default y
depends on DEVFS_FS
           

对于menuconfig 里没有yaffs2选项的解决办法

下面给出的link,有些细节其实是配置内核的一部分,不完全是为了解决yaffs2选项丢失的问题

http://blog.csdn.net/cinmyheart/article/details/38759549

修改根目录下的Makefile,如图

linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,来日再战!)linux 3.4.103 内核移植到 S3C6410 开发板

接着修改MTD分区(这一步不完全正确,很可能这就是我为嘛没有移植成功的原因)

             三星的芯片,一个系列都是从前面的型号慢慢改进衍生出来的新产品,所以就会出现s3c6410和s3c2410在一些基础文件配置上共用

修改./arch/arm/mach-s3c64xx/mach-smdk6410.c

添加如下代码:

添加头文件 

</pre></p><pre name="code" class="cpp">
           
#include  <plat/sdhci.h>

#include <linux/mtd/partitions.h>

#include <mtd/mtd-abi.h>


struct s3c_ts_mach_info {
	int             	delay;
	int             	presc;
	int             	oversampling_shift;
	int			resol_bit;
	enum s3c_adc_type	s3c_adc_con;
};
           
linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,来日再战!)linux 3.4.103 内核移植到 S3C6410 开发板
linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,来日再战!)linux 3.4.103 内核移植到 S3C6410 开发板
linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,来日再战!)linux 3.4.103 内核移植到 S3C6410 开发板
linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,来日再战!)linux 3.4.103 内核移植到 S3C6410 开发板

注释掉图中注释的部分,并且添加&s3c_device_nand

linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,来日再战!)linux 3.4.103 内核移植到 S3C6410 开发板

在/arch/arm/plat-samsung/devs.c里面修改这个函数

linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,来日再战!)linux 3.4.103 内核移植到 S3C6410 开发板

修改注释有added的那句话

linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,来日再战!)linux 3.4.103 内核移植到 S3C6410 开发板

添加 .boot_params 选项

linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,来日再战!)linux 3.4.103 内核移植到 S3C6410 开发板

修改 /drivers/mtd/nand/s3c2410.c

替换所有的(除了switch的选项外)赋值语句包含的NAND_ECC_SOFT为NAND_ECC_NONE

Kernel Feature配置

linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,来日再战!)linux 3.4.103 内核移植到 S3C6410 开发板

最后make zImage

最后的最后:可惜找了很多blog,还是没能搞定这个问题,

有人说是

linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,来日再战!)linux 3.4.103 内核移植到 S3C6410 开发板

继续阅读