嵌入式开发环境搭建

本文:全部参考  ivan 老师的配置方法,谢谢 ivan 老师

(1)安装虚拟机

(2)运行Linux系统

后面都是在前面两步的基础上执行的,

我们约定: “$”表示是在主机上执行,“#”表示在目标板执行 ,“//”注释    

  tftp服务安装

        //----虚拟机上安装tftp服务
   $ sudo dpkg   -s   tftpd-hpa   //检查是否安装tftp server

嵌入式开发环境搭建_第1张图片

 //表示已经安装了tftp服务


        //$ sudo apt-get  install  tftpd-hpa  //如果未安装,安装 tftp-server
        //$ sudo apt-get install tftp

 

 

        $ sudo vi  /etc/default/tftpd-hpa  //修改tftp服务器配置文件为
                TFTP_USERNAME="tftp"
                TFTP_DIRECTORY="/tftpboot"
                TFTP_ADDRESS="0.0.0.0:69"
                TFTP_OPTIONS="-c  -s  -l"

嵌入式开发环境搭建_第2张图片
        $ mkdir  /tftpboot                             //创建tftpboot目录,
        $ sudo chmod -R 777  /tftpboot      //更改文件夹权限

嵌入式开发环境搭建_第3张图片
        $ sudo service   tftpd-hpa   restart      //启动 tftp-server    
            
          
          //-----验证虚拟机tftp服务是否OK
        $ sudo cat /etc/default/tftpd-hpa     
            TFTP_USERNAME="tftp"
            TFTP_DIRECTORY="/tftpboot"
            TFTP_ADDRESS="0.0.0.0:69"
            TFTP_OPTIONS="-l -c -s"

嵌入式开发环境搭建_第4张图片
      $ sudo service   tftpd-hpa   restart      //如果有更改配置,需要重启一下 tftp-server    
        $ cd /tftpboot
        $ touch test
        $ cd /tmp
        $ tftp 127.0.0.1    
         tftp>get test  
         tftp>q
        $ ls           //看到有test文件,表示该tftp服务是OK的  

//tftp安装与检测完毕

 

 

  nfs服务安装  

        $ service nfs-kernel-server  /*检查nfs服务是否安装
          如果显示下面信息, 表示有安装
            * Usage: nfs-kernel-server {start|stop|status|reload|force-reload|restart}  


          如果没有,需安装
             #sudo apt-get install nfs-kernel-server 
        
          
    $ sudo vi /etc/exports  /*修改配置文件,指定共享目录位置 在末尾追加
       /nfs/rootfs *(rw,sync,no_root_squash)     
            或 /source/  *(rw,sync,no_subtree_check)   
           */ 

嵌入式开发环境搭建_第5张图片
      $ sudo mkdir /nfs
      $ sudo chmod 777 /nfs
      $ cd /nfs


      $ 拷贝  rootfs.tar.xz 到 /nfs 目录下       //rootfs.tar.xz是已制作好的根文件系统
      $ tar -xvf  rootfs.tar.xz 
      $ sudo chmod 777 rootfs      
      $ sudo /etc/init.d/nfs-kernel-server restart  //重启nfs服务(使得前面修改生效)       
      $ sudo mount -t nfs localhost:/nfs/rootfs/  /mnt/  //测试nfs服务是否安装成功。
      $ ls /mnt/  /*如果其中的内容和/nfs/rootfs中一致。 表示有挂载成功 
       如显示下面内容,表示成功
          bin  dev  etc  lib  linuxrc  mnt  proc  root  sbin  sys  tmp  usr  var
          */
      $ sudo umount /mnt  //卸载 

配置网络传输环境:(我们这里使用网络传输)

     编辑 -> 虚拟网络编辑器  ->      VMnet0 桥接到(选连板子的网卡) //注意不要用automic,应手动指定对应的网卡                                 
        虚拟机 -> 设置 -> 网卡适配器  -> 自定义 (选 VMnet0)    /*使虚拟机内的虚拟网卡,关联到电脑实际用到的网卡       
           通过选VMnet0 和 VMnet1 。实现连板子,还是上internet的切换
           */                                     
        点ubuntu右上角网络图标 -> 右键选编辑连接 -> 全删掉 -> 添加(改新连接名称为board) 
        -> IPV4 设置 -> 方法(选手动) -> 点添加 设置为 192.168.9.120 255.255.255.0 192.168.9.1 并保存退出        
        点右上角网络图标,先断开,再选board连接  /* 通过选board,和internet 实现连板子,还是上internet的切换
          注意如果不能选 board ,需更改网络配置文件/etc/network/interfaces的内容为
             auto lo
                 iface lo inet loopback     
                 或
                 加上
                 auto eth0
                 iface eth0 inet static
                 address 192.168.9.120
                 netmask 255.255.255.0
                 gateway 192.168.9.1
                 重启电脑     
          */ 
    $ ifconfig //看ip是否已变为了192.168.9.120
    

