系统移植环境搭建笔记

{//===============================开发环境搭建===================================
约定: “$”表示是在主机上执行,“#”表示在目标板执行     

{//探讨
JACK:Hi,ivan, 嵌入式开发环境如何搭建啊,完全不知道如何下手啊?
IVAN:网络搜索 /* 注: 如何搜索关键字,快速找到需要信息。是项目开发中重要的一种能力。 如下
                “ubuntu 嵌入式 开发环境 搭建 ” 。注意关键字要简明,且用空格隔开,方便搜索引擎查找 */    
    
JACK:TFTP服务不行啊,怎么办?
IVAN:网络搜索  //“ubuntu  tftp服务 安装”或 “嵌入式  tftp服务 安装”或“linux  tftp服务 安装”    


JACK:NFS服务不行啊,怎么办?
IVAN:网络搜索 // “ubuntu  NFS服务 安装”                    
}
 

{//开发主机安装
    {//虚拟机安装(已有则跳过)
        解压Ubuntu_12.04_64-bit_farsight.7z  /*该镜像是在官方Ubuntu 12.04 LTS 64bit 基础上,安装了编译调试bootloader 内核,android 4.4源码所需的工具和库。如交叉编译工具,VIM ,TFTP,NFS等*/ 
        点VMware-workstation-full-10.0.4-2249910.exe   //按默认方式安装虚拟机
        安装好后,选择“打开虚拟机”导入已安装好的镜像 Ubuntu_12.04_64-bit_farsight.vmx                  
        点播放虚拟机,选我已移动该虚拟机
        启动后,用户名是linux 密码是1
  }
  
  {//linux和window间共享
      虚拟机 -> 设置 -> 选项 -> 共享文件夹 -> 添加 -> 选择需要共享的位置(如E盘)
      $ ls /mnt/hgfs/E/  //有共享的内容显示,表示成功          
      $ cd ~
      $ ln -s /mnt/hgfs/E/ e   //创建软连接, 方便操作
  }      
                 
    {//交叉编译工具安装
      $ tar  xvf  gcc-4.6.4.tar.xz 
      $ sudo vim /etc/bash.bashrc /* 添加交叉编译工具链的路径到系统脚本
        在末尾添加:
              export PATH=/home/linux/store/gcc-4.6.4/bin:$PATH  
        注意路径要根据gcc-4.6.4的实际路径修改         
        */
      $ source  /etc/bash.bashrc  //使配置文件生效
      $ arm-n  然后按Tab键补全 //如果能补全为arm-none-linux-gnueabi- 表示安装交叉编译工具成功了
  } 
   
    {//u-boot编译(用已移植好的)
        $ cp ~/e/fs4412/2系统移植/1实验/2第二天_U-boot移植/u-boot-2013.01-fs4412.tar.xz  .
        $ tar -xvf u-boot-2013.01-fs4412.tar.xz
      $ cd u-boot-2013.01-fs4412
      $ ./build.sh //运行该脚本后会自动生成最终的镜像  u-boot-fs4412.bin
      $ cp u-boot-fs4412.bin   ~/e/USB_fastboot_tool/platform-tools/  //通过后面的fastboot方式可写到板子上
    }    

    {//内核编译(用已移植好的)
        //配置编译关系     kconfig  -> make menuconfig  -> .config  ->make ->  makefile ->zImage    
        
        $ cp ~/e/fs4412/2系统移植/1实验/3第三天_内核移植/linux-3.14-fs4412.tar.xz (根据实际文件位置).
        $ tar -xvf linux-3.14-fs4412.tar.xz
        $ cd   linux-3.14-fs4412
        $ make uImage  //编译生成适合u-boot bootm启动的内核镜像 uImage
        $ make dtbs  /*编译设备树
           make meunconfig  //图像界面进行配置(如 指定新的驱动,内核裁剪)
           make modules     //只编译模块文件(.ko文件)
           make             //编译所有     (但不包括uImage生成)
          */    
        $ cp arch/arm/boot/uImage /tftpboot/
        $ cp arch/arm/boot/dts/exynos4412-fs4412.dtb   /tftpboot/         
    }       
  
    {//tftp服务安装
        //----虚拟机上安装tftp服务
        $ sudo dpkg   -s   tftpd-hpa   //检查是否安装tftp server
        $ sudo apt-get  install  tftpd-hpa  //如果未安装,安装 tftp-server
        $ 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"
        $ mkdir  /tftpboot   //创建tftpboot目录,
        $ sudo chmod  a+w  /tftpboot
        $ 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"
      $ 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的      
                                  
        //---准备待传输文件
      拷贝  第一天_环境搭建里面里的 u-boot-fs4412.bin  uImage exynos4412-fs4412.dtb  到  /tftpboot 目录下
  }      
  
    {//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)   
           */ 
      $ sudo mkdir /nfs
      $ sudo chmod 777 /nfs
      $ cd /nfs
      $ 拷贝 1第一天_环境搭建 下的 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
  }
}     
 
{//目标机安装(u-boot烧写调试)  --  需要SD卡
    {//制作SD卡,并从SD卡启动   (使用的是2010版本u-boot,支持fastboot烧写的)  
         将sdfuse_q  拷贝到Linux下
       将SD卡插入电脑并识别
       进入sdfuse_q执行如下操作
         $ sudo ./mkuboot.sh /dev/sdb  /*出现下面的信息,表示SD启动盘制作成功
                Fuse FS4412 trustzone uboot file into SD card
                /dev/sdb reader is identified.
                u-boot-fs4412.bin fusing...
                1029+1 records in
                1029+1 records out
                527104 bytes (527 kB) copied, 5.31834 s, 99.1 kB/s
                u-boot-fs4412.bin image has been fused successfully.
                Eject SD card
            */
        
        关闭开发板电源,将拨码开关SW1调至(1000)(SD启动模式)
        刚才做好的SD启动盘插入SD卡插槽
        打开电源
    }
    
    {//---fastboot烧写 
        连接USB线到板子上的USB OTG口 
        连接串口线到板子的COM2口   
        重启板子,并快速停下,在串口终端输入下面命令 /*
                              如果有有需要,可以格式化 eMMC 并创建分区
                              $ fdisk -c 0
                            $ fatformat mmc 0:1
                            $ ext3format mmc 0:2
                            $ ext3format mmc 0:3
                            $ ext3format mmc 0:4
        */
      $ reset    重启切换到2010版的sd卡启动  
      $ fastboot  //会提示装驱动,选中第一天_环境搭建里的fastboot_driver 安装     
      打开dos终端 进入USB_fastboot_tool\platform-tools目录输入
      > fastboot.exe flash bootloader u-boot-fs4412.bin  /*
              同理可以烧录其它镜像
                    > fastboot.exe flash kernel zImage
                      > fastboot.exe flash ramdisk ramdisk-uboot.img
                    > fastboot.exe flash system system.img
                    > fastboot -w
           */
      
      关闭开发板电源,将拨码开关SW1调至0110(EMMC启动模式)后打开电源
      从flash 的u-boot启动  /*
          如果启动失败,可以通过拨号开关恢复到SD卡方式启动
          如果启动成功,想恢复到原来的u-boot启动 (第一次输入reset后会自动切换回去,不用拔拨号开关)   
        */
    }     
        
}      
 
{//1. 板子串口能显示信息
   连接串口线到板子的COM2口   //如果是用笔记本电脑的,需装usb转串口驱动(用360驱动大师在线装方便)
   确认拨号开关SW1 为0110 (从EMMC(FLASH的一种) 启动)
    
   {//无串口打印信息    
      波特率设置不对, 流控未选为无
      电脑用的可能是COM2
      u-boot被破坏了,切换到SD卡启动(SW1 改为1000)   
   }   
}     

{//2. 板子能ping通虚拟机  (要关闭防火墙 网卡右键高级)
       ------------------------           
     |板子    192.168.9.9   |
     ------------------------
                |
     ------------------------
     |电脑    192.168.9.222 |    //做中转用,和板子虚拟机IP要在同一网段, 且不能和它们IP一样     
     ------------------------
                |
       ------------------------
     |虚拟机  192.168.9.120 |
     ------------------------
        
    //---------确认板子和电脑是能通信的
         设置电脑网卡ip 为192.168.9.222  255.255.255.0 192.168.9.1
             
         启动板子,快速按任意键停在boot处,设置u-boot 的环境变量
        # setenv serverip 192.168.9.120    //注意它与虚拟机里 ubuntu 的ip要一致
        # setenv ipaddr 192.168.9.9
        # setenv gatewayip  192.168.9.1
        # 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
                */
        # ping 192.168.9.222   //测试网络是否连通  ,注意在u-boot中, 它能ping电脑, 电脑不能ping它  
                              //注意,要拔掉jtag线,否则ping 会重启  
               host 192.168.9.222 is alive    //is alive 表示ok    
        # saveenv   保存设置            
      
           
    //---------确认电脑和虚拟机时能通信
        编辑 -> 虚拟网络编辑器  ->      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的切换
    $ ifconfig //看ip是否已变为了192.168.9.120
    $ ping 192.168.9.222  //测试电脑和虚拟机是否联通 (如不通,可尝试修复一下网卡,重启虚拟机)   
    
    
    //---------确认板子能和虚拟机能通讯
        $ reset  重启boot
        $ ping 192.168.9.120         //注意: boot阶段是板子能ping 电脑 ,电脑不能ping板子
            host 192.168.9.120 is alive  //通讯OK  ,失败会显示not alive
        
}        

{//3. 网络自动 tftp 加载内核,并挂载nfs  rootfs 启动
   # 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 root=/dev/nfs nfsroot=192.168.9.120:/source/rootfs rw console=ttySAC2,115200 init=/linuxrc ip=192.168.9.9     /* 挂载nfs  rootfs
         setenv bootarg  设置环境变量( bootarg是启动参数)
         root=/dev/nfs  指定根文件系统类型是 nfs
         nfsroot=192.168.9.120:/source/rootfs  指定source rootfs的位置 (是在ip 是192.168.9.120的机器上 ,的/source/rootfs目录下). 注意/nfs/rootfs必须和前面NFS服务配置文件设置一致            
        */
   # savenenv //保存环境变量

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

猜你喜欢

转载自blog.csdn.net/weixin_39148042/article/details/82494675
今日推荐