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。

原文地址:https://www.cnblogs.com/0822vaj/p/3463423.html