嵌入式开发环境搭建_第6张图片

 

嵌入式开发环境搭建_第7张图片

 

 $ ifconfig    //查看IP信息

嵌入式开发环境搭建_第8张图片

{//2. 板子能ping通虚拟机  (要关闭防火墙 网卡右键高级)
       ------------------------           
     |板子    192.168.9.110   |
     ------------------------
                |
       ------------------------
     |虚拟机  192.168.9.120 |
     ------------------------
        
    //---------确认板子和电脑是能通信的
             
         启动板子,快速按任意键停在boot处,设置u-boot 的环境变量
         //要在同一个网段    .9就点9 .6就点6 
          # setenv ipaddr 192.168.9.110        
         # setenv gatewayip  192.168.9.1       
         # setenv serverip 192.168.9.120    //注意它与虚拟机里 ubuntu 的ip要一致

        # pri  /*查看设置后效果                 
                FS4412 # pri
                baudrate=115200
                bootargs=root=/dev/nfs nfsroot=192.168.9.120:/nfs/rootfs rw console=ttySAC2,115200 init=/linuxrc ip=192.168.9.9
                bootcmd=tftp 41000000 uImage;tftp 42000000 exynos4412-fs4412.dtb;bootm 41000000 - 42000000
                bootdelay=3
                ethact=dm9000
                ethaddr=11:22:33:44:55:66
                gatewayip=192.168.9.1
                ipaddr=192.168.9.9
                netmask=255.255.255.0
                serverip=192.168.9.120
                */  
        # saveenv   保存设置            
      嵌入式开发环境搭建_第9张图片
           
    //---------确认电脑和虚拟机时能通信

嵌入式开发环境搭建_第10张图片
  
    //---------确认板子能和虚拟机能通讯
        $ ping 192.168.9.120         //注意: boot阶段是板子能ping 电脑 ,电脑不能ping板子 (要关防火墙)
            host 192.168.9.120 is alive  //通讯OK  ,失败会显示not alive
            //注意: 有时因网卡不稳定,ping不通,但tftp uImage 成功也可以。
        
}        

 网络自动 tftp 加载内核,并挂载nfs  rootfs 启动

 

(注意这只是针对三星公司的【 exynos4412-fs4412】)  //其他芯片就不同了 但理念是一样的


   # setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm 41000000 - 42000000    /* 设置tftp方式加载内核
       setenv bootcmd    设置环境变量(自启动命令 bootcmd)
       tftp 41000000 uImage\;  通过tftp从虚拟机/tftpboot目录下下载内核uImage到板子的内存  41000000 处。    \; 用于分割多个命令
       tftp 42000000 exynos4412-fs4412.dtb   通过tftp下载设备树文件 exynos4412-fs4412.dtb 到板子的内存  42000000 处
       bootm 41000000 - 42000000   启动内核(41000000处放的是内核uImage, 42000000处放的是设备树文件)
      */  
  
   # setenv bootargs noinitrd root=/dev/nfs nfsroot=192.168.9.120:/nfs/rootfs/ rw rootwait earlyprintk=ttySAC2,115200n8 console=ttySAC2,115200n8 init=/linuxrc ip=192.168.9.110 printk.time=Y clk_ignore_unused    
         /* 挂载nfs  rootfs
         setenv bootarg  设置环境变量( bootarg是启动参数)
         root=/dev/nfs  指定根文件系统类型是 nfs
         nfsroot=192.168.9.120:/nfs/rootfs  指定source rootfs的位置 (是在ip 是192.168.9.120的机器上 ,的/source/rootfs目录下). 注意/nfs/rootfs必须和前面NFS服务配置文件设置一致            
        */
   # saveenv //保存环境变量

嵌入式开发环境搭建_第11张图片

   掉电重启动板子  /* 看能否挂载nfs rootfs成功
    能看到下面信息表示成功
      [root@farsight ]# ls
       etc      linuxrc  proc     sbin     tmp      var
       bin      dev      lib      mnt      root     sys      usr
    在里面创建文件,电脑的/nfs/rootfs上同步变化
      */           
}    
    
}    

切换到对应的  nfs/rootfs   

(在里面的就是同步文件了)

//嵌入式开发环境搭建_第12张图片

//使用交叉编译工具 (没有要自己安装   )使得可执行文件能在ARM平台上运行  

$arm-none-linux-gnueabi-


嵌入式开发环境搭建_第13张图片

嵌入式开发环境搭建_第14张图片

 

//下面是配置环境时出现问题,锁定错误和解决的办法

方法:    替换法 

问题定位;二分法  

 

板子的启动,接口,端口号,(主机)(目标机)

排除:线没有问题,(换电脑,换线)替换法


    
    

你可能感兴趣的:(ARM)