发布新日志

  • Linux串口编程简介

    2009-10-20 19:18:10

    Linux串口编程简介(转至http://hi.baidu.com/adane/blog/item/b3bac3fd4c922440d7887d6f.html)

    Linux 操作系统从一开始就对串行口提供了很好的支持,本文就 Linux 下的串行口通讯编程进行简单的介绍。

    《Serial Programming Guide for POSIX Operating Systems》

    计算机串口的引脚说明

    序号 信号名称 符号 流向 功能
    2 发送数据 TXD DTE→DCE DTE发送串行数据
    3 接收数据 RXD DTE←DCE DTE 接收串行数据
    4 请求发送 RTS DTE→DCE DTE 请求 DCE 将线路切换到发送方式
    5 允许发送 CTS DTE←DCE DCE 告诉 DTE 线路已接通可以发送数据
    6 数据设备准备好 DSR DTE←DCE DCE 准备好
    7 信号地        信号公共地
    8 载波检测 DCD DTE←DCE 表示 DCE 接收到远程载波
    20 数据终端准备好 DTR DTE→DCE DTE 准备好
    22 振铃指示 RI DTE←DCE 表示 DCE 与线路接通,出现振铃

    串口操作需要的头文件

    #include <stdio.h> /*标准输入输出定义*/

    #include <stdlib.h> /*标准函数库定义*/

    #include <unistd.h> /*Unix 标准函数定义*/

    #include <sys/types.h>

    #include <sys/stat.h>

    #include <fcntl.h> /*文件控制定义*/

    #include <termios.h> /*PPSIX 终端控制定义*/

    #include <errno.h> /*错误号定义*/

    在 Linux 下串口文件是位于 /dev 下的

    串口一 为 /dev/ttyS0

    串口二 为 /dev/ttyS1

    打开串口是通过使用标准的文件打开函数操作:

    int fd;

    /*以读写方式打开串口*/

    fd = open( "/dev/ttyS0", O_RDWR);

    if (-1 == fd){

    /* 不能打开串口一*/

    perror(" 提示错误!");

    }

    最基本的设置串口包括波特率设置,效验位和停止位设置。

    串口的设置主要是设置 struct termios 结构体的各成员值。

    struct termio

    { unsigned short c_iflag; /* 输入模式标志 */

    unsigned short c_oflag; /* 输出模式标志 */

    unsigned short c_cflag; /* 控制模式标志*/

    unsigned short c_lflag; /* local mode flags */

    unsigned char c_line; /* line discipline */

    unsigned char c_cc[NCC]; /* control characters */

    };

    设置这个结构体很复杂,我这里就只说说常见的一些设置:

    波特率设置

    下面是修改波特率的代码:

    struct termios Opt;

    tcgetattr(fd, &Opt);

    cfsetispeed(&Opt,B19200); /*设置为19200Bps*/

    cfsetospeed(&Opt,B19200);

    tcsetattr(fd,TCANOW,&Opt);

    设置波特率的例子函数:

    /**

    *@brief 设置串口通信速率

    *@param fd 类型 int 打开串口的文件句柄

    *@param speed 类型 int 串口速度

    *@return void

    */

    int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,

    B38400, B19200, B9600, B4800, B2400, B1200, B300, };

    int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300, 38400,

    19200, 9600, 4800, 2400, 1200, 300, };

    void set_speed(int fd, int speed){

    int i;

    int status;

    struct termios Opt;

    tcgetattr(fd, &Opt);

    for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++) {

    if (speed == name_arr[i]) {

    tcflush(fd, TCIOFLUSH);

    cfsetispeed(&Opt, speed_arr[i]);

    cfsetospeed(&Opt, speed_arr[i]);

    status = tcsetattr(fd1, TCSANOW, &Opt);

    if (status != 0) {

    perror("tcsetattr fd1");

    return;

    }

    tcflush(fd,TCIOFLUSH);

    }

    }

    }

    效验位和停止位的设置:

    无效验 8位 Option.c_cflag &= ~PARENB;

    Option.c_cflag &= ~CSTOPB;

    Option.c_cflag &= ~CSIZE;

    Option.c_cflag |= ~CS8;

    奇效验(Odd) 7位 Option.c_cflag |= ~PARENB;

    Option.c_cflag &= ~PARODD;

    Option.c_cflag &= ~CSTOPB;

    Option.c_cflag &= ~CSIZE;

    Option.c_cflag |= ~CS7;

    偶效验(Even) 7位 Option.c_cflag &= ~PARENB;

    Option.c_cflag |= ~PARODD;

    Option.c_cflag &= ~CSTOPB;

    Option.c_cflag &= ~CSIZE;

    Option.c_cflag |= ~CS7;

    Space效验 7位 Option.c_cflag &= ~PARENB;

    Option.c_cflag &= ~CSTOPB;

    Option.c_cflag &= &~CSIZE;

    Option.c_cflag |= CS8;

    设置效验的函数:

    /**

    *@brief 设置串口数据位,停止位和效验位

    *@param fd 类型 int 打开的串口文件句柄

    *@param databits 类型 int 数据位 取值 为 7 或者8

    *@param stopbits 类型 int 停止位 取值为 1 或者2

    *@param parity 类型 int 效验类型 取值为N,E,O,,S

    */

    int set_Parity(int fd,int databits,int stopbits,int parity)

    {

    struct termios options;

    if ( tcgetattr( fd,&options) != 0) {

    perror("SetupSerial 1");

    return(FALSE);

    }

    options.c_cflag &= ~CSIZE;

    switch (databits) /*设置数据位数*/

    {

    case 7:

    options.c_cflag |= CS7;

    break;

    case 8:

    options.c_cflag |= CS8;

    break;

    default:

    fprintf(stderr,"Unsupported data sizen"); return (FALSE);

    }

    switch (parity)

    {

    case ''n'':

    case ''N'':

    options.c_cflag &= ~PARENB; /* Clear parity enable */

    options.c_iflag &= ~INPCK; /* Enable parity checking */

    break;

    case ''o'':

    case ''O'':

    options.c_cflag |= (PARODD | PARENB); /* 设置为奇效验*/

    options.c_iflag |= INPCK; /* Disnable parity checking */

    break;

    case ''e'':

    case ''E'':

    options.c_cflag |= PARENB; /* Enable parity */

    options.c_cflag &= ~PARODD; /* 转换为偶效验*/

    options.c_iflag |= INPCK; /* Disnable parity checking */

    break;

    case ''S'':

    case ''s'': /*as no parity*/

    options.c_cflag &= ~PARENB;

    options.c_cflag &= ~CSTOPB;break;

    default:

    fprintf(stderr,"Unsupported parityn");

    return (FALSE);

    }

    /* 设置停止位*/

    switch (stopbits)

    {

    case 1:

    options.c_cflag &= ~CSTOPB;

    break;

    case 2:

    options.c_cflag |= CSTOPB;

    break;

    default:

    fprintf(stderr,"Unsupported stop bitsn");

    return (FALSE);

    }

    /* Set input parity option */

    if (parity != ''n'')

    options.c_iflag |= INPCK;

    tcflush(fd,TCIFLUSH);

    options.c_cc[VTIME] = 150; /* 设置超时15 seconds*/

    options.c_cc[VMIN] = 0; /* Update the options and do it NOW */

    if (tcsetattr(fd,TCSANOW,&options) != 0)

    {

    perror("SetupSerial 3");

    return (FALSE);

    }

    return (TRUE);

    }

    需要注意的是:

    如果不是开发终端之类的,只是串口传输数据,而不需要串口来处理,那么使用原始模式(Raw Mode)方式来通讯,设置方式如下:

    options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/

    options.c_oflag &= ~OPOST; /*Output*/

    设置好串口之后,读写串口就很容易了,把串口当作文件读写就是。

    • 发送数据

      char buffer[1024];int Length;int nByte;nByte = write(fd, buffer ,Length)

    • 读取串口数据

      使用文件操作read函数读取,如果设置为原始模式(Raw Mode)传输数据,那么read函数返回的字符数是实际串口收到的字符数。

      可以使用操作文件的函数来实现异步读取,如fcntl,或者select等来操作。

      char buff[1024];int Len;int readByte = read(fd,buff,Len);

    关闭串口就是关闭文件。

    close(fd);

    下面是一个简单的读取串口数据的例子,使用了上面定义的一些函数和头文件

    /**********************************************************************代码说明:使用串口二测试的,发送的数据是字符,

    但是没有发送字符串结束符号,所以接收到后,后面加上了结束符号。我测试使用的是单片机发送数据到第二个串口,测试通过。

    **********************************************************************/

    #define FALSE -1

    #define TRUE 0

    /*********************************************************************/

    int OpenDev(char *Dev)

    {

    int fd = open( Dev, O_RDWR ); //| O_NOCTTY | O_NDELAY

    if (-1 == fd)

    {

    perror("Can''t Open Serial Port");

    return -1;

    }

    else

    return fd;

    }

    int main(int argc, char **argv){

    int fd;

    int nread;

    char buff[512];

    char *dev = "/dev/ttyS1"; //串口二

    fd = OpenDev(dev);

    set_speed(fd,19200);

    if (set_Parity(fd,8,1,''N'') == FALSE) {

    printf("Set Parity Errorn");

    exit (0);

    }

    while (1) //循环读取数据

    {

    while((nread = read(fd, buff, 512))>0)

    {

    printf("nLen %dn",nread);

    buff[nread+1] = '''';

    printf( "n%s", buff);

    }

    }

    //close(fd);

    // exit (0);

    }

  • 教你一招,不用root帐号也能实现复制粘贴

    2009-01-08 15:59:31

    ubuntu的安去管理很严格,我一直不会用普通帐号在界面中复制粘贴修改关键文件

    今天发现了一条好命令

    在终端中输入

    sudo gnome-open /

    输入密码后就可以自由修改根目录的文件了~不错吧
  • linux 下建立tftp server

    2009-01-07 19:05:41

    linux 下建立tftp server
    2006-08-25 20:50

    TFTP是用来下载远程文件的最简单网络协议,它其于UDP协议而实现。嵌入式linux的tftp开发环境包括两个方面:一是linux服务器端的tftp-server支持,二是嵌入式目标系统的tftp-client支持。因为u-boot本身内置支持tftp-client,所以嵌入式目标系统端就不用配置了。下面就详细介绍一下linux服务器端tftp-server的配置。

    在redhat 9.0的第三张光盘中,有tftp-server的安装rpm包。

    (1)安装

    #mount –t iso9660 /dev/hdc /mnt/cdrom //挂载光盘

    #rpm -ivh tftp-server-0.32-4.i386.rpm //安装

    #umount /mnt/cdrom //卸载光盘

    (2)修改文件

    在linux下,不管使用的是哪一种super-server,inetd或者xinetd,默认情况下TFTP服务是禁用的,所以要修改文件来开启服务。

    根据(1)的安装方法,可以修改文件/etc/xinetd.d/tftp。主要是设置TFTP服务器的根目录,开启服务。修改后的文件如下:

    service tftp
    {     socket_type               =dgram
          protocol                  =udp
          wait                      =yes
           user                     =root
           server                   =/usr/sbin/in.tftpd
           server_args              =-s  /home/lqm/tftpboot -c
           disable                  =no
           per_source               =11
           cps                      =100 2
           flags                    =IPv4
    }

    说明:修改项server_args= -s -c,其中处可以改为你的tftp-server的根目录,参数-s指定chroot,-c指定了可以创建文件。

    (3)创建tftp根目录,启动tftp-server

    #mkdir  /home/lqm/tftpboot
     #chmod o+w       /home/lqm/tftpboot
     #service xinetd restart
    这样,tftp-server就启动了。你可以登陆本机测试以下,命令如下:
     #tftp     your-ip-address
      tftp>get 
      tftp>put 
      tftp>q
     #
  • tftp.dhcp .nfs配置

    2009-01-07 19:04:48

    tftp、dhcp、nfs配置

           在嵌入式linux产品开发调试阶段经常会把目标板根文件系统挂载到开发机的NFS导出目录,且经常要通过tftp下载内核镜像文件到目标板,这里会牵涉到几个linux服务的配置,很多新手会面对NFS,tftp的配置束手无策,我这里就简单的讲一下他们的配置(呵呵,我也是新手菜鸟呀)

    我们主要进行3种配置:

    1.       tftp配置

    2.       dhcp配置

    3.       nfs配置

    : tftp配置

          首先要安装tftp service:redhat9CD3里找到tftp-server-0.32-4.i386.rpm文件

          [root@vcom/]#  rpm –ivh tftp-server-0.32-4.i386.rpm     安装tftp service

          [root@vcom/]#  rpm –qv tftp-server-0.32-4.i386.rpm      查询安装是否成功

          [root@vcom/]#  vi /etc/xinetd.d/tftp                   修改该文件里的server_args配置项为你自己的tftpboot根目录,修改disable 配置为no .然后保存退出。

    我使用的tftp文件内容如下

          service tftp

    {

            disable = no

            socket_type             = dgram

            protocol                = udp

            wait                    = yes

            disable                  = no

            user                    = root

            server                  = /usr/sbin/in.tftpd

            server_args             = -s /tftpboot

            per_source              = 110

            cps                     = 100 2

            flags                   = IPv4

    }

    .dhcp配置

          首先要安装dhcp service :redhat9CD2里找到 dhcp-3.0pl1-23.i386.rpm文件

          [root@vcom/]#  rpm –ivh dhcp-3.0pl1-23.i386.rpm   安装dhcp

          [root@vcom/]#  rpm –qv dhcp-3.0pl1-23.i386.rpm    查询安装是否成功

          [root@vcom/]#  vi /etc/dhcpd.conf                 修改dhcpd配置

          注意dhcpd..conf默认状态安装在 /usr/share/doc/dhcp-3.0.1/dhcpd.conf.sample可以

    考贝到/etc/dhcpd.conf,在此基础上修改既可以。

    我使用的dhcpd.conf文件内容如下

    DDns-update-style interim;

    ignore client-updates;

    subnet 192.168.3.0 netmask 255.255.255.0 {

            dynamic-bootp-lease-length 20;

            range dynamic-bootp 192.168.3.19 192.168.3.35;

            option routers 192.168.3.26;

            option subnet-mask 255.255.255.0;

            option domain-name-servers  192.168.3.26;

            default-lease-time 10;

            max-lease-time 10;

            host test{

                    hardware ethernet 00:60:6e:42:ba:86;

                    fixed-address 192.168.3.27

                    option root-path "ndvd9026l/target";

                    filename "zImage.treeboot_debug";

            }

    }

    其中192.168.3.26就是开发机(也是服务器)IP地址,目标板的IP地址是192.168.3.27

    . 设置NFS:

          [root@vcom/]#  vi /etc/export

    添加  /ndvd9026l/target 192.168.3.0/255.255.255.0(rw,no_root_squash)

    . 启动服务:

    [root@vcom/]#  ntsysv                            启动相关服务

    [root@vcom/]#  service dhcpd start

    [root@vcom/]#  service nfs start

    [root@vcom/]#  service portmap start

    [root@vcom/]#  service xinted star

  • redhat9.0 创建TFT[服务器和安装NFS系统

    2009-01-07 19:02:54

    redhat9.0创建tfp服务器和安装nfs系统
    2008年02月22日 星期五 13:52

    因为工作的需要,在用freescale的开发板iMX21时要首先架设tftp服务器和安装nfs支持系统在redhat上,

    以下是我的学习安装经历:

    (redhat9.0 2.4.20-8)

    TFTP是用来下载远程文件的最简单网络协议,它其于UDP协议而实现。嵌入式linux的tftp开发环境包括两个方面:一是linux服务器端的tftp-server支持,二是嵌入式目标系统的tftp-client支持。因为u-boot本身内置支持tftp-client,所以嵌入式目标系统端就不用配置了。下面就详细介绍一下linux服务器端tftp-server的配置。

    首先

    在redhat 9.0的第三张光盘中,有tftp-server的安装rpm包。

    tftp-0.32-4.i386.rpm

    tftp-server-0.32-4.i386.rpm         

    (1)        安装

    #mount   –t   iso9660   /dev/hdc   /mnt/cdrom     //挂载光盘

    #rpm   -ivh   tftp-server-0.32-4.i386.rpm          //安装

    #rpm   -ivh   tftp-0.32-4.i386.rpm          //安装tftp执行命令,如果已经安装了则不用这步

    (2)修改文件

    在linux下,不管使用的是哪一种super-server,inetd或者xinetd,默认情况下TFTP服务是禁用的,所以要修改文件来开启服务。

    根据(1)的安装方法,可以修改文件/etc/xinetd.d/tftp。主要是设置TFTP服务器的根目录,开启服务。修改后的文件如下:

    service tftp

    {      socket_type             =dgram

            protocol                   =udp

            wait                         =yes

            user                         =root

            server                      =/usr/sbin/in.tftpd

            server_args              =-s   /tftpboot -c

            disable                     =no#default is yes,modify it

            per_source              =11

            cps                          =100 2

            flags                        =IPv4

    }

    说明:修改项server_args= -s      <path>     -c,其中<path>处可以改为你的tftp-server的根目录,参数-s指定chroot(可以自己任意指定),-c指定了可以创建文件。

    (3)创建tftp根目录,启动tftp-server。

    #mkdir   /tftpboot

    #chmod o+w        /tftpboot

    #service xinetd restart

    这样,tftp-server就启动了。你可以登陆本机测试以下,命令如下:

    (4)测试

    本机测试

    #tftp      your-ip-address

       tftp>get <download file>

       tftp>put <upload file>

       tftp>q

    window测试,Windows 2000之后的操作系统自带有客户端

    tftp -i 192.168.0.1   get   b.exe  

    tftp -i 192.168.0.1   put b.exe  

    OK,tfp server架设完毕

    NFS系统的安装

    NFS服务就是将宿主机的一个目录通过网络可以被挂载到其他计算机上,并且作为其他计算机的一个目录。我们通过NFS可以很方便的将修改的文件通过NFS传输到目标板上。

    (1)安装

    1、NFS包
    -----------
    NFS需要5个RPM,分别是:
    setup-* : 共享NFS目录在/etc/exports中定义
    initscrīpts-* : 包括引导过程中装载网络目录的基本脚本
    nfs-utils-* : 包括基本的NFS命令与监控程序
    portmap-* : 支持安全NFS RPC服务的连接
    quota-* : 网络上共享的目录配额,包括rpc.rquotad (这个包不是必须的)

    redhat9.0下这五个包分别为:nfs-utils-1.0.1-2.9.i386.rpm,initscrīpts-7.14-1.i386.rpm,portmap-4.0-54.i386.rpm,setup-2.5.25-1.noarch.rpm,quota-3.06-9.i386.rpm
    2、基本监控程序
    -------------------
    要顺利运行NFS,至少需要五个Linux服务,它们各有不同的功能,有的负责装载服务,有的保证远程命令指向正确的位置。这些服务通过/etc/rc.d/init.d目录中的nfs,nfslock和portmap脚本启动。下面简单介绍每个监控程序:
    (1) 基本NFS
    rpc.nfsd是NFS服务器监控程序,它通过/etc/rc.d/init.d目录中的nfs脚本启动。NFS监控程序还启动rpc.mountd装载监控程序,并导出共享目录。

    (2) RPC装载
    可以用mount命令连接本地目录或网络目录,但还需要一个装载NFS目录的特殊监控程序rpc.mountd

    (3) 端口映射器
    portmap监控程序只是定向RPC通信数据流,但它对于NFS服务很重要。如果不运行portmap,则NFS客户机无法找到从NFS服务器共享的目录。

    (4) 重新启动与statd
    当NFS服务需要中断或者重新启动时,rpc.statd监控程序和rpc.lockd在服务器重新启动之后使客户机恢复NFS连接。

    (5) 锁定
    通过共享NFS目录打开文件时,锁定可以使用户不能覆盖同一个文件。锁定通过nfslock脚本并使用rpc.lockd监控程序启动运行。
    3. 配置NFS

    共享的NFS目录在/etc/exports中列出,这个文件控制对目录的共享。

    书写规则是:共享目录 主机(参数)

    e.g:/mnt/cdrom *.abc.com(ro,sync) master.abc.com(rw,sync)

    上面的规则代表将/mnt/cdrom目录以只读同步方式共享给*.abc.com域,并且以读写同步方式共享给master.abc.com主机。任何共享目录都要指定sync或async,也就是指定文件写入磁盘之前共享NFS目录是否响应命令。

    下面是一些NFS共享的常用参数:
    ro:只读访问
    rw:读写访问
    sync:所有数据在请求时写入共享
    async:NFS在写入数据前可以相应请求

    修改了etc/exports而不想重新启动nfs,只需运行# exportfs -rv 即可

    4. 启动NFS Server

    # service portmap start

    # service nfs start

    根据需要设置在相应的运行级别自动启动NFS:

    # chkconfig --level 235 portmap on

    # chkconfig --level 235 nfs on

    如果发现NFS在Linux系统启动后没有自动启动,则在/etc/rc.d/rc.local文件中添加一行

    /etc/init.d/nfs restart

    另外,还需要查看系统的iptables、/etc/hosts.allow、/etc/hosts.deny是否设置了正确的NFS访问规则。

    参考:

    http://www.raidcheng.net/blog/archives/2005/04/21/index.html#000174

    http://nfs.sourceforge.net/nfs-howto/index.html

    5. 启动NFS Client

    5.1 显示Server的共享目录

    # showmount -e 10.193.10.1

    5.2 mount

    # mount -t nfs 10.193.10.1:/home/public /home/nfs/public

    把10.193.10.1下的/home/public mount到本地/home/nfs/public下

    用 df看一下目录mount是否成功

  • Red hat linux 9.0 五笔安装实例

    2009-01-07 19:01:48

    1 Red hat linux 9.0 五笔安装实例
     在Linux下,似乎只有拼音输入法,对于一直以来都用五笔的我来说,用拼音无疑是一种极其痛苦的折磨。
       在网上下载小企来安装,可是还是出了问题。然后,我下载fcitx- 3.2.tar.bz2,也就是3.2版本来安装,一切都很顺利,安装好后注销当前用户再重新登录就可以用五笔了。哈哈,现在感觉真的很爽!!!
    下面我把安装的步骤列出来,希望能给需要的人带来帮助。
    一、下载到/root目录下
    源码包:
    fcitx-3.2.tar.bz2
    请到
    http://www.fcitx.org 下载区下载;
    二、安装:
    以root登录(在x环境下,工作目录/root)
    删除当前输入法:
    #rpm -e miniChinput
    #rpm -e Chinput
    #rpm -e xcin
    源码包的解压与安装:
    # tar jxvf fcitx-3.2.tar.bz2
    # cd fcitx-3.2
    # ./configure
    # make
    # make install
    三、Fcitx 3.2的配置;
    在root/.xinput.d/里建立文件zh_CN,用vi建立,包含下面内容, 就可以了;
    XIM=fcitx
    XIM_PROGRAM=fcitx
    GTK_IM_MODULE=fcitx
    XMODIFIERS="@im=fcitx"
    gnome-im-settings-daemon >/dev/null

    如果当前用户/root下没有 .xinput.d目录,就建一个。然后再建一个zh_CN的文件,内容就是上面的那段。
    [root@localhost root]# mkdir /.xinput.d
    这样就差不多能用起来了。直接运行一下命令;
    [root@localhost root]# fcitx或者用光标点 主菜单---运行---fcitx(输入)--确定

    如果不能使用fcitx ,可能得设置设置一下变量;
    还得设置一下当前用户的环境变量,也就是在你想用的那个用户的家目录下的 即root/.bashrc 文件。
    .bashrc这个文件是隐藏的,你可以用 vi 或者gedit编辑都行。看你习惯吧。
    #vi .bashrc 即可
    在里面加两行,如下:
    export LC_CTYPE="zh_CN"
    export XMODIFIERS="@im=fcitx"

    注意保存一下,否则不起做用;
    存在的问题;
    如果您用中文桌面环境,能启动fcitx ,但不能输入,大多是控制台的locale和桌面的locale不一致所引起的。
    请在root/.bashrc 中加入一行;
    export LANG="zh_CN.UTF-8"
    另外还在建一个 root/.i18n的文件;内容如下:
    LANG="zh_CN.UTF-8"
    重启X就好了,按CTRL+ALT+BACKSPACE;就重新启动系统;若不能只好每次手动运行fcitx,方法如下 :用光标点 主菜单---运行---fcitx(输入)--确定
    另外一个问题,在 openffice 里怎样设置显示汉字
    方法:打开openffice 右击鼠标----字体----AR PL *** GB 即可,电子表格也是

  • bosybox

    2009-01-07 18:59:27

    busybox
    开放分类: Linux
            BusyBox 是标准 Linux 工具的一个单个可执行实现。BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大、更复杂的工具,例如 grep、find、mount 以及 telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀.简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux  的许多工具和命令。
           1、BusyBox 的诞生
    BusyBox 最初是由 Bruce Perens 在 1996 年为 Debian GNU/Linux 安装盘编写的。其目标是在一张软盘上创建一个可引导的 GNU/Linux 系统,这可以用作安装盘和急救盘。
            2、busybox的用法
    可以这样用busybox
    #busybox ls
    他的功能就相当运行ls命令
           最常用的用法是建立指向busybox的链接,不同的链接名完成不同的功能.
    #ln -s busybox ls
    #ln -s busybox rm
    #ln -s busybox mkdir
      然后分别运行这三个链接:
    #./ls
    #./rm
    #./mkdir
      就可以分别完成了ls rm 和mkdir命令的功能.虽然他们都指向同一个可执行程序busybox,但是只要链接名不同,完成的功能就不同,很多linux网站都提供busybox的源代码下载。
      3、配置busybox
    busybox的配置程序和linux内核菜单配置方式简直一模一样.熟悉用make menuconfig方式配置linux内核的朋友很容易上手.
    #cp busybox-1.00.tar.gz /babylinux
    #cd /babylinux
    #tar xvfz busybox-1.00.tar.gz
    #cd busybox-1.00
    #make menuconfig
      下面是需要编译进busybox的功能选项。
    General Configuration应该选的选项
    Show verbose applet usage messages
    Runtime SUID/SGID configuration via /etc/busybox.conf
    Build Options
    Build BusyBox as a static binary (no shared libs)
      这个选项是一定要选择的,这样才能把busybox编译成静态链接的可执行文件,运行时才独立于其他函数库.否则必需要其他库文件才能运行,在单一个linux内核不能使它正常工作.
      Installation Options
      Don't use /usr
      这个选项也一定要选,否则make install 后busybox将安装在原系统的/usr下,这将覆盖掉系统原有的命令.选择这个选项后,make install后会在busybox目录下生成一个叫_install的目录,里面有busybox和指向它的链接.
      其它选项都是一些linux基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了,配置好后退出并保存。
           4、编译并安装busybox
    #make
    #make install
      编译好后在busybox目录下生成子目录_install,里面的内容:
    drwxr-xr-x 2 root root 4096 11月 24 15:28 bin
    rwxrwxrwx 1 root root 11 11月 24 15:28 linuxrc -> bin/busybox
    drwxr-xr-x 2 root root 4096 11月 24 15:28 sbin
      其中可执行文件busybox在bin目录下,其他的都是指向他的符号链接.
  • linux下安装lumaqq

    2009-01-07 18:58:05

    linux下安装lumaqq[转载]
    安装LumaQQ2006
     

    安装步骤:
    1
    、下载相应的软件包: JRE   LumaQQ
    2
    、配置JRE环境

    3
    、安装LumaQQ
    4
    、测试与运行


    具体方法如下:

    1
    、下载JRE:官方网址http://www.java.com或者点击这里
        
    下载LumaQQ:官方网址http://lumaqq.linuxsir.org或者点击这里

    2
    、进入到刚刚下载的软件包的保存目录,然后先安装JRE
          sh jre-1_5_0_09-linux-i586-rpm.bin
        
    安装过程中会提示输入“yes”,输入完成后,等一会儿会看到DONE后,表示,JRE已经安装完成了。接下来要配置一下它的运行环境。

       

    # .bashrc

    # User specific aliases and functions

    alias rm='rm -i'
    alias cp='cp -i'
    alias mv='mv -i'

    # Source global
     definitions
    if
     [ -f /etc/bashrc ]; then
            . /etc/bashrc
    fi

    export JAVA_HOME=/usr/java/jre1.5.0_09
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar
    export PATH=$PATH:$JAVA_HOME/bin

    上面的加粗部分为我加入的环境变量部分,也就是说在原来的文件内容后面加入以下几行就可以了。

    export JAVA_HOME=/usr/java/jre1.5.0_09
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar
    export PATH=$PATH:$JAVA_HOME/bin

    添加完成后,重新启动机器就可以了。

    3
    、安装LumaQQ,进入到LumaQQ 2006 M2文件包的相应目录,
          tar zxvf lumaqq_2006M2-linux_gtk2_x86_no_jre.tar.gz
         
    解压完成后,会在这个目录中出现LumaQQ这个目录
    4
    、进入LumaQQ目录
          ./lumaqq
    接着QQ号码与密码就可以登录了。

  • 安装交叉环境(简单版)

    2009-01-07 18:56:00

    工具链安装:安装工具链cross-3.3.2.tar.bz2
       在usr/local 目录下建一个arm 目录
       解压cross-3.3.2.tar.bz2 (tar xvjf cross-3.3.2.tar.bz2)后生成一个3.3.2目录
       添加环境变量
       在文件/etc/bashrc 文件最后添加:
       export PATH=/usr/local/arm/3.3.2/bin:$PATH
Open Toolbar