Chinaunix首页 | 论坛 | 博客
  • 博客访问: 281958
  • 博文数量: 85
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 525
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-12 21:41
文章分类

全部博文(85)

文章存档

2013年(37)

2011年(2)

2010年(3)

2009年(43)

我的朋友

分类: LINUX

2010-07-21 20:20:34

 
2008-10-25 21:19
 

操作环境:
pc i686 + fc6 + arm-linux-gcc-3.4.6
目标板 atrm9200 + armlinux-2.6.18.8   

1 super-server介绍
super-server是一个特殊的监控程序,由它负责监听所有启用的网络服务的端口号。当某个端口接收到服务请求,super-server首先启动响应的网络监控程序,软后将服务请求传递给该网络监控程序以便提供服务。
linux主要有两个internet super-server可用:inetd和xinetd

2 inetd
     inetd在系统引导时启动,并从/etc/inetd.conf的配置文件中取得需要管理的服务的列表。inetd除了调用inetd.conf中配置 的服务序外,还有许多有inetd自己处理的一般服务,称为内部服务。这些服务包括简单第产生字符串chargen,返回系统日期时间的daytime等 服务。

(1) inetd获得,可以从上下载。
(2) 解压配置
   #CC=arm-linux-gcc ./configure --prefix=/usr/local/arm
   1) Compiler arm-linux-gcc does not exist or cannot compile C; try another.
    configure line 110: ./__conftest || exit 1
    改为:#./__conftest || exit 1
   2) This package needs BSD signal semantics to run.
    configure line 190: ./__conftest || exit 1
    改为:#./__conftest || exit 1
   3) Checking for snprintf implementation... missing
    configure line 300: ./__conftest || exit 1
    改为:#./__conftest || exit 1
   以上错误的是由于arm-linux-gcc编译生成的二进制文件在PC机上不能执行所致。
(3) 编译
   #make
(4) 安装
   1) 将inetd/inetd拷贝到目标板的/usr/sbin目录下。
   2) 将etc.sample/inetd.conf拷贝到arm-linux的/etc目录下。
   3) 修改目标板/etc/inittab文件,为inetd加入一行设定,以便系统启动后就运行inetd。
    ::respawn:/usr/sbin/inetd -i
(5) inetd配置文件inetd.conf
   该文件中的每一行都是由以下几个字段组成的:
    service type protocol wait user server cmdline
   字段的含义如下:
   1) service
    给出服务的名称,可以通过/etc/services文件查到,还包括了该服务的协议好端口号。
   2) type
    指定一个套接字类型,或者是stream(基于连接的协议),或者是dgram(基于数据报的协议)。
   3) protocol
    服务所使用的传输协议,必须是/etc/protocols文件中能找到的有效协议。
   4) wait
    该选项只用于dgram套接字。其值可以是wait或nowait。如果指定为wait那么对于指定的端口inetd任何时候只
    执行一次服务器程序。否则的话,在执行了指定的服务器程序以后,它将立刻在这个端口上技术监听。
    对于“单线程”服务器程序,需指定为wait。对于“多线程”服务器程序允许无限量的例程并发运行,所以
    可以指定为nowait。
   5) user
    用户登陆id,程序执行时由本id的用户拥有该进程。
   6) server
    给出执行的服务器程序的路径。内部服务用关键字internal标记。
   7) cmdline
    这是传给服务器程序的命令行。该命令可以被执行的服务器名开始,可以包含需要传递给它的任何参数。
    如果使用TCP包裹程序,需要在这里指定服务器程序的全路径名。如果不是,你可以用它在进程列表中显
    示的服务器名来指定它。
