快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

构建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)


    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 的支持
         File systems ---> Network File Systems --->
         至少确保下面两项被选中:
         [*] NFS file system support
         [*]   Provide NFSv3 client support
    (6)设置 ROM file system 的支持
         File systems ---> [*] ROM file system support
         确保 [*] ROM file system support 被选中
    (7)设置 ext2 的支持
         File systems ---> [*] Second extended fs support
         确保 [*] Second extended fs support 被选中

    7.编译
    #make
    编译完成后会有个 vmlinux 在当前目录下, 这就是我们要的 arm-linux 内核了

 [2] [3] 下一页

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论