博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

Atmel RM9200 嵌入式

选择嵌入式,选择钱途。
zhj1011.cublog.cn


嵌入式开发环境建立及相关的细节
         
Linux开发环境建立
 
一。安装交叉编译工具

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的盖子 。
FFT-9200开发板Flash分配情况:
  Flash地址:10000000~10FFFFFF
  10060000~101FFFFF  :内核存放区
  10200000~10FFFFFF  :根文件存放区
  

  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

 

  
      
  

    

  
 


   
   

发表于: 2007-11-21 ,修改于: 2008-08-04 10:54,已浏览373次,有评论0条 推荐 投诉


网友评论

发表评论