(6) inetd.conf样例
   #
   # inetd services
   ftp      stream tcp nowait root /usr/sbin/ftpd    in.ftpd -l
   telnet   stream tcp nowait root /usr/sbin/telnetd in.telnetd -b/etc/issue
   #finger stream tcp nowait bin   /usr/sbin/fingerd in.fingerd
   #tftp    dgram udp wait nobody /usr/sbin/tftpd   in.tftpd
   #tftp    dgram udp wait nobody /usr/sbin/tftpd   in.tftpd /boot/diskless
   #login   stream tcp nowait root /usr/sbin/rlogind in.rlogind
   #shell   stream tcp nowait root /usr/sbin/rshd    in.rshd
   #exec    stream tcp nowait root /usr/sbin/rexecd in.rexecd
   #
   #       inetd internal services
   #
   daytime stream tcp nowait root internal
   daytime dgram udp nowait root internal
   time     stream tcp nowait root internal
   time     dgram udp nowait root internal
   echo     stream tcp nowait root internal
   echo     dgram udp nowait root internal
   discard stream tcp nowait root internal
   discard dgram udp nowait root internal
   chargen stream tcp nowait root internal
   chargen dgram udp nowait root internal

3 xinetd
在某些系统上使用xinetd会比inetd还好,因为xinetd还允许某种安全许可,提供多种登陆能力并能够避免拒绝访问攻击。
(1) inetd获得,可以从上下载。目前版本为2.3.14。也可以通过下载cvs版本,下载方法如下:
   cvs -d :pserver:anonymous@cvs.xinetd.org:/cvs/xinetd login
   执行后将询问口令,直接回车,在执行下面的命令
   cvs -d :pserver:anonymous@cvs.xinetd.org:/cvs/xinetd co xinetd
(2) 解压配置
   #CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/home/zht/redhatzht/sources/arm-network
   /xinetd-2.3.14/install
   其中/home/zht/redhatzht/sources/arm-network/xinetd-2.3.14/install 为xinetd源码所在目录。

(3) 编译
   #make
(4) 安装
   1) 将install/sbin/xinetd拷贝到目标板的/usr/sbin目录下。
   2) 将xinetd/sample.conf拷贝到arm-linux的/etc/xinetd.conf文件中。
   3) 修改目标板/etc/inittab文件,为xinetd加入一行设定,以便系统启动后就运行xinetd。
    ::once:/usr/sbin/xinetd
   xinetd只能被启动成监控程序,如果xinetd终止,init无法再次启动xinetd。
(5) xinetd配置文件/etc/xinetd.conf
   与inetd相比xinetd的配置有所不同,而不是更复杂,inetd所有的服务都依赖与一个主配置文件,而xinetd不
   仅可以通过/etc/xinetd.conf主配置文件进行配置,并且对于附加的服务配置可以通过独立的配置文件进行配置。
  
以下为默认配置:

   defaults
   {
           only_from      = localhost
           instances      = 60
           log_type       = SYSLOG authpriv info
           log_on_success = HOST PID
           log_on_failure = HOST
           cps            = 25 30
   }

   includedir /etc/xinetd.d

   默认配置选项含义如下:
   1) only_from
    用于指定允许连接的IP地址和主机名
   2) instances
    xinetd允许运行的服务器的最大数
   3) log_type SYSLOG|FILE
    设置你使用的录入类型,有两个选项SYSLOG和file。设置SYSLOG,将把日志信息写到系统日志中,设置为FILE,    将把日志信息写入到指定的文件中。
   4) log_on_success
    当一个用户连接成功时,可以通过该选项指定录入信息的类型,该选项有一些子选项如下:
     HOST   录入远程主机IP地址
     PID   录入新的服务器进程ID
     DURATION 录入所有的会话时间日志
     TRAFFIC   使能该选项,将录入输入输出的字节数,该选项对网络管理员会有帮助
   5) log_on_failure
    对连接失败的记录信息类型,该选项的自选项如下:
     HOST   录入远程主机IP地址
     ATTEMPT   记录所有企图访问的服务
     cps    用于限制连接访问率,该选项有两个值,第一个值为每秒钟允许的连接数,
       第二个值为在短时间内连接连接次数的上限,超过该值服务器将禁用。

