Linux平台UDHCP配置笔记,仿真运维条件

在ARM-Linux系统上装个DHCP服务器,那样就足以经过一条网线与PC连接了。

一 前言
  本文意在将 arm-linux 在 skyeye 上搭建起来,并在 arm-linux 上能得逞
mount NFS 为目的, 最终大家能在 arm-linux 里运营大家温馨的采取程序.
其实在 skyeye 上移植 arm-linux 并非难事,网络也可以有过多材质,
只是大都疏漏细节, 以至细微之处卡壳,所以本文力求详实清析,
希望能对大家有些用处。

自然,应该也是能够在PC上装二个DHCP服务器,关于这点,以往再商量……

二 安装 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

1.下载UDHCP程序包(Google一下就足以了)

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

2.编译代码。首先改善Makefile,将 CROSS_COMPILE
值改成你将利用的编写翻译器的特色名。注意:编写翻译器名= CROSS_COMPILE+“gcc”

三 编写翻译内核
  大家选定 linux-2.6.14.tar.bz2 以此版本, 交叉编写翻译器用 arm-linux-gcc
3.4.1 (对2.6 内核用 3.4 以下的版本编写翻译平常会并发难题)。操作步骤如下:

3.将编写翻译好的udhcpd文件拷贝到ARM-Linux系统的/opt/udhcp/目录上面

1.假若内核源码包在 /root 下, 首先解压源码:
  #cd /root
  #tar xjf linux-2.6.14.tar.bz2

4.拷贝UDHCP前后相继包中的/samples/udhcpd.conf文件拷贝到ARM-Linux系统的/etc/目录下边

2.跻身基础目录:
  #cd linux-2.6.14

5.分配的定额制ARM-Linux系统的IP设置。展开/etc/init.d/rcS文件,找到以 
/sbin/ifconfig eth0 起头的行,改正为

  修改此目录下的 Makefile, 将
  ARCH          ?= $(SUBARCH)
  CROSS_COMPILE ?=
  改为
  ARCH          ?= arm
  CROSS_COMPILE ?= /usr/local/arm/3.4.1/bin/arm-linux-

/sbin/ifconfig eth0 192.168.0.50 netmask 255.255.255.0

3.生成暗中认可的基石配置文件(for s3c2410):
  #make smdk2410_defconfig

小心:这里的IP地址设置必需在192.168.0.20 至
192.168.0.254里面,那是由安插文件udhcpd.conf中的设定所主宰的。当然也足以转移udhcpd.conf设置,如:改成173.1.1.10
到 173.1.1.222

4.为内核加多 cs8900(见附属类小部件) 网卡驱动,以支撑 NFS 挂接:
  (1)复制 cs8900 驱动到 drivers/net/arm 目录
     #cp cs8900.c drivers/net/arm
     #cp cs8900.h drivers/net/arm

注意:ARM系统中大概有多块网卡,这里能够依附实际需求去挑选网卡来进展安装。不过设置的时候势需要细心保持rcS
和 udhcpd.conf
之间的汇合,udhcpd.conf中的interface指的是利用极其网口来着DHCP服务器,私下认可是eth0。

  (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.

图片 1

     注:在运维 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 <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.参照 修正内核文件
  修改 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 内核了

四 制作根文件系统 initrd.img(Initial RAM disk)
  我们选定 busybox-1.9.2.tar.bz2 那些本子, 以静态方式编写翻译, 即生成的
busybox
不要求分享库的支撑就会运维。那样做我们就不须要安顿程序库了。短处是友善写的
arm-linux
程序在此个根文件系统中是不可能运维的,因为缺少共享程序库的支撑。不过别担忧,大家会减轻这么些主题材料的,稍后你将见到,通过在
arm-linux 里以挂接 NFS 的点子, 将宿主机的 arm-linux-gcc
编写翻译器的库文件挂到 arm-linux 的 /lib 下,
就可全面的运作我们温馨的顺序了。好,一步步来,先来探问根文件系统的成立:

1.解压源码包
  #tar xjf busybox-1.9.2.tar.bz2
  #cd busybox-1.9.2
2.修改 Makefile, 将
  ARCH          ?=
$(SUBARCH)                                                                                                                               
  CROSS_COMPILE ?= 
  改为
  ARCH          ?=
arm                                                                                                                                      
  CROSS_COMPILE ?= /usr/local/arm/3.3.2/bin/arm-linux- 

  注:这一个本子的 busybox 用 3.4.1 的 arm-linux-gcc 编写翻译某个难题, 用 3.3.2
版则可顺遂编写翻译。
3.定制 busybox
  #make menuconfig

  设置静态编写翻译方式
  Busybox Settings  —> Build Options  —> [*] Build BusyBox
as a static binary (no shared libs)
  确保 [*] Build BusyBox as a static binary (no shared libs) 被选中
4.执行 make 编译
  #make

  编写翻译出错, 音讯如下:
  applets/applets.c:15:2: warning: #warning Static linking against
glibc produces buggy executables
  applets/applets.c:16:2: warning: #warning (glibc does not cope well
with ld –gc-sections).
  applets/applets.c:17:2: warning: #warning See
sources.redhat.com/bugzilla/show_bug.cgi?id=3400
  applets/applets.c:18:2: warning: #warning Note that glibc is
unsuitable for static linking anyway.
  applets/applets.c:19:2: warning: #warning If you still want to do it,
remove -Wl,–gc-sections
  applets/applets.c:20:2: warning: #warning from scripts/trylink and
remove this warning.
  applets/applets.c:21:2: error: #error Aborting compilation.
  make[1]: *** [applets/applets.o] Error 1

  依照提示,改善 scripts/trylink, 将此文件之中有 -Wl,–gc-sections
的行都删除掉,
  然后再一次 make
  #make

发表评论

电子邮件地址不会被公开。 必填项已用*标注