系統移植環境搭建筆記

{//===============================開發環境搭建===================================
約定: “$”表示是在主機上執行,“#”表示在目標板執行     

{//探討
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上同步變化
      */           
}    
    
}    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章