以下为具体服务配置样例:
   service ftp
   {
           socket_type     = stream
           wait            = no
           user            = root
           server          = /usr/sbin/vsftpd
           server_args     = /etc/vsftpd/vsftpd.conf
           log_on_success += DURATION USERID
           log_on_failure += USERID
           nice            = 10
           disable         = no
   }
  
   service ftp为服务器的名称

   ftp配置选项含义如下:
   1) socket_type
    服务套接字类型,如stream,dgram,raw,seqpacket
   2) wait
    用于指定服务为单线程还是多线程,yes表示服务为单线程,no表示服务为多线程。
   3) user
    设置运行服务的用户名称。
   4) server
    设置服务程序的路径。
   5) server_args
    设置传递给服务程序的命令选项。
   6) nice
    设置服务的优先级,也可以用于限制服务器的资源使用。
   7) disable
    服务使能选项。

(6) xinetd.conf样例
   #
   # Sample configuration file for xinetd
   #

   defaults
   {
           instances               = 25
           log_type                = FILE /var/log/servicelog
           log_on_success = HOST PID
           log_on_failure = HOST
           only_from               = 128.138.193.0 128.138.204.0 128.138.209.0 128.138.243.0
           only_from               = localhost 192.231.139.0/24
           disabled                = tftp
   }


   #
   # Group 1: BSD services
   #
   # Shell, login, exec, comsat, talk, ntalk
   #

   service login
   {
           socket_type             = stream
           protocol                = tcp
           wait                    = no
           user                    = root
           server                  = /usr/etc/in.rlogind
           log_type                = SYSLOG local4 info
   }


   service shell
   {
           socket_type             = stream
           wait                    = no
           user                    = root
           instances               = UNLIMITED
           flags                   = IDONLY
           log_on_success += USERID
           server                  = /usr/etc/in.rshd
   }


   service exec
   {
           socket_type             = stream
           wait                    = no
           user                    = root
           server                  = /usr/etc/in.rexecd
   }

   service comsat
   {
           socket_type             = dgram
           wait                    = yes
           user                    = nobody
           group                   = tty
           server                  = /usr/etc/in.comsat
   }  

   service talk
   {
           socket_type             = dgram
           wait                    = yes
           user                    = root
           server                  = /usr/etc/in.talkd
   }

4 参考资料
构建嵌入式linux系统
linux网络管理员指南 第二版
Linux Network Administrator's Guide 3rd Edition.pdf.chm
 
 
 
 
 
 
inetd被称作 “Internet 超级服务器”, 因为它可以为多种服务管理连接。 当 inetd 接到连接时, 它能够确定连接所需的程序, 启动相应的进程,并把 socket 交给它 (服务 socket 会作为程序的标准输入、 输出和错误输出描述符)。 使用 inetd 来运行那些负载不重的服务有助于降低系统负载,因为它不需要为每个服务都启动独立的服务程序。
一般busybox里包含有inetd不需要特别安装,手工安装如下:
1、到 下载netkit-base-0.17.tar.gz
2、解压后进入netkit-base-0.17配置configure
 文件有configure、MCONFIG.in、Makefile、MRULES,配置configure能生成MCONFIG后通过make安装。
由于configure会test的是你主机环境,所以需要修改configure,把文件 ./_ _conftest || exit 1;句前全加#,然后运行:
 $CC=arm-linux-gcc ./configure –prefix=XXXX(你安装的目录)
    3、安装
$make
由于Makefile不适应与ARM-LINUX平台,所以不能用make install安装,需要手工安装
 $cp inetd/inetd XXX/usr/sbin
 $cp etc.sample/inetd.conf XXX/etc
按说明配置XXX/etc下的inetd.conf 例如远程控制
telnet stream tcp     nowait root    /usr/sbin/telnetd
需要开机即启动则在XXX/etc/initab下加上
::respawn:/usr/sbin/inetd –i
另:etc.sample里有很多配置例程可用,inetd包里包含了ping可用。
 
