linux-2.6.30.4在mini2440开发板的移植

Linux版本:linux-2.6.30.4
交叉编译器:3.4.5
开发板:友善之臂mini2440
开发板配置:SoC s3c2440 、网卡 DM9000 、 Nor Flash AM29LV160DB (2M) 、NAND FLash (256M) 、SDRAM (64M)
uboot版本:u-boot-1.1.6
一、准备工作

  1. 根文件系统,本次移植根文件系统已放置在服务器上,采用NFS方式挂载根文件系统。
  2. 下载 linux-2.6.30.4.tar.bz2源代码,并解压。解压命令为:#tar xvfj linux-2.6.30.4.tar.bz2 -C ./
  3. 指定CPU架构和编译器类型,打开源文件根目录下的Makefile文件的193行,命令是:#vim Makefile +193
    将:
ARCH            ?= $(SUBARCH)
CROSS_COMPILE   ?= 

改成:

ARCH            ?= arm
CROSS_COMPILE   ?= arm-linux-
  1. 编译,命令是:#make s3c2410_defconfig 和#make uImage
    出现如下错误:
    Can’t use ‘defined(@array)’ (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.
    /home/book/work/test/linux-2.6.30.4/kernel/Makefile:128: recipe for target ‘kernel/timeconst.h’ failed
    make[1]: *** [kernel/timeconst.h] Error 255
    Makefile:881: recipe for target ‘kernel’ failed
    make: *** [kernel] Error 2
  2. 更改该错误,并重新编译。命令是:#vim kernel/timeconst.pl +373
    将:
if (!defined(@val)) {

改成:

if (! (@val)) {

再编译,命令是:#make uImage
编译完成,在arch/arm/boot目录下生产文件uImage文件。
二、修改系统时钟
打开arch/arm/mach-s3c2440/mach-smdk2440.c文件,命令是:#vim arch/arm/mach-s3c2440/mach-smdk2440.c +163
将:

s3c24xx_init_clocks(16934400);

改成:

s3c24xx_init_clocks(12000000);

三、DM9000网卡驱动移植

  1. 构造网卡相关结构体的数据
    命令是:#vim arch/arm/plat-s3c24xx/common-smdk.c +46
    添加如下代码:
#include <linux/dm9000.h>
/* DM9000AEP 10/100 ethernet controller */ 
#define MACH_MINI2440_DM9K_BASE (S3C2410_CS4 + 0x300)
static struct resource mini2440_dm9k_resource[] = { 
        [0] = { 
                .start = MACH_MINI2440_DM9K_BASE, 
                .end   = MACH_MINI2440_DM9K_BASE + 3, 
                .flags = IORESOURCE_MEM 
        }, 
        [1] = { 
                .start = MACH_MINI2440_DM9K_BASE + 4, 
                .end   = MACH_MINI2440_DM9K_BASE + 7, 
                .flags = IORESOURCE_MEM 
        }, 
        [2] = { 
                .start = IRQ_EINT7, 
                .end   = IRQ_EINT7, 
                .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE, 
        } 
}; 
/* 
 2.  *  * The DM9000 has no eeprom, and it's MAC address is set by 
 3.   *   * the bootloader before starting the kernel. 
 4.    *    */ 
static struct dm9000_plat_data mini2440_dm9k_pdata = { 
        .flags          = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM), 
}; 
 
static struct platform_device mini2440_device_eth = { 
        .name           = "dm9000", 
        .id             = -1, 
        .num_resources   = ARRAY_SIZE(mini2440_dm9k_resource), 
        .resource       = mini2440_dm9k_resource, 
        .dev            = { 
                .platform_data  = &mini2440_dm9k_pdata, 
        }, 
};
  1. 将网卡驱动加入内核
    在arch/arm/plat-s3c24xx/common-smdk.c文件的如下数组中,添加&mini2440_device_eth,选项,如下:
static struct platform_device *mini2440_devices[] __initdata = { 
        &smdk_led4,
        &smdk_led5,
        &smdk_led6,
        &smdk_led7,
        &mini2440_device_eth,//新增加
};
  1. 网卡初始化相关设置
    打开 drivers/net/dm9000.c,命令是:#vim drivers/net/dm9000.c
    添加如下头文件:
#include <mach/regs-mem.h> 

在改文件中的函数dm9000_init(void)体中添加如下代码:

#if defined(CONFIG_ARCH_S3C2410) 
        unsigned int oldval_bwscon = *(volatile unsigned int *)S3C2410_BWSCON;
        unsigned int oldval_bankcon4 = *(volatile unsigned int *)S3C2410_BANKCON4;
        *((volatile unsigned int *)S3C2410_BWSCON) =
                        (oldval_bwscon & ~(3<<16)) | S3C2410_BWSCON_DW4_16 |
S3C2410_BWSCON_WS4 | S3C2410_BWSCON_ST4;
*((volatile unsigned int *)S3C2410_BANKCON4) = 0x1f7c;
#endif

四、编译测试

  1. 编译,命令是#make uImage
  2. 将编译好的uImage文件拷贝到NFS文件夹里,命令是:#sudo cp arch/arm/boot/uImage /home/book/roof_mini2440
  3. 下载到SDRAM测试,命令是:nfs 0x30000000 192.168.12.216:/home/book/roof_mini2440/uImage;bootm
  4. 启动成功,进入根文件系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值