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。