xinetd比inetd更优越好用,提供了访问控制,改进的日志功能和资源管理,用同样功能的,扩展了的语法取代了 inetd中的通用的行。
安装方法和inetd类似(不需要改configure),软件在可下载
 
下面对xinetd的配置做些说明:
1、我通常使用下面的命令启动xinetd,把它放在我的Internet服务启动脚本中: /usr/sbin/xinetd -filelog /var/adm/xinetd.log -f /etc/xinetd.conf
这告诉 xinetd 对所有的服务都进行纪录,日志保存到文件 /var/adm/xinetd.log中,并且使用配置文件/etc/xinetd.conf。这篇文章中的大量篇幅都将用在这个配置文件上。
2、xinetd 设置参数的语法:
<指示directive> <操作符operator> <值value>.
xinetd 指示符列在表一中,在这里我们将忽略 flags,type,env 和 passenv指示符。 我对将对only_from 和 no_access以及额外的日志选项加以更多的讨论
表 1. xinetd的指示符
-----------------------------------------------------------------------
   指示符                                描述
   socket_type                  网络套接字类型, 流或者数据包
   protocol                     IP 协议, 通常是TCP或者 UDP
   wait                         yes/no, 等同于inetd的wait/nowait
   user                         运行进程的用户 ID
   server                       执行的完整路径
   server_args                  传递给server的变量,或者是值
   instances                    可以启动的实例的最大的值
   start max_load               负载均衡
  log_on_success               成功启动的登记选项
   log_on_failure               联机失败的时候的日志信息
   only_from                    接受的网络或是主机
   no_access                    拒绝访问的网络或是主机
   disabled                     用在默认的 {} 中 禁止服务
   log_type                     日志的类型和路径 FILE /SYSLOG
   nice                         运行服务的优先级
   id                           日志中使用的服务名
------------------------------------------------------------------------
操作符非常简单, = 或者+=。用 =,右边给定的值传给左边的指示符。 +=也是非常直接的,用于给一个已经指定的指示符添加一个值。没有它,原先的指示符就会被覆盖,这样可以用来展开访问列表,或者跨越多行。
用如下的格式描述服务:
----------------------------------
服务名
{
        指示符 = 值
        指示符 += 值
}
----------------------------------
服务名一定要在 /etc/services列出 ,并且要用使用合适的socket和协议。
3、日志中有几个值可以用于得到你的服务器的信息
表2 不同的日志指示值
__________________________________________________________________________
值             成功/失败                 描述
PID              success                 当一个连接成功时登记产生的进程的 pid
HOST             both                    登记远程主机地址
USERID           both                    登记远程用户的RFC 1413 ID
EXIT             success                 登记产生的进程的完成
DURATION         success                 登记任务持续的时间
ATTEMPT          failure                 登记连接失败的原因
RECORD           failure                 关于连接失败的额外的信息

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yangbomy/archive/2007/04/27/1587485.aspx
 
 
 
 
 
 
 
 
1 构造目标板的根目录及文件系统

1.1 建立一个目标板的空根目录
我们将在这里构建构建根文件系统,创建基础目录结构. 存放交叉编译后生成的目标应用程序(BUSYBOX,TINYLOGIN),存放库文件等。
    # mkdir rootfs
    # cd rootfs
    # pwd
    /home/arm/dev_home/rootfs
    

