Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1223306
  • 博文数量: 322
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 3276
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-17 09:21
文章分类

全部博文(322)

文章存档

2010年(155)

2009年(167)

我的朋友

分类: 嵌入式

2009-12-17 22:16:09

一。安装交叉编译工具
1.FTP下载交叉编译工具
  #ftp ftp.arm.linux.org.uk ;用户名和密码为:FTP ,FTP 。
  #ls
  #cd pub/armlinux/toolchain/ ;交叉编译工具在此目录下 。
  #ls
  #bin  ;转换到二进制方式传输文档 。
  #get cross-2.95.3.tar.bz2 ;下载
  #bye ;推出FTP 。
2.安装交叉编译工具
  #cd /usr/local
  #mkdir arm
  #cp /home/work/cross-2.95.3.tar.bz2 ./
  #tar -xjf cross-2.95.3.tar.bz2
  指定编译器的位置。
  /etc/profile 用gedit打开 ,在pathmunge /usr/local/sbin下加上一行
                              pathmunge /usr/local/arm/2.95.3/bin
  重启
  研发板烧制Boot:
  首先要去掉JP4跳线,即去掉JP4的盖子 。
  1.首先在终极终端的Xmodem下(传送-发送文档-Xmodem)发送文档fft-loader.bin(板子光盘自带)。
  2.在Xmodem下,发送fft-Uboot-v2.0.bin文档,发送完毕后显示>FFTBoot的提示符
  3.擦除FLASH
    FFTBOOT>protect off all
    FFTBOOT>erase all
  4.   
    装入fft-boot.bin
    FFTBOOT>loadb 20000000
      在终极终端下用Kermit模式发送文档fft-boot.bin
    FFTBOOT>cp.b 20000000 10000000 5fff
      在终极终端显示拷贝的情况 。
  5.装入fft-Uboot.gz
    FFTBOOT>loadb 20000000
      在终极终端下用Kermit模式发送文档fft-Uboot-v2.0.gz
    FFTBOOT>cp.b 20000000 10010000 ffff
      在终极终端显示拷贝的情况
    FFTBOOT>protect on 10000000 1001ffff
      FLASH区域保护
    合上JP4跳线(即插上JP4的盖子)。复位重启,然后进行操作系统内核和文档系统的烧写。
二。Linux内核的配置和编译
1.下载内核或使用现成的内核压缩包 。我使用的是板子的光盘自带的内核压缩包:G:\share\FFT-9200的光盘-V2.0\标准配置光盘\Linux-arm9\内核。linux-2.4.19-rmk7.tar.gz
将内核压缩包拷贝到Linux下的/usr/src/arm下,并且解压缩,得到内核源码。
2.配置内核前的必要配置
  主要配置在内核源码中的makefile文档,主要配置两个地方:ARCH 和 CROSS_COMPILE 。
  ARCH:=arm                                 ;表示目标板为arm
  CROSS_COMPILE=您所安装的交叉编译工具的地址  ;
3.内核配置
  #make menuconfig   ;菜单界面
  此条命令在已解压缩的内核源码文档夹目录下运行,我当时没有成功,多试几次就能够了,原因不详。
  1》.Code maturity level options : 代码成熟度选择 。

