zoukankan      html  css  js  c++  java
  • ARM学习日记

    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 -l

    3.删除虚拟机磁盘中的文件,虚拟磁盘的大小仍然不会缩小,使用vmware-vdiskmanager工具缩小磁盘    1.c:> vmware-vdiskmanager -r "F:Ubuntu8.04Ubuntu8.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/usb

    2012-05-21 1.在虚拟机下上传文件到windows主机,在主机上开启ftp服务器,在虚拟机下终端  $ftp IP  $put /home/dongliang/test test.txt

    2.运行第一个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-dev

    5.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。

  • 相关阅读:
    ant 软件包不存在报错
    在 Internet Explorer 中使用 Windows 窗体控件
    智能客户端
    Back to the Future with Smart Clients
    "Automation 服务器不能创建对象" 的解决方案
    Top 10 Reasons for Developers to Create Smart Clients
    Updater Application Block for .NET
    Smart Client Application Model and the .NET Framework 1.1
    Security and Versioning Models in the Windows Forms Engine Help You Create and Deploy Smart Clients
    智能客户端技术总结(二)
  • 原文地址:https://www.cnblogs.com/0822vaj/p/3463423.html
Copyright © 2011-2022 走看看