1.2 在rootfs中建立Linux目录树
    #mkdir bin dev etc home lib mnt proc sbin sys tmp root usr
    #mkdir mnt/etc
    #mkdir usr/bin usr/lib usr/sbin
    #touch linuxrc
    #tree
    .
    | --­bin
    | --­dev
    | --etc
    | --home
    | --­lib
    | --­linuxrc /* 此文件为启动脚本,是一shell脚本文件。本文后面有专门介绍*/
    | --­mnt
    | ` --­etc
    | --­proc
    | --­sbin
    | --­sys
    | --­tmp
    | --­root
    ` --usr
            | --bin
            | --lib
            ` --sbin
权限参照你的linux工作站即可,基础目录介绍参见本文参考资料(未尾)。
需要说明的一点就是etc目录存放配置文件,这个目录通常是需要修改的,所以在linuxrc脚本当中将etc目录
挂载为ramfs文件系统,然后将mnt/etc目录中的所有配置文件拷贝到etc目录当中,这在下一节的linuxrc脚本
文件当中会有体现。 

1.3 创建linuxrc文件
1. 创建linuxrc,加入如下内容:
    #vi linuxrc

    !/bin/sh

    echo "mount /etc as ramfs"
    /bin/mount ­-n -­t ramfs ramfs /etc
    /bin/cp ­-a /mnt/etc/* /etc

    echo "recreate the /etc/mtab entries"    
    /bin/mount ­-f  -t cramfs ­-o remount,ro /dev/mtdblock/2 /

    echo "­mount /dev/shm as tmpfs"
    /bin/mount ­-n -t tmpfs tmpfs /dev/shm

    echo "­mount /proc as proc"
    /bin/mount ­-n -t proc none /proc

    echo "­mount /sys as sysfs"
    /bin/mount ­-n -­t sysfs none /sys

    /bin/mount -n -t usbdevfs none /proc/bus/usb
    /bin/mount -n -t yaffs /dev/mtdblock/3 /var
    /bin/mount -n -t yaffs /dev/mtdblock/4 /home 

    exec /sbin/init
2. 修改权限
    #chmod 775 linuxrc
    #ls linuxrc ­-la
    -rwxrwxr-x 1 root root 533 Jun 4 11:19 linuxrc
当编译内核时,指定命令行参数如下
Boot options ­-->Default kernel command string: 我的命令行参数如下
noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200
其中的init指明kernel执行后要加载的第一个应用程序,缺省为/sbin/init,此处指定为/linuxrc


2 移植Busybox

2.1 下载busybox
从下载busybox1.1.3到/tmp目录当中,并解压.

2.2 进入解压后的目录,配置Busybox
    #make menuconfig
    Busybox Settings ­-->
            General Configuration ­-->
                    [*] Support for devfs
            Build Options ­-->
                    [*] Build BusyBox as a static binary (no shared libs)
                    /* 如果只安装busybox 将busybox编译设为静态连接 */
                    [*] Do you want to build BusyBox with a Cross Compiler?
                    (/usr/local/arm/3.3.2/bin/arm-linux-)Cross Compiler prefix
                    /* 指定交叉编译工具路径*/
            Installation options -->
                        [*] Don't usr /usr
                        /*之前没有选择这个选项,kernel始终都没有cramfs加载成功,不知道原因是什么?如果你知道的话请告诉我*/
                       (/home/arm/dev_home/rootfs/) BusyBox Installation prefix
    Init Utilities ­-->
            [*] init
            [*] Support reading an inittab file
            /* 支持init读取/etc/inittab配置文件,一定要选上*/
    Shells ­-->
            Choose your default shell (ash) ­>
            /* (X) ash 选中ash,这样生成的时候才会生成bin/sh文件
            * 看看我们前头的linuxrc脚本的头一句:
            * #!/bin/sh 是由bin/sh来解释执行的
            */
            [*] ash
    Coreutils ­-->
            [*] cp
            [*] cat
            [*] ls
            [*] mkdir
            [*] echo (basic SuSv3 version taking no options)
            [*] env
            [*] mv
            [*] pwd
            [*] rm
            [*] touch
    Editors ­-->
            [*] vi
    Linux System Utilities ­>
            [*] mount
            [*] umount
            [*] Support loopback mounts
            [*] Support for the old /etc/mtab file
    Networking Utilities ­>
            [*] inetd
            /** 支持inetd超级服务器
            * inetd的配置文件为/etc/inetd.conf文件,
            * "在该部分的4: 相关配置文件的创建"一节会有说明
            */

2.3 编译并安装Busybox
    #make TARGET_ARCH=arm all install

*这里需要注意一点的是,只要install busybox,我们根文件系统下先前建好的linuxrc就会被覆盖为一同名二进
制文件。所以要事先备份我们自己的linuxrc,在安装完busybox后,将linuxrc复制回去就好。

3 移植TinyLogin

3.1 下载
从下载tinylogin1.4到/tmp目录当中,并解压.

3.2 修改tinyLogin的Makefile
    #vi Makefile
修改记录如下:
指明静态编译,不连接动态库
    DOSTATIC = true
指明tinyLogin使用自己的算法来处理用户密码
    USE_SYSTEM_PWD_GRP = false
    USE_SYSTEM_SHADOW = false

3.3 编译并安装
    #make CROSS=/usr/local/arm/3.3.2/bin/arm-linux- \
    PREFIX=/home/arm/dev_home/rootfs all install
PREFIX指明根文件路径

4 相关配置文件的创建

进入mnt/etc中, 这里是我们存放配置文件的路径
4.1 创建帐号及密码文件
    #cp /etc/passwd .
    #cp /etc/shadow .
    #cp /etc/group .
这3个文件是从你工作站当中拷贝过来的,删除其中绝大部分不需要的用户,经过删减后的上述3个文件如下。
那么现在root的登陆密码和你工作站上的登陆口令一致了,这可能透露你工作站的信息
    #cat passwd

    root:x:0:0:root:/root:/bin/sh /* 改为/bin/sh */
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    #cat shadow
    root:$1$2LG20u89$UCEEUzBhElYpKMNZQPU.e1:13303:0:99999:7:::
    bin:*:13283:0:99999:7:::
    daemon:*:13283:0:99999:7:::
    #cat group
    root:x:0:root
    bin:x:1:root,bin,daemon
    daemon:x:2:root,bin,daemon


4.2 创建profile文件
    #vi profile
    # Set search library path
    # 这条语句设置动态库的搜索路径,极其重要!!!
    echo "Set search library path int /etc/profile"
    export LD_LIBRARY_PATH=/lib:/usr/lib
    # Set user path
    echo "Set user path in /etc/profile"
    PATH=/bin:/sbin:/usr/bin:/usr/sbin
    export PATH

4.3创建fstab文件
    # vi fstab
    none /proc proc defaults 0 0
    none /dev/pts devpts mode=0622 0 0
    tmpfs /dev/shm tmpfs defaults 0 0

5 移植inetd

5.1 inetd的选择及获取
Busybox1.1.3提供了inetd支持。如果读者使用的是较低版本的不提供inetd的Busybox,那么可以考虑使用netkit套件来提供网络服务。强烈建议使用高版本的Busybox。此节后半部分介绍如果编译布署netkit当中的inetd。

5.1.1 获取inetd
Netkit套件可以从ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/ 下载。
其中netkitbase0.17中包括inetd程序。下载netkitbase0.17到/tmp目录并解压。

5.2 编译inetd
5.2.1 修改configure 文件
开始配置netkitbase
之前需要先修改configure脚本以免它在主机上执行测试程序。
    #vi configure
将每一行出现的.
    /__conftest || exit 1;
修改成:
    # ./__conftest || exit 1;

5.2.2 编译
    #CC=/usr/local/arm/3.3.2/bin/arm-linux-gcc ./configure
    #make

5.3 配置inetd
5.3.1 拷贝inetd 到根文件系统的usr/sbin 目录中
    #cp inetd/inetd /home/arm/dev_home/rootfs/usr/sbin/
拷贝inetd的配置文件inetd.conf到根文件系统的/mnt/etc目录中
    #cp etc.sample/inetd.conf /home/arm/dev_home/rootfs/mnt/etc

5.3.2 根据需要,修改inetd.conf 配置文件
例如:支持telnetd的inetd.conf配置文件如下
    #       
    telnet stream tcp nowait root /usr/sbin/telnetd

5.3.3 拷贝配置文件
etc.sample目录下有许多网络相关配置文件,其中有一些需要拷贝到根文件系统的etc目录当中,记录如下:
    #cd etc.sample/
    #cp host.conf /home/arm/dev_home/rootfs/mnt/etc/
    #cp hosts /home/arm/dev_home/rootfs/mnt/etc/
    #cp networks /home/arm/dev_home/rootfs/mnt/etc/
    #cp protocols /home/arm/dev_home/rootfs/mnt/etc/
    #cp resolv.conf /home/arm/dev_home/rootfs/mnt/etc/
    #cp services /home/arm/dev_home/rootfs/mnt/etc/
以上重要配置文件说明如下:
host.conf:在系统中同时存在着DNS域名解析和/etc/hosts的主机表机制时,由文件/etc/host.conf来说明了解析器
的查询顺序
hosts:记录主机名到IP地址的映射
protocols:记录常用网络协议及端口别名关系,网络应用程序依赖于此文件
resolv.conf:指定DNS服务器
services:记录知名网络服务及端口,网络编程依赖于此文件

6 移植thttpd Web 服务器

6.1 下载
从下载thttpd到/tmp目录当中,并解压.

6.2 编译thttpd
    #CC=/usr/local/arm/3.3.2/bin/arm-linux-gcc ./configure ­--host=arm-linux
    #vi Makefile
    指定静态链接二进制文件
    LDFLAGS = ­-static
    #make

6.3 配置
6.3.1 拷贝thttpd 二进制可执行文件到根文件系统/usr/sbin/目录中
    #cp thttpd /home/arm/dev_home/rootfs/usr/sbin/
6.3.2 修改thttpd 配置文件
    #vi contrib/redhat-rpm/thttpd.conf
    # This section overrides defaults
    dir=/etc/thttpd/html #指明WebServer存放网页的根目录路径
    chroot
    user=root #以root身份运行thttpd
    logfile=/etc/thttpd/log/thttpd.log #日志文件路径
    pidfile=/etc/thttpd/run/thttpd.pid #pid文件路径
拷贝thttpd.conf配置文件到根文件系统的mnt/etc/目录,
系统加载后,linuxrc脚本会自动将mnt/etc/下的所有文件拷贝到/etc目录中。
    #cp contrib/redhat-rpm/thttpd.conf /home/arm/dev_home/rootfs/mnt/etc/
6.3.3 转移到根文件系统目录,创建相应的文件
    #cd /home/arm/dev_home/rootfs
    #cd mnt/etc/
创建thttpd目录
    #mkdir thttpd
    #cd thttpd
thttpd目录下的目录结构
    | --html
    |    ` --index.html Web Server网页根目录下的默认HTML文件
    | --log
    |    ` --thttpd.log 创建一个空文件就可
    ` ­--run
            `--thttpd.pid 创建一个空文件就可
html目录下的index.html文件内容如下:


         Welcome to here^^ 


        
                
                    Welcome to here^^!!!
                
        




7 建立根目录文件系统包

7.1 建立CRAMFS包
7.1.1 下载cramfs 工具
从下载源代码包.把下载包拷贝到dev_home/tools下.
    #tar ­-xzvf cramfs1.1.tar.gz

    #cd cramfs1.1
    #make
    #su root
    #cp mkcramfs /usr/bin
    #exit

注意:如果你的系统中已经安装了mkcramfs工具, 则在/usr/bin目录下是一个软link, 请先删除该文件之后, 再拷
贝该mkcramfs到/usr/bin下.
7.1.2 制作cramfs 包
    #mkcramfs rootfs rootfs.cramfs
7.1.3 写cramfs 包到Nand Flash
    #su root
    #cp rootfs.cramfs /tftpboot/

打开minicom, 进行ARM板的终端模式:


8 参考资料
1. <>
中文名:<<构建嵌入式Linux系统>>

轉自:http://blog.csdn.net/wawuta/archive/2007/01/23/1491163.aspx
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
阅读(1818) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~