1) Prompt for development and/or incomplete
code/drivers:选中此选项,则表示每个模块中处于测试中的子模块会出现在模块的配置选项中,并且在配置选项后面注明
(EXPERIMENTAL),表明这个模块还没有经过成熟的测试,不能确保模块的可靠性。
  2) Prompt for obsolete code/drivers : 选中,则模块配置选项中只出现成熟的模块,任何的模块都经过了可靠性的测试。
  一般选择1),因为某些模块虽然不成熟,却是系统所需要的 。
  2》.Loadable module support :可加载模块支持
    一些不常用的驱动或特性能够编译为单独的模块,在系统需要时,加载到内核,无需时从内核卸载。增加系统配置的灵活性 。
  3》.System Type :系统类型
    用于配置CPU类型连同对系统基本的硬件类型的支持 。
  4》.General setup : 通用配置
    配置内核对虚拟内存的支持和为System V的进程提供通信机制
  5》.Memory Technology Devices(MTD) : 存储技术设备
    MTD实际上就是嵌入式系统FLASH设备的驱动 。
  6》.Block devices : 块设备
    块设备包括了对磁盘,RANDISK等的驱动支持 。
    RAMDISK实际上就是在系统内存上虚拟了一个文档系统设备或盘 。
  7》.Networking options :网络协议栈支持
    对于大部分的嵌入式应用而言,支持TCP/IP协议栈是必需的 。
  8》.Networking device support :网络设备支持
    网络设备即网络接口硬件 。对于大部分的嵌入式应用,Etherent(10 or 100Mbit)是最为常见的选择,这其中包含了对特定网卡的驱动 。
  9》.Character devices :字符设备
    字符设备包括了一类设备,比如:SPI接口设备 ,串口设备 。
  10》.File system :文档系统
    文档系统选项所涉及的内容较多,建议在默认配置的基础上进行修改 。对于大多数嵌入式应用来说,需要DOS FAT(FAT16 ,FAT 320),VFAT ,EXT2 ,NFS支持。对于FLASH设备,则需要JFFS文档系统 。
 根据自己系统的需要,配置好内核后 ,推出配置菜单,并且保存 。
4.Linux内核编译
   #make clean   ; 仍然在Linux内核的加压文档目录下运行 。此命令用于删除过时的文档,即原来的编译结果连同一些旧的数据文档 。
  
#make dep     ;执行此命令进行依赖性编译 。
依赖性编译:我添加或删除了内核的某个功能,但这个功能对程式c有影响,而程式c对程式b有影响,程式b对程式a又有影响。假如程式数量很多,很难用手
工来完成,而采用依赖性编译则能够自动完成该项工作 。
   #make zImage   ;生成可执行内核映像文档。
   
              uImage是U-BOOT专用的,zImage就是普通的压缩内核。
5.内核的烧写
  我是采用以太网模式进行内核的移植,所以服务器和研发板要用网线相连接 。
•FFT-9200的光盘-V2.0\标准配置光盘\Linux-arm9下的:
•tftpserver文档夹
•tftpboot文档夹
•复制到C盘。
•并将要烧制的内核文档拷到现在这两个文档夹下。此次用的内核文档名是:uImage-2005-03:支持NFS调试功能
•运行tftpserver文档夹中的TFTPSRV.EXE
•启动电脑终端 ,并且Stop Autoboot 。输入命令:
•  FFTBOOT>setenv ethaddr 12:34:56:78:99:aa
•  FFTBOOT>setenv ipaddr  192.168.0.11
•  FFTBOOT>setenv serverip 192.168.0.55(即现实主机的IP地址也要改成这个)
•  FFTBOOT>setenv bootdelay 5
•  FFTBOOT>saveenv
•  FFTBOOT>tftp 21000000 uImage(将内核下载到内存)
•                        
•此步结束会看到所烧内核的大小:b4a0b (内核的大小后面要用到)
  FFTBOOT>cp.b 21000000 10060000 b4a0b        ;将内核从内存的21000000起始位置拷贝至Flash的10060000起始位置 。内核的大小为:b4a0b
     
