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

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值