微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 构建 arm-linux 仿真运行环境 (skyeye + arm-linux + NFS)

构建 arm-linux 仿真运行环境 (skyeye + arm-linux + NFS)

时间:11-10 来源:互联网 点击:
一 前言

本文旨在将 arm-linux 在 skyeye 上搭建起来,并在 arm-linux 上能成功 mount

NFS 为目标, 最终我们能在 arm-linux 里运行我们自己的应用程序. 其实在 skyeye 上移

植 arm-linux 并非难事,网上也有不少资料, 只是大都遗漏细节, 以致细微之处卡壳,所以本

文力求详实清析, 希望能对大家有点用处。

二 安装 Skyeye

我们选定 skyeye 的 1.2.4 这个版本, 为了能让它上面运行的 arm-linx 能挂接 NFS,我

们需要修改 device/net/dev_net_cs8900a.c (修改后的文件在附件里), 再编译 skyeye。

操作如下, 先解压源码包:

#tar xzf skyeye-1.2.4_Rel.tar.gz

#cd skyeye-1.2.4

请用附件里的 dev_net_cs8900a.c 替换 device/net/dev_net_cs8900a.c 后执行编译:

#make NO_DBCT=1 NO_BFD=1

编译完后生成的 skyeye 在 binary 下,将其拷贝至 /usr/local/bin/ 下:

#cp binary/skyeye /usr/local/bin

三 编译内核

我们选定 linux-2.6.14.tar.bz2 这个版本, 交叉编译器用 arm-linux-gcc 3.4.1 (对

2.6 内核用 3.4 以下的版本编译经常会出现问题)。操作步骤如下:

1.假定内核源码包在 /root 下, 首先解压源码:

#cd /root

#tar xjf linux-2.6.14.tar.bz2

2.进入内核目录:

#cd linux-2.6.14

修改此目录下的 Makefile, 将

ARCH ?= $(SUBARCH)

CROSS_COMPILE ?=

改为

ARCH ?= arm

CROSS_COMPILE ?= /usr/local/arm/3.4.1/bin/arm-linux-

3.生成默认的内核配置文件(for s3c2410):

#make smdk2410_defconfig

4.为内核添加 cs8900(见附件) 网卡驱动,以支持 NFS 挂接:

(1)复制 cs8900 驱动到 drivers/net/arm 目录

#cp cs8900.c drivers/net/arm

#cp cs8900.h drivers/net/arm

(2)修改 drivers/net/arm 目录下的 Kconfig 文件, 在最后添加:

config ARM_CS8900

tristate "CS8900 support"

depends on NET_ETHERNET && ARM && ARCH_SMDK2410

help

Support for CS8900A chipset based Ethernet cards. If you have a network

(Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available

from as well as .To compile this driver as a module, choose M here and read.

The module will be called cs8900.o.

注:在运行 make menuconfig 命令时就会出现: [ ] CS8900 support 这一选项

(3)修改 drivers/net/arm 目录下的Makefile文件,在最后添加如下内容:

obj-$(CONFIG_ARM_CS8900) += cs8900.o

注:2.6 版本内核的 Makefile 也与 2.4 的有所不同, 添加以上语句, 就会使内核在

编译的时候根据配置将cs8900A的驱动程序以模块或静态的方式编译到内核当中。

(4)修改 arch/arm/mach-s3c2410/mach-smdk2410.c

在此文件中找到 smdk2410_iodesc[] 结构数组,添加如下如下内容:

{vSMDK2410_ETH_IO,pSMDK2410_ETH_IO, SZ_1M, MT_DEVICE}

修改之后变成:

static struct map_desc smdk2410_iodesc[] __initdata = {

/* nothing here yet */

/* Map the ethernet controller CS8900A */

{vSMDK2410_ETH_IO,pSMDK2410_ETH_IO, SZ_1M, MT_DEVICE}

};

并且添加一个头文件引用:

#include

(5)在 include/asm-arm/arch-s3c2410 目录下创建文件 smdk2410.h

#ifndef _INCLUDE_SMDK2410_H_

#define _INCLUDE_SMDK2410_H_

#include

#define pSMDK2410_ETH_IO 0x19000000

#define vSMDK2410_ETH_IO 0xE0000000

#define SMDK2410_ETH_IRQ IRQ_EINT9

#endif

5.参照http://skyeye.wiki.sourceforge.net/Linux修改内核文件

修改 include/asm-arm/arch-s3c2410/map.h

#define S3C2410_CS6 (0x30000000UL)

to

#define S3C2410_CS6 (0xC0000000UL)

修改 include/asm-arm/arch-s3c2410/memory.h

#define PHYS_OFFSET (0x30000000UL)

to

#define PHYS_OFFSET (0xC0000000UL)

6.裁剪/定制内核

(1)#make menuconfig

(2)设置内核启动参数

Boot options ---> Default kernel command string:

mem=32M console=ttySAC0 root=/dev/ram initrd=0xc0800000,0x00800000 ramdisk_size=8192 rw

(3)设置 CS8900 的支持

Device Drivers --->

Network device support --->

Ethernet (10 or 100Mbit) ---> [] CS8900 support

选中 [*] CS8900 support

(4)设置 initrd 的支持

Device Drivers ---> Block devices ---> [ ] RAM disk support

下面三项必须设置:

1.确保 RAM disk support 被选中

2.相应的将默认的 (4096) Default RAM disk size (kbytes) 改成 8192;

3.Initial RAM disk (initrd) support 一定要选中, 切记!

(5)设置 NFS 的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top