arm-linux移植手记(三)Linux内核移植

本文记录了在Debian系统下移植Linux 2.6.32.2内核到ARM开发板Mini2440的过程,包括配置交叉编译、识别NAND分区和YAFFS文件系统。在遇到问题时,使用Fedora进行测试以排除编译器问题。
摘要由CSDN通过智能技术生成
    其实已经弄完了,可以把linux内核以及基于busybox1.16.0制作的文件系统结合。从总的来看是可以用自己的工具链编译生成的u-boot作为Boot Loader,Linux2.6.32.2内核和基于busybox1.16.0的根文件系统,只是还缺少很多相关的驱动,以后要是想继续的话再补全啦!这一过程碰到很多问题,包括自己的粗心和记录不全,当然也包括别人的粗心,让自己也反反复复折腾了好久。令人高兴的是终于可以先舒口气了。
    先说内核的移植,下载了 《Mini2440_Linux移植开发实战指南.pdf》,发现《第三章 Linux-2.6.32.2 内核移植详细步骤》讲得很详细,以为自己可以很轻松的照着做就可以了,没想到还是有些问题,现在稍微改些,以生成micro2440记录如下:

    基本的步骤可以是配置为交叉编译,克隆自己的目标平台,识别nand分区,增加识别yaffs文件系统

环境介绍:

内核版本:linux2.6.32.2
Linux平台:虚拟机下Fedora 11  自己原来编译的gcc在debian6下,因此在debian6下也顺利
交叉编译工具:fedora 11 :gcc-4.3.2   debian 6 :gcc 4.4.5  
arm开发板:mini2440(CPU:S3C2440 ,SDRAM:64M,Nor Flash:2M,Nand Flash:256M,网卡:DM9000EP)

这里主要还是debian下的过程,发现有问题的时候在Fedora下测试排除编译器的问题。

    1.下载源码
    linux内核官方网站,下载linux内核2.6.32.2  http://www.kernel.org/pub/linux/kernel/v2.6/
    yaffs源码:http://www.yaffs.net    但是必须用git下载,命令:git clone git://www.aleph1.co.uk/yaffs2 
    2.克隆自己的目标平台
    (1)配置为交叉编译

export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
改为
export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-

    (2)增加配置目录
    在 linux-2.6.32.2/arch/arm/configs下增加defconfig配置目录,自己现在还不打算详细的去看配置选项,因此直接拷贝的mini2440的,有兴趣的可以寻找类似自己的平台,然后修改。
    (3)在linux-2.6.32.2/arch/arm/mach-s3c2440下复制smdk2440.c建立micro2440.c,参考的文章已说明:linux2.6.32.2内核直接支持mini2440,防止与原有的冲突而删除。我为了有对照并没有删除match-mini2440,而是新建了 match-micro2440.c,因此,对应的修改其目录下的Makefile:
#obj-$(CONFIG_MACH_MINI2440) += mach-mini2440.o
obj-$(CONFIG_MACH_MINI2440) += mach-micro2440.o
    (4)修改match-micro2440.c
    a.首先对应机器码
    因为我们的micro2440在linux-2.6.32.2/arch/arm/tools/mach_types 文件中是没有机器码的(比较详细理解的可以搜索下或者看参考手册),而且为了与U-boot中的一致,还是保留了mini2440,
找到MACHINE_START( S3C2440, "SMDK2440") , 
修改为MACHINE_START( MINI2440, "Micro2440 test board")
    b.增加头文件
    参考的手册上还是少了些东西的,我这里补上些:
#include <plat/common-smdk.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/nand.h>
#include <linux/mtd/nand_ecc.h>
#include <linux/mtd/partitions.h>
#include <plat/nand.h>
    c.替换“smdk2440”字符串
    将match-micro2440.c中的smdk2440替换,就是方便自己查看,不替换也不影响(去掉#include <plat/common-smdk.h>,替换了可不去)。
    d.修改时钟
static void __init micro2440_map_io(void)
{
s3c24xx_init_io(micro2440_iodesc, ARRAY_SIZE(micro2440_iodesc));
s3c24xx_init_clocks( 12000000);
s3c24xx_init_uarts(micro2440_uartcfgs, ARRAY_SIZE(micro2440_uartcfgs));
}
    e.增加对nand flash的识别
自己对应着修改有区别的地方吧:
static struct platform_device *micro2440_devices[] __initdata = {
&s3c_device_usb,
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值