•将内核烧到Flash中去 时可能烧不进去,因为此处需要擦除Flash中的内核存放区。
•10060000~101FFFFF 内核的存放区域
•命令:erase 10060000 101FFFFF 擦除内存区域
三.根文档系统及制作
  首先从板子的附带光盘中拷贝RAMDISK压缩文档:myramdisk2.gz 。拷到/mnt/ramdisk下
   #gzip -d myramdisk2.gz    ;解压缩文档 。解压缩完毕后,出现一个myramdisk2文档 。
   #mkdir ram_disk           ;在/home/work下建文档夹ram_disk
   #mount -o loop myramdisk2 ram_disk   ;将解压得到的文档myramdisk2挂载到ram_disk文档夹下 。
   #cd ram_disk
   #ls            ;可在ram_disk目录下看到文档myramdisk2所包含的子文档系统内容 。
                  /bin和/sbin:包含有必不可少的应用程式 ,如ls,mv,cat等 。用户可根据需要选择 ,但一定要包括程式:init ,getty ,login ,mount ,运行rc的shell等 。
                  /etc :含有一些必可少的系统配置文档 。
                  /lib : 包含启动过程中所需要的共享函数库 。如缺少,则系统不能正常启动 。
                  /dev :含有系统不可缺少的设备文档 。
                  /tmp :用于存放临时文档 ,一般为空 。
   用户根据系统需要,对相关文档进行增减,即在相关目录下增加或删除一些文档 ,操作完成后,卸载ram_disk和文档myramdisk2的连接 ,并对新的ramdisk2进行压缩 。
    #umount /ram_disk    ;此法可能不行 。换 :#umount -l /mnt/ramdisk/ram_disk .在/mnt/ramdisk下执行此命令 。切记  。
    #gzip myramdisk2     ;即将myramdisk2文档压缩成一个新的压缩文档myramdisk2.gz 。在/mnt/ramdisk下运行 。
  根文档系统的移植:
     FFT-9200的光盘-V2.0\标准配置光盘\Linux-arm9下的:
•        tftpserver文档夹
•        tftpboot文档夹
•    复制到C盘。
•并将要烧制的文档系统拷到现在这两个文档夹下。此次用的文档系统是myramdisk2.gz 。是板子光盘自带的。
•运行tftpserver文档夹中的TFTPSRV.EXE
•启动电脑终端 ,并且Stop Autoboot 。输入命令:
•  FFTBOOT>setenv ethaddr 12:34:56:78:99:aa
•  FFTBOOT>setenv ipaddr  192.168.0.11
•  FFTBOOT>setenv serverip 192.168.0.55(即现实主机的IP地址也要改成这个)
•  FFTBOOT>setenv bootdelay 5
•  FFTBOOT>saveenv
•  FFTBOOT>tftp 20000000 myramdisk2.gz   (将文档系统下载到内存)
       此步结束后会看到文档系统的大小:4e3530
  FFTBOOT>cp.b 20000000 10200000 4e3530   ;将文档系统由内存拷贝到Flash 。
  FFTBOOT>
setenv bootdelay 3;setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360 console=ttyS0,115200 mem=32M
  FFTBOOT>saveenv
  FFTBOOT>
setenv bootcmd cp.b 10200000 21100000 4e3530\;bootm 10060000                                                                                     (4e3530)文档系统大小
  FFTBOOT>saveenv
  板子重启
  
• 四 。网络文档系统(NFS)及配置
    1.Linux服务器端NFS服务器的配置
     Linux下的IP设为192.168.0.55

      #vi /etc/exports    ;在该文档中添加如下内容 :
       /home 192.168.0.*(rw,sync,no_root_squash)
      添加的内容表示:允许IP地址范围在192.168.0.*的电脑以读写的权限来访问/home目录 。/home也成为服务器输出共享目录 。
      括号参数意义:
         rw :读/写权限,只读权限的参数为ro 。
         sync :数据同步写入内存和硬盘,也能够使用async,此时数据会先暂时存于内存中,而不立即写入硬盘 。
         no_root_squash :NFS服务器共享目录用户的属性,假如用户是root,那么对于这个共享目录来说就具备root的权限 。
      
         #/etc/rc.d/init.d/nfs start     ;启动NFS
     在启动服务之前,要先关掉服务器的防火墙。
     关掉防火墙的方法:在系统配置-服务器配置-服务中,关掉iptables .
     或用命令的方法:/etc/init.d/iptables stop  。
     #mount -t nfs 192.168.0.55:/home /mnt
     #ls                            ;此两句的作用是在服务器上进行NFS服务器的回环测试 ,验证共享目录是否能够被访问 。
      2.研发板的配置
     Ifconfig eth0 192.168.0.22
     mount -t nfs -o nolock 192.168.0.55:/home /mnt    挂载。
   首先研发板的内核必需支持NFS客户端 ,在进行内核配置时,必须选择而如下选项:
   File system-Network File System-Provide NFSv3 client support
五。建立Samba服务器
1).Samba的工作原理
   将一台运行Linux的机器伪装成一台运行在网络中的Windows NT服务器 。
   实际上是将NETbios协议和SMB协议绑定在TCP/IP协议上运行 。
   Samba是个工具套件。用于Unix上实现SMB(Session Message Block)协议 ,也称为NETBIOS/LanManager 。Windows实现磁盘和打印机共享,连同网上邻居也是使用这个协议 。
   #Rpm -qa | grep samba     ;检查系统是否安装Samba 。
   若没有,则到red hat 9.0第一张盘 : //cdrom/redhat/RPMS/目录下拷贝 。
    分别设虚拟机的IP为:192.168.0.55
                 Windows的IP为:192.168.0.22
     关闭虚拟机和Windows的防火墙 。
       #Service smb start                ;开启Samba服务
       #smbmount //192.168.0.22/share /mnt/smb -o username=zhj1011
二。嵌入式Linux应用程式的研发
    服务器下研发好test.c文档后,用如下命令编译应用程式:
       #arm-linux-gcc -o test test.c
    执行完命令后,会在当前目录下生成可执行文档test 。
    然后在嵌入式目标系统端即研发板挂载Linux服务器的输出共享目录,并运行应用程式 。
       #./test   
三。嵌入式Linux应用程式的调试方法
   1.在Linux服务器上使用GDB调试程式
      1).使用gcc对应用程式进行编译
           #gcc -g -o test test.c
      2).使用gdb对生成的可执行程式进行调试
           #gdb test
      gdb常用命令及功能:
      命令                              缩写                             功能描述
      help                                h                                     帮助
      file                                                                           装入待调试的可执行文档
      list                                   l                                       列出程式源码
      run                                  r                                       运行被调试的程式
      break                              b                                      配置一个断点
      delete                             d                                      删除断点或其他表达式
      continue                        c                                      继续调试程式
      next                                 n                                      单步执行但不进入函数内部
      step                                                                          单步执行进入函数内部
      print                                 p                                      打印变量值
      set variable                                                            修改变量值
      watch                              wa                                   监控变量值
      quit                                   q                                      终止gdb
      
      (gdb)  b   9           :在程式的第9行配置一个断点 。
      2.在嵌入式目标系统上使用GDB调试程式
         前提是安装好交叉编译工具 。
        首先下载gdb源码,我下载的是gdb-6.6.tar.gz  。存放于/home/zhj1011目录下 。
         #tar xvzf gdb-6.6.tar.gz         ;解压缩源码压缩包  ,在/home/zhj1011目录下运行 。gdb的解压缩文档放在/home/zhj1011下
         #mkdir /home/zhj1011/mygdb
        
#../gdb-6.6/configure --target=arm-linux --prefix=/home/zhj1011/mygdb
          ;在/home/zhj1011/mygdb下运行 。我当时没有成功是因为磁盘没有足够的空间 。
         若gdb的解压缩文档放在/home/zhj1011/mygdb下 ,则上面的编译程式为  :#./gdb-6.6/configure --target=arm-linux --prefix=/home/zhj1011/mygdb
         也就是比上面一条命令少了一个点,因为上面的解压缩文档是在运行目录的上一层,所以是../configure.............
         参数说明:target是您的目标板,我的是arm-linux,prefix是您要安装的目标文档夹。         
         #make                                        ;在/home/zhj1011/mygdb下运行 。
         #make install                            ;在/home/zhj1011/mygdb下运行 。
         建立gdbserver
         #mkdir mygdbserver              建立目录/home/zhj1011/mygdbserver
         #cd mygdbserver
         #chmod +x ../gdb-6.6/gdb/gdbserver/configure     ;在目录/home/zhj1011/mygdbserver下运行  。
         #CC=arm-linux-gcc ../gdb-6.6/gdb/gdbserver/configure --host=arm-linux --prefix=/home/zhj1011/mygdbserver  ;/home/zhj1011/mygdbserver下运行  。
         #make                                    ;/home/zhj1011/mygdbserver下运行  。
         #make install                        ;/home/zhj1011/mygdbserver下运行  。
         #arm-linux-strip gdbserver 

   
阅读(608) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~