2012-05-15
 1.ARM开发板环境的搭建,nor启动,通过suppervivi,下载vivi---下载Kernel----下载文件系统,然后Nandflash启动即可。
 2.在/etc/init.d/rcS 中注释开机启动qtopid, #/bin/qtopid;需要启动的就是用命令 #/bin/qtopid &
 如果此命令不行,就进入bin目录中执行 #./qtopid & //&符号是表示后台运行2012-05-16
 1.git clone /e/git/.git  ./test #将E盘下的git目录下的内容 克隆到当前目录下的test目录中
 2.从主机拷贝文件到虚拟机上--ftp, samba, ISO, USB, Vwmare tools share. ssh.
 3.虚拟机下Linux与主机共享上网,使用NAT方式,在主机下中的服务中开启DHCP,虚拟机软件设置为    NAT方式,在Linux下设置为DHCP,然后使用 #/etc/init.d/network restart 即可
   如果要使用ftp传输文件,NAT方式需要开启虚拟网卡2012-05-17
 1.嵌入式qt开发环境的搭建
   开发环境 Ubuntu8.04, VmWare Workstation, arm-linux-gcc4.4.3  软件资源:qt-embedded-linux-opensource-src-4.5.1.tar.gz ----114MB
             qt-x11-opensource-src-4.5.1.tar.gz----------------111MB
      tslib-1.4.tar.gz----------------------------------64KB   (qt-x11用于在Linux系统下开发Qt程序用的,开发出的程序只能在PC机上运行,包含了designer,qvfb等工具)
   (qt-embedded用来进行嵌入式LinuxQt应用程序开发的,开发出来的程序最终目的是要在开发板上运行)
   (qt-embedded也可以利用qvfb这个工具在PC机上模拟运行,此压缩文件解压成两个文件夹-)
   (-----------分别作为开发板Qt环境以及PC机上QT的模拟环境)
   
   (其实编译qt-x11的主要目的是为了得到qvfb这个工具)
   
   (tslib是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能
   (---通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。在Qtopia 4.*版本中
   (---默认的Tslib版本为Tslib 1.4。在Qtopia 2.*版本中,默认的Tslib版本为Tslib 1.3)***安装arm-linux-gcc编译器
     #mkdir /usr/local/arm/;mkdir /usr/localhost/arm/toolschain
     #tar xzvf arm-linux-gcc-4.4.3.tar.gz -C /usr/localhost/arm/toolschain
     此时在/usr/local/arm/toolschain/中有4.4.3目录中有个bin目录
     增添环境变量
     1.#export PATH=$PATH:/usr/local/arm/toolschain/4.4.3/bin/  ---零时添加,关闭该窗口后失效
     2.#vim /root/.bashrc           
          //在最后一行 export PATH=$PATH:/usr/local/arm/toolschain/4.3.2/bin
       #vim /home/dongliang/.bashrc  
          //在最后一行 export PATH=$PATH:/usr/local/arm/toolschain/4.3.2/bin
       重启即生效
       #arm-linux-gcc -v 可以看到版本信息 ***编译tslib(这是个触摸屏的库文件)
   (据网上说qt4只支持tslib-1.4。我没有实验别的,就用了这个,可以成功)
     把tslib-1.4.tar.gz放到/home目录下
     首先应安装automake,autoconf,libtool
     #sudo apt-get install automake autoconf libtool    #tar xvzf tslib-1.4.tar.gz
     #cd tslib
     #./autogen.sh
     #./configure --prefix=/home/qte/mytslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes
     #make
     #make install
     可以看到/home/mytslib/下有了库文件,移植时会用到!***编译安装qt-x11(编译后大小:2.1GB+0.71GB; 编译所用的时间:3h15min+6min)
     # tar -zxvf qt-x11-opensource-src-4.5.1.tar.gz
     # cd qt-x11-opensource-src-4.5.1
     # ./configure
     # make
     # make install
     qt-x11 被安装到此目录下/usr/local/Trolltech/Qt-4.5.1    编译qvfb:
     # cd qt-x11-opensource-src-4.5.1/tools/qvfb
     # make 
     把生成的qvfb复制到/home/dongliang/tmp/目录下暂存;等安装好,在拷贝到qt-embedded的bin下,如 
     # cp /home/dongliang/tmp/qvfb /usr/local/Trolltech/QtEmbedded-4.5.1/bin
     至此,qt-x11安装完毕完毕 
     (由于安装完后,编译源码的目录没有用处,所以删除#rm -rf */qt-x11* ;可以让出2G多的空间) ***编译配置QtEmbedded-4.5.2(x86版本, 耗时:10min+2h40min;占据磁盘空间:800MB+1.7GB)
    (之所以要编译x86版本的Qt,是要在PC机下模拟运行为开发板开发出来的程序)   #tar xjvf qt-embedded-linux-opensource-src-4.5.2.tar.bz2
    #cd qt-embedded-linux-opensource-src-4.5.2-x86
    #./configure -prefix=/usr/local/Trolltech/QtE-x86 -embedded x86 -qvfb
    #make
    #make install
     (安装到/usr/local/Trolltech/QtE-x86目录下)   建立脚本文件:setenv_x86.sh,输入以下内容:
        export QTEDIR=/usr/local/Trolltech/QtE-x86/
        export PATH=/usr/local/Trolltech/QtE-x86/bin/:$PATH
        export LD_LIBRARY_PATH=/usr/local/Trolltech/QtE-x86/lib/:$LD_LIBRARY_PATH
     
    编译x86版QT应用程序前,先执行此脚本文件:
        #source setenv_x86.sh
  
    编译(或编译后拷贝)qvfb
        #cp qt-x11-opensource-src-4.5.1/tools/qvfb /usr/local/Trolltech/QtE-x86/bin 
        (或我已将qvfb拷贝到/usr/local/Trolltech/Qt-4.5.1/bin目录下,从这个目录下拷贝也可以)   编译应用程序clock
        #qmake -project
        #qmake
        #make    测试
        #cd */books
        #qvfb -width 640 -height -480 &
        #./books -qws
        (注意:如果在终端上source setenv.sh,后该终端窗口上即可关联相应的环境变量,不要跳到其他窗口中)
        (开启qvfb,不能切换到其他用户,也就是运行qvfb和books应用程序必须是同一个用户,不然出错)
        (常见错误:)
  ERROR1: Qt for Embedded Linux data directory is not owned by user 1000
          Aborted
   Connected to VFB server :0: 240 x 320 x 32 85x113mm (72x72dpi)
  --------运行qvfb和应用程序books,不是同一个用户,必须是同一用户才可以 ERROR2: QWSSocket::connectToLocalFile could not connect:: Connection refused
   No Qt for Embedded Linux server appears to be running.
   If you want to run this program as a server,
   add the "-qws" command-line option.
  --------运行books应用程序,要加参数-qws ERROR3: QWSSocket::connectToLocalFile could not connect:: No such file or directory
  -------- ERROR4: $./qvfb *
   QShMemViewProtocol::QShMemViewProtocol: Invalid argument
   Cannot get shared memory 0x62050010
  --------运行qvfb,所加的参数有错误    或自己动手编写,测试运行 helloQt.cpp
  #include <QApplication>
  #include <QLabel>
  int main(int argc, char *argv[])
  {
   QApplication app(argc,argv);  QLabel label("Hello World !");
   label.show();  return app.exec();
  }
  然后重新打开终端窗口,依次输入如下命令:
  $ source /usr/local/Trolltech/Qt-x86/setenv.sh
  $ qmake –project
  $ qmake
  $ make
  $ ./helloQt  (可以不运行在帧缓存中) ***编译配置QtEmbedded-4.5.2(arm版本)
   #tar xjvf qt-embedded-linux-opensource-src-4.5.2.tar.bz2
    #cd qt-embedded-linux-opensource-src-4.5.2-arm
    #./configure -prefix=/usr/local/Trolltech/QtE-arm 
   -embedded arm 
   -release -shared -fast 
   -no-largefile 
   -qt-sql-sqlite 
   -no-qt3support 
   -no-xmlpatterns 
   -no-mmx 
   -no-3dnow 
   -no-sse
   -no-sse2 
   -no-svg 
   -no-webkit
   -qt-zlib 
   -qt-gif 
   -qt-libtiff 
   -qt-libpng 
   -qt-libmng 
   -qt-libjpeg 
   -make libs 
   -nomake tools 
   -nomake examples 
   -nomake docs 
   -nomake demo 
   -no-nis 
   -no-cups 
   -no-iconv 
   -no-dbus 
   -no-openssl 
   -xplatform qws/linux-arm-g++ 
   -little-endian 
   -qt-freetype 
   -depths 16,18 
   -qt-gfx-linuxfb 
   -no-gfx-transformed 
   -no-gfx-multiscreen 
   -no-gfx-vnc 
   -no-gfx-qvfb 
   -qt-kbd-usb 
   -no-glib 
   -qt-mouse-tslib 
   -I/usr/local/tslib/include 
   -L/usr/local/tslib/lib
    (如果以上配置项,configure后出错,使用./configure --help查看选择项,对照有无,删除)
    #make
    #make install
      (安装到/usr/local/Trolltech/QtE-arm目录下)    打包编译安装好的QtEmbedded库文件:
        tar czvf QtEmbedded-4.5.2-arm.tar.gz QtE-arm
        /usr/local/Trolltechsz QtEmbedded-4.5.2.tgz
     
    建立脚本文件:setenv_arm.sh,输入以下内容:
        export QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.2-arm/
        export PATH=/usr/local/Trolltech/QtEmbedded-4.5.2-arm/bin/:$PATH
        export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.2-arm/lib/:$LD_LIBARY_PATH   如果要在arm 环境下执行helloQT(先在Linux中,利用QtE-x86工具测试,QtE-arm工具编译目标程序)
     ~$ cd /home/dongliang/QtE/arm/  
     ~$ source /usr/local/Trolltech/QtE-arm/setenv.sh
     ~$ qmake –project
     ~$ qmake
     ~$ make    在Linux下开启nfs服务,将/home/dongliang/QtE/arm/设为共享目录
    在开发板上,执行挂载nfs命令,
    拷贝挂载的目录下的可执行程序文件到其他目录(eg:/home/)下,运行如下命令:
    ~$ ./home/helloQT -qws  
    常见错误:
    ERROR1:./qt_clock: error while loading shared libraries: libQtGui.so.4: cannot open shared object            file: No such file or directory   ./qt_clock: error while loading shared libraries: libts-0.0.so.0: cannot open shared          object file: Error 40
    ------这是主要是ARM 上的运行环境设置不当, 由于缺共享库文件所造成的
   使用软连接方式,一般在缺少的库文件一般在/usr/local/lib/, /usr/local/Trolltech/lib目录下
          使用软连接命令 # ln -s src des 
          缺少什么库文件就找到那个库文件,然后软连接到/lib/目录下 ***在ARM板上运行DEMO
  
    在ARM板上,建立配置脚本
    # mkdir /usr/local/QtE-arm/
    # cd /usr/local/QtE-arm/
    # vi setenv-arm.sh 
   添加如下内容:
      export QTDIR=/usr/local/QtE-arm
      export QPEDIR=/usr/local/QtEarm
      export LD_LIBRARY_PATH=$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH
               /usr/local/QtE-arm/analogclock -qws & 
      保存退出,并执行。
    #mkdir lib/
    #mkdir lib/fonts/
        把以下的库文件从编译生成的QtEmbedded-4.5.2.tgz文件包的/lib复制
        到目标板的/usr/local/QtE-arm/lib
           libQtCore.so.4
           libQtGui.so.4
           libQtNetwork.so.4
           libQtSql.so.4
    把例子程序analogclock从编译生成的QtEmbedded-4.5.2.tgz文件包的/examples/widgets/analogclock复制到     目标板的/usr/local/QtEmbedded-4.5.2/
    
    常用字库文件从从编译生成的QtEmbedded-4.5.2.tgz文件包的lib/fonts/复制到目标板                      的/usr/local/QtEmbedded-4.5.2/lib/fonts/    运行例子
    [root@FriendlyARM QtEmbedded-4.5.2]# ./analogclock -qws
    
    在arm开发板上,添加开机自动启动。   
    [root@FriendlyARM /]# vi /etc/init.d/rcS  
     在文件中加入:
     /usr/local/QtEmbedded-4.5.2/setenv-arm.sh         
     #/bin/qtopia &   ***tslib配置并加入到根文件系统
       vi /usr/local/tslib/etc/ts.conf
        //修改tslib/etc目录下的ts.conf文件,将module_raw input前面的注释去掉。
        最后内容如下:
        module_raw input
        module pthres pmin=1
        module variance delta=30
        module dejitter delta=100
        module linear      然后打包整个tslib的内容,下载到开发板里的对应路径下(/usr/local下)。
      在开发板上 编辑/etc/profile文件中加入运行tslib的环境变量
      vi /etc/profile
        添加如下内容:
        export TSLIB_ROOT=/usr/local/tslib
        export TSLIB_TSDEVICE=/dev/input/event0
        export TSLIB_CALIBFILE=/etc/pointercal
        export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
        export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
        export TSLIB_FBDEVICE=/dev/fb0
        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib      修改触摸屏库的配置文件etc/ts.conf,去掉module_raw input前的#号,开启该项功能,初始化触摸屏,
       主要是生成定位文件,运行tslib/bin/ts_calibrate ,然后在屏上点五下,实现定位. 这样就设置好了.      检查ts/etc/ts.conf 内容:
          module_raw input #把第二行前面的“# ”去掉
    module pthres pmin=1
    module variance delta=30
    module dejitter delta=100
    module linear
  (注意去掉“#”号时,前面的空格一定要去掉,否则后面会出段错误)       测试 
   以上都配置好后,在终端下,运行ts_calibrate进入触摸屏的五点校准.      至此,tslib的安装移植成功完成。
 
 2.Ubuntu常用命令
     #sudo su    //切换到root用户
     #df -h
     #fdisk -
     #du -sh ./
     #du -sh ./*
     #ls | wc -l3.删除虚拟机磁盘中的文件,虚拟磁盘的大小仍然不会缩小,使用vmware-vdiskmanager工具缩小磁盘
    1.c:\> vmware-vdiskmanager -r "F:\Ubuntu8.04\Ubuntu8.04.vmdk" -t 0 "G:\Ubuntu8.04.vmdk"
    (此方法为克隆,可以有效缩小虚拟磁盘的大小,基本达到你用了多少占用多少的效果)   2.另外创建一个新的虚拟磁盘,在虚拟机下,使用该盘存放文件,过大后在xp下删除该文件
     启动虚拟机,选择"Edit virtual machinesettings",点按钮"adding",按照向导默认添加一块磁盘,一般都      是SCSI设备。 指定硬盘容量,然后重启进入系统fdisk -l 会看到有一块新的设置,如果你先前有一块硬盘         (sda1,sda2...),新加的这块应该是(/dev/sdb)。看到就说明系统已经识别出这块硬盘了,接下来我们给这块硬     盘分区,格式化fdisk /dev/sdb (当然如果你添加的IDE设置,会是 hdx) x代表数字,1到4指主分区编号,5以上     指逻辑分区 分区格式化 在终端输入:fdisk -l ,可以看到
         Disk /dev/sdb: 5368 MB, 5368709120 bytes2 
         255 heads, 63 sectors/track, 652 cylinders
         Units = cylinders of 16065 * 512 = 8225280 bytes
         Disk identifier: 0x00000000        Disk /dev/sdb doesn't contain a valid partitiontable
    这里可以看到/dev/sdb 就是我们新添加的硬盘,我们需要给新的硬盘分区
     在终端输入:fdisk /dev/sdb  //fdisk 对sdb硬盘分区
     之后键入:m,可以看到帮助信息
     键入:n,添加新分区
     键入:p,选择添加主分区
     键入:l,选择主分区编号为1,这样创建后的主分区为sdb1    之后,fdisk会让你选择该分区的开始值和结束值,直接回车
     最后键入:w,保存所有并退出,完成新硬盘的分区
     格式化磁盘
     在终端输入:mkfs -t ext3 /dev/sdb1
     用ext3格式对/dev/sdb1 进行格式化    挂载该分区:
     手动挂载,在终端输入:mkdir /data ,创建新的硬盘的挂载点
     在终端键入:mount /dev/sdb1 /data ,将该新分区挂载到/data/这个目录下    开机自动挂载
     修改/etc/fstab文件,添加如下行:
     /dev/sdb1      /data     ext3   defaults,       0      1    3.在xp主机上虚拟一个磁盘,使用Vmware Workstation挂载该盘即可使用。
2012-05-19
 1.在虚拟机下挂载U盘
     如果在虚拟机软件的菜单栏(VM->deviecs)中没有"USB **",则需要在xp服务中"VMware USB Arbitration          Service"开启该服务,这样前面的就有了USB选项,选择连接,即可将xp下的U盘挂载到虚拟机下的Linux下.
     (如果开启服务后还没有USB选项,可以挂起Vmware,后在开启即可)
        #fdisk -lh   //所挂硬盘个数及分区  #df -lh 目前磁盘空间和使用情况
        #mkdir /mnt/usb
        #mount {-t vfat,ntfs} /dev/sd* /mnt/usb
        #ls | /mnt/usb
        #umount /mnt/usb2012-05-21
 1.在虚拟机下上传文件到windows主机,在主机上开启ftp服务器,在虚拟机下终端
  $ftp IP
  $put /home/dongliang/test test.txt2.运行第一个qt---hellworld程序,在ARM开发板上
3.Linux中修改环境变量
  设置到环境变量:sudo vim /etc/environment
         (在其中按照格式添加(arm-linux-gcc 路径):(:/usr/local/arm/3.4.1/bin )
         即:PATH="/bin:/sbin/:*****:/usr/local/arm/3.4.1/bin"
  保存后source /etc/environment (使刚才的环境变量生效)
  在终端 $arm-linux-gcc -version 或只输入arm-,然后按table键,即可显示所有以arm-开头的命令 2012-05-22
 1.嵌入式图形设计流程
  在QtCreator上编写qt程序和测试--->然后在Linux下使用QtE-x86测试(使用帧缓存)--->在Linux中使用  QtE-arm编译--->在Linux下搭建nfs服务器,在开发板上挂载nfs共享目录,拷贝共享目录中qt应用程序,  到开发板上并执行 2012-05-23
 1.修复Ubuntu
  光碟启动Ubuntu,在终端下
  grub> help    查看grub帮助
  grub> find /boot/grub/stage1   使用该命令会显示:(hd0,0)
  grub> root (hd0,0)
  grub> setup (hd0)
  grub> quit   退出grub      #reboot  重启Ubuntu系统
2.加快Ubuntu软件下载速度
  在网上搜索 eg:“Ubuntu8.04的更新源”
  复制内容暂存,在Linux终端下
  #vim /etc/apt/sources.list 删除所有的内容,然后添加暂存的内容
  #apt-get update 更新软件列表3.查看文件编码
  (Windows中默认的文件格式是GBK(gb2312),而LINUX一般都是UTF-8) vim直接查看文件编码
   :set fileencoding
  即可显示文件编码格式。 将gb2312编码格式转化为utf-8
   将文件用vim打开,命令模式下 :set fileencoding=utf-8
  
  如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可以在
  ~/.vimrc 文件中添加以下内容:
   set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936 这样,就可以让vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照   fileencodings提供的编码列表尝试。
2012-05-24
 1.在Linux中添加环境变量
  --临时生效方式
       $export PATH=$PATH:/*/* 
  --永久生效方式2012-05-25
 1.搭建nfs服务,使得开发板与虚拟机下Linux共享
  (在Ubuntu8.04下)
  #sudo apt-get install nfs-kernel-server
  #vim /etc/exports
   在最末位添加一行: /nfs/share 192.168.16.*(rw,sync,no_root_squash)
       
    /nfs/share---要共享的目录
                192.168.16.*---允许访问的网段,也可以是ip地址、主机名(能够被服务器解析)、*    (所有人都能访问)
    rw:读/写权限
                         sync:数据同步写入内存和硬盘
                         no_root_squash:服务器允许远程系统以root特权存取该目录   其他选项可以通过man exports查阅man文档
 重启portmapper(端口映射)服务
  #/etc/init.d/portmap restart
  重启NFS服务
  #/etc/init.d/nfs-kernel-server
  #mount -t nfs -o nolock 129.168.16.128:/nfs/share/ /mnt/ (本机IP为192.168.16.128) 出现如下错误:
   mount.nfs:access denied by server when mounting(null)
  
  解决办法:
   将/etc/exports文件中客户端的IP指定完整即可,即
   /nfs/share 192.168.16.128(rw,sync,no_root_squash)
   (以上是在本地测试) (网上大多修改/etc/hosts.deny和hosts.allow,对此操作没有帮助)
  (如果需要本机下测试,先修改exports文件中IP为本机的IP,在mount挂载时必须使用服务器的IP,即本机   的IP,必须指定清楚,不可使用localhost或127.0.0.1) 在开发板上使用#mount -t nfs -o nolock 192.168.1.128 (在export文件中已经指定了IP为开发板的IP)
  挂载nfs文件系统失败的原因
  (1)主机和网络不通:看看网线连接.主机和开发板ip是否在同一网段.XP和Linux防火墙有没有关闭等。
  (2)使用的mount命令不正确。
  (3)nfs配置文件/etc/exports配置不正确。
  (4)必要时重新启动NFS和portmap服务。2.Ubuntu下解压出错
  #tar -zxvf xxxxx.tar.gz
  出现下面的错误提示:
  gzip: stdin: not in gzip format
  tar: Child returned status 1
  tar: Error exit delayed from previous errors 我出现这个错误时,就是把指令改为:
  tar -xvf xxxx.tar.gz
  然后指令就运行了。。
  若此法不管用,只能再想别的方法了  
 3.ubuntu与主机共享上网
  虚拟机使用NAT,XP开启DHCP,Vmware DHCP,Vmware NAT服务
  Linux下网络使用DHCP, 然后#/etc/init.d/networking restart
  如果出现:
   DHCPOFFER of IP1 from IP2
   DHCPREQUEST of IP1 on the eth0 to IP2 port 67
   DHCPPACK of IP1 from IP2
   bound to IP1 --renewal in 702 seconds
  说明共享成功 如果出现:
   NO DHCPOFFER received.
   NO working leases in persistent database - sleeping 
  说明共享失败 测试是否可以访问网络
  #ping sina.com.cn (如果挂起虚拟机下Linux,开启时不能上网,按上述操作即可解决)
 4.在Ubuntu下编译内核出现错误
  #make menuconfig 
  HOSTCC  scripts/kconfig/kxgettext.o
  *** Unable to find the ncurses libraries or the
  *** required header files.
  *** 'make menuconfig' requires the ncurses libraries.
  ***
  *** Install ncurses (ncurses-devel) and try again.
  ***
  make[1]: *** [scripts/kconfig/dochecklxdialog] 错误 1
  make: *** [menuconfig] 错误 2
  错误原因:gcc 库的支持不全
  解决办法: sudo apt-get install libncurses5-dev 或者:sudo apt-get install ncurses-dev5.VM虚拟机Ubuntu8.04配置tftp服务
         (tftp服务经常在u-boot上下载内核或文件系统使用) 安装相关软件包
   apt-get install tftpd     (服务端)
   apt-get install tftp     (客户端)  
   apt-get install xinetd   建立配置文件
   cd /etc/xinetd.d/
   (如果没有tftp文件,就新建一个tftp)
   vi tftp
   加入以下内容:
   service tftp
   {
                socket_type               = dgram
             protocol                  = udp
             wait                      = yes
             user                      = root
             server                    = /usr/sbin/in.tftpd
             server_args               = -s /test_disk/tftpboot
             disable                   = no
             per_source                = 11
             cps                       = 100 2
             flags                     = IPv4
   }  存盘退出
 建立tftp服务文件目录
       mkdir /test_disk/tftpboot (chmod 777 /test_disk/tftpboot/)
  
  重新启动服务
       /etc/init.d/xinetd restart 安装完成!测试方法:
  在/test_disk/tftpboot 以外的目录下随便放个文件hello
  然后 到其他的目录下运行#tftp ip 进入tftp命令行
  tftp> get hello
  看看是不是能把文件下下来,如果可以就可以了,也可以put 文件上去  注意:
  1.只安装了TFTP服务器是不支持tftp命令的,但是作为服务器已经可以用了.
         2.如果输入tftp 192.168.1.108 会出现命令找不到的现象,还有必须把防火墙关了还有selinux关闭,
    重新启动网络,使配置生效.
  3.tftpboot文件夹权限改成777.在windows上输入 tftp 192.168.1.108 put d:\1.txt 就可以了 .
  4.如果出现timeout。则是Linux tftp服务器没有配置好.
  5.如果出现permission deny 则是防火墙或selinux没有关.
  6.如果你还连着无线网,请禁用。否则tftp与开发板进行不了文件传输。  (ftp是tcp协议,而tftp是udp协议)
2012-05-26
 1.在Ubuntu8.04中搭建Samba服务器
  安装samba
   #apt-get install samba      //服务器
   #apt-get install smbfs      //文件系统
   #apt-get install smbclient  //客户端 添加samba用户和密码
  (说明:登陆samba的用户必须已经是linux中的用户)
   #smbpasswd -a user //添加并给user设置samba密码 Samba服务器配置(smb.conf)
  #cp /etc/samba/smb.conf /etc/samba/smb.conf.back
  #vim /etc/samba/smb.conf //建立和配置smb.conf文件
  (samba快捷配置方式,不需要用户登录)
   在/etc/samba/smb.conf文件修改如下:
    security = share   [share]
     comment = share home
     browseable = yes
     path = /share     //#chmod 777 /share
     writeable = yes
     public = yes    //是yes/否no公开共享,若为否则进行身份验证
       //(只有当security = share 时此项才起作用) 重启samba服务
   #/etc/init.d/samba restart  //修改了配置需要重启Samba服务器 测试Samba服务器
   1.Ubuntu中测试Samba
    $smbclient //localhost/share  2.windows下测试Samba
    1.双击"网上邻居" -> "搜索" -> 输入虚拟机下的IP
    2.在运行中,输入 "\\" + "Ubuntu机器的ip或主机名"
    (最好使用第一种方法) NAT模式,开启Samba
   必须开启NAT的虚拟网卡,一般为虚拟网卡8
   (确保Linux和windows可以ping通)
   (linux和windows下firewall关闭,DHCP,Vmware DHCP,Vmware NAT服务必须开启) Brige模式,开启Samba
   设置虚拟机下Linux的IP与主机的IP在同一个网段内
   (确保Linux和windows可以ping通)
   (linux和windows下firewall关闭,即可,无须开启网卡) Samba出现的问题
   1.可以看到共享的目录,但是不能进入
    使用samba快捷配置方式,不需要用户登录  2.拷贝共享的文件到windows下出现乱码
    找到[global]在后面的行中添加
    display charset = UTF-8
    unix charset    = UTF-8
    dos charset     = cp936   (后面的三行是为了防止出现中文目录乱码的情况)
    (其中根据你的local,UTF-8 有可能需要改成 cp936) (如果想在Linux系统启动的时候让samba服务自动启动:# chkconfig smb on)
 2012-05-27
 1.Ubuntu8.04下搭建ftp服务器     安装ftp服务器软件
    #apt-get install vsftpd   接下来需要进行简单的配置,编辑它的配置文件/etc/vsftpd.conf:
    #vim /etc/vsftpd.conf   这个配置文件里面很多内容都可以保持默认
      (以下是我的vsftpd.conf的内容,基本上采用的是vsftpd的默认配置,仅做参考)  listen=YES   #开启侦听
   anonymous_enable=NO  #不允许匿名用户登录
   local_enable=YES   #允许本地用户登录
   write_enable=YES   #允许本地用户写入
   local_umask=022   #指定本地用户上传文件的权限
   dirmessage_enable=YES  #进入每个目录是显示欢迎信息
   download_enable=YES  #允许用户下载
   xferlog_enable=YES   #上传/下载文件时记录日志
   port_enable=YES     #允许主动模式登录
   connect_from_port_20=YES  #允许服务器主动模式(从20端口建立数据连接)
   local_root=/ftp/pub    #指定本地目录
   xferlog_file=/var/log/vsftpd.log  #日志文件
   chroot_local_user=YES  #限制所有的本地用户在自家目录
   secure_chroot_dir=/var/run/vsftpd/empty  
   pam_service_name=vsftpd
   rsa_cert_file=/etc/ssl/private/vsftpd.pem    #/etc/init.d/vsftpd restart
  (然后如果要创建新的FTP用户,只需要使用Linux本身的adduser即可)  测试
   1.在虚拟机Linux上,本地访问
   $ftp localhost{IP,127.0.0.1}  2.XP下DOS ftp命令访问
   cmd> ftp IP  3.XP下CuteFTP访问
  4.XP下浏览器,访问
  ftp一些常用的命令
   1.连接远程服务器
    $ftp remoteIP
    (cmd> ftp remoteIP)  2.显示远程服务器,目录中文件
    ftp> ls (dir)  3.上传文件
    (ftp> bin)
    ftp> put localfile remotefile  4.下载文件
    (ftp> bin)
    ftp> get remotefile localfile  5.退出
    ftp> quit  
 2012-05-28
 1.NFS起文件系统的制作
  (根文件系统是由一系列目录组成的,其中目录包含了应用程序,C库,以及相关的配置文件)
  1.创建文件系统的目录
   #mkdir /test_disk/rootfs/
   #cd /test_disk/rootfs
   #mkdir bin dev etc lib sbin proc sys var mnt tmp usr
   #mkdir usr/bin usr/lib usr/sbin lib/modules 2.创建设备节点
   #cd dev/
   #mknod -m 666 console c 5 1 
   #mknod -m 666 null    c 1 3  3.安装(或创建)设备文件(inittab, profile,rcS,)
   (#tar -xzvf etc/tar.gz -C /test_disk/fs/rootfs/) 4.编译内核模块
   #cd */linux-kernel/
   #make modules ARCH=arm CROSS_COMPILE=arm-linux- 5.安装内核模块
   #make modules_install ARCH=arm INSTALL_MOD_PATH=/test_disk/rootfs/
   #cd /test_disk/rootfs/lib/modules/
   #ls 6.配置busybox
   #tar xzvf busybox.tar.gz
   #cd busybox
   #make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-  必须选中和修改的项:
    1."Build Busybox as a static binary(no share libs)"
    2."Don't use /usr"
    3."cross compiler prefix"--------->arm-linux-
    4."Busybox Installation prefix"--->/test_disk/rootfs/
    (1选择的是静态连接库的方式,如果不选就是使用动态连接库的方式)
    (采用动态连接库的方式,在lib目录中添加应用程序所需的库文件)
    (Archival Utilities-->gzip这个选项一定不能掉)
   其他的命令配置选项可自行裁剪 7.编译安装busybox
   #make ARCH=arm CROSS_COMPILE=arm-linux-
   #make install
   (第一个命令:在当前的目录下有个busybox的应用程序)
   (第二个命令:安装配置的应用程序到/test_disk/rootfs/bin 和 /sbin)
   (其实在/test_disk/rootfs/bin下所有的应用程序,都是软连接到busybox)
   (busybox根据参数的不同,执行不同的命令)
   (检查是否安装好了--在bin目录下是否有busybox, sbin目录下是否有init) 8.配置内核支持NFS启动,并编译
   进入到内核所在的目录下
   #vim .config
    ?CMDLINE
    找到CONFIG_COMPILE哪行,修改为:
    CONFIG_COMPILE="root=/dev/nfs nfsroot=192.168.1.16:/test_disk/tftpboot/
      ip=192.168.1.230 rw console=ttySAC0 mem=64M"   root=/dev/nfs 内核采用nfs起根文件系统
    nfsroot=192.168.1.16:/test_disk/tftpboot/  
    (nfs起根文件系统位于nfs服务器/test_disk/tftpboot目录,服务器IP:192.168.1.16)
    ip=192.168.1.230  开发板IP,要求与服务起在网段(Bridged)
    rw   文件系统可读可写
    console=ttySAC0  以ttySAC0作为控制台
    mem=64M 开发板的内存大小64MB
   (以上其实可以在make menuconfig中修改,但是很麻烦)  #make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-
    必须选中和修改的选项:
     "File systems"->"Network File systems"->
       <*>NFS client support
       [*]NFS client support NFS version 3
       [*]Root file system on NFS
   
   #make uImage ARCH=arm CROSS_COMPILE=arm-linux-
   (在arch/arm/boot/目录下会生成uImage文件)
   #cp */arch/arm/boot/uImage /test_disk/tftpboot/ 9.在主机上,启动NFS服务
   参见搭建nfs服务
   (启动:#/etc/init.d/nfs-kernel-server restart)
   (修改配置文件:/etc/exports文件) 10.测试NFS文件系统
   启动开发板,进入Uboot
   uboot> printenv 
   uboot> setenv serverip  192.168.1.16
   uboot> setenv   ipaddr    192.168.1.230
   uboot> setenv   ethaddr   00:01:02:03:04:05
   uboot> saveenv
   uboot> ping 192.168.1.16
    (如果打印"host 192.168.1.16 is alive" 表示网络可用)
   
   uboot> tftp 31000000 uImage (#/etc/init.d/xinet restart)
    (tftp命令将服务器目录中uImage读入到开发板地址为31000000处)
   
   uboot> bootm 31000000
   
   出现一下情况:
   eth0: link down
   IP-Config: Complete:
         device=eth0, addr=192.168.0.2, mask=255.255.255.0, gw=255.255.255.255,
         host=192.168.0.2, domain=, nis-domain=(none),
         bootserver=192.168.0.1, rootserver=192.168.0.1, rootpath=  Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
   (文件系统挂载失败,导致无法启动系统)
   (由上面的IP-config信息可以看出nfs服务器IP和开发板自身的IP)  如果在Uboot命令行下使用命令使用setenv serverIP{ip}修改都无法改变以上参数中的值
  那么使用如下命令:
   uboot> setenv bootargs noinitrd root=/dev/nfs rw         nfsroot=192.168.1.16:/test_disk/fs/rootfs          ip=192.168.1.230:192.168.1.16::255.255.255.0 console=ttySAC0,115200      init=/linuxrc mem=64M  确定/etc/exports .config中CMDLINE=  bootargs三者共享的目录是一样的
 2012-05-29
 1.ramdisk起文件系统的制作
  1.清楚内核中间文件,配置文件
   #cd */linux-kernel/
   #make distclean
   #cp ./config-mini2440 .config 2.配置文件
   #vim .config
    ?CMD
   修改CONFIG_CMDLINE="initrd=0x32000000,0x200000 root=/dev/ram rw console=ttySAC0"
         "mem=64M"
    root=/dev/ram------->内核采用ramdisk方式起作为根文件系统
    initrd=0x32..,0x2.-->内核从0x32..读取文件系统,大小是2M
    rw------------------>文件系统可读可写
    console=ttySAC0----->以ttySAC0作为控制台
    mem=64M------------->内存大小为64MB 3.配置内核
   #make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-
    "General setup"-->
      [*]Initial RAM filesystem and RAM disk
    "Device Drivers"-->"Block devices"-->
      <*> RAM block device support 4.编译内核
   #make uImage ARCH=arm CROSS_COMPILE=arm-linux-
   (编译完后生成的内核镜像uImage位于arch/arm/boot目录下) 5.拷贝生成的内核文件uImage文件到tftp目录中
   #cp ./arch/arm/boot/uImage /test_disk/tftpboot/uImage-ram
   #ls /test_disk/tftpboot/ 6.制作ramdisk文件系统
   #cd /test_disk/fs/rootfs/
   #rm ./lib/modules/*-FriendlyARM/* -rf (这些模块暂时不会用到,所以删除)
   #cd /test_disk/fs/
   #../tools/genext2fs -b 8192 -d ./rootfs ./ramdiskfs
   #gzip -9 -f ramdiskfs //在当前目录下生成ramdiskfs.gz文件 7.将制作的ramdisk.gz拷贝到tftp目录中
   #cp ./ramdiskfs.gz /test_disk/tftpboot/
   #ls /test_disk/tftpboot/ 8.在U-Boot中通过tftp下载内核
   uboot> ping 192.168.1.16
   uboot> tftp 31000000 uImage-ram 9.在U-boot中通过tftp下载文件系统ramdisk.gz
   uboot> tftp 32000000 ramdiskfs.gz
    (由于在内核配置中已经设置了文件系统在0x32000000地址) 10.启动内核
   uboot> bootm 31000000 常见错误:
  1.No filesystem could mount root, tried:  ext2 yaffs yaffs2 vfat
      Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0) 2.RAMDISK: incomplete write (-28 != 32768) 4194304
       VFS: Mounted root (ext2 filesystem).
       attempt to access beyond end of device
       ram0: rw=0, want=11240, limit=8192 常见解决办法:
  1.查看内核是否选用"EABI选项"(arm-linux-gcc默认打开的,而在编译内核时,这个选项应该打开) 2.检查你的内核是否有支持RAMDISK和ext2文件系统
 3.查看Uboot传递给内核传递的参数是否正确(bootcmd和bootargs)
    uboot> setenv bootargs initrd=0x31000000,0x200000 root=/dev/ram rw init=/linuxrc      console=ttySAC0 mem=64M
    uboot> saveenv (保存u-boot环境变量) 4.ramdisk的blocksize等参数和kernel不一致
 5.在内存中内核过大是否覆盖文件系统
    不用裁剪内核,最好的办法是先下载文件系统,然后下载内核(即下载文件系统到0x31000000,然后下载           内核到0x3200000,然后修改Uboot中bootargs参数)2012-09-07
 1.启动内核错误
  RAMDISK: Compressed image found at block 0
  RAMDISK: incomplete write (ramdisk too small?) (-28 != 32768)
  
  正确启动时的信息应该是:
   RAMDISK: Compressed image found at block 0
   Freeing initrd memory: 6144K
   Freeing init memory: 72K 修改内核配置中的:
   Device Drivers->Block Device->RAM disk size 将该值修改为40960。