构建arm-linux仿真运行环境 (NFS启动)


一 前言
本文旨在将 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 = {
   
   
     {vSMDK2410_ETH_IO,pSMDK2410_ETH_IO, SZ_1M, MT_DEVICE}
     };

     并且添加一个头文件引用:
     #include <asm-arm/arch-s3c2410/smdk2410.h>

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

     #include <linux/config.h>
     #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)

  • 1
  • 2
  • 3
  • 4
  • 下一页

相关内容