tiny4412學習一:編譯uboot,體驗裸機

首先,咱們在ubuntu創建一個本身的文件夾,個人是:​linux

/home/wang/tiny_4412下有ubuntu

datasheet  shc(原理圖PCB文件夾) src toolsvim

src下有bash

codes   u_boot函數

code​​s是裸機存放位置,u_boot​是友善提供的安裝包​測試

tools下有​code

arm-linux-gcc-4.4.3安裝包,dnw安裝包​​​內存

下面開始體驗:​開發

1.安裝minicom創建通訊(詳見另外一篇博文)​get

2.安裝linux-gcc

  1〉解壓安裝 :sudo tar zxvf arm-linux-gcc-4.4.3.tar.gz -C /​

       直接解壓後就能夠,-C/會讓解壓的文件自動放在根目錄下指定路徑,不用管)​

       注意:C後面有個空格(不須要),而且C是大寫的(必須),它是英文單詞「Change」

       的第一個字母,在此是改變目錄的意思。執行該命令,將把arm-linux-gcc 安裝

       到/opt/Friendlyarm/toolschain/4.4.3 目錄。​​

   2〉創建目錄:​

       sudo mkdir /usr/local/arm

   3〉複製文件:​

       sudo cp -r /opt/FriendlyARM/toolschain/4.4.3        /usr/local/arm​

   4〉添加環境變量:​

       在終端輸入 sudo vim   /root/.bashrc,在最後一行輸入:​

       export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin (路徑)

       (注意等號那邊不要有空格)​​

       當即使新的環境變量生效:

        ./etc/bash.bashrc或source /root/.bashrc

​   5〉安裝兼容庫,在終端輸入:sudo apt-get install g++-multilib

   6〉測試成功沒有,登陸root後輸入: arm-linux-gcc -v

        這個命令會顯示arm-linux-gcc信息和版本    或者

        另開一個終端,輸入arm-,而後按兩下Tab,若是出現下列信息,則代表安裝 

        成功​

3.進入u_boot目錄​編譯,執行​

       make clean​       //先清除

       make distclean  //再清除配置,整個過程裏面就什麼都沒了​

       make tiny4412_config   //這必須的​

       make   //至此編譯完成​

4.把編譯完的u_boot燒到SD卡里​

   1〉插進電腦執行:

       fdisk -l   //查看SD是否被發現

       若是SD自動被掛載,則須要先卸載,查看​​ls  /media/​​

    2〉進入目錄:/sd_fuse/tiny4412   執行​

       ./sd_fusing .sh    /dev.sdb  (就是sdb,不是sdb1也不是sdb2)​

       若是提示缺乏一個mkbl2,咱們只須要返回上一目錄執行make再回來執行就行了。

    3〉把卡拔下來插到開發板上,開關撥至SD啓動。

         再打開另外一個終端執行:minicom

        啓動開發板,在出現的界面快速按空格。咱們能夠看到開發板從SDMMC啓動。

5.修改u_boot,創建裸機環境

   1〉關閉MMU

       由於開MMU 的話,System.map裏面全部函數地址都映射到c裏面,

       由於咱們以後要作中斷處理,開發裸機須要直接訪問他們的物理地址,​​​

       查看System.map:在u_boot目錄下執行:vim  System.map

       關閉:​vim include/configs/tiny4412.h

       進入後輸入:/MMU查找

      把#define CONFIG_ENABEL_MMU改爲#undef    CONFIG_ENABEL_MMU  

      保存:wq​

   2〉執行:​

       vim  board/samsung/tiny4412/config.mk​​

       把地址改爲:0x43e0 0000​  (之後也能夠用5.6.7)

       由於開發板內存地址是:4000 0000到5000 0000  256M​

                                            7000 0000到8000 0000  256M  共256Mx4  1G內存​

   3〉從新編譯u_boot​  執行:make​​

6.把編譯完的u_boot燒到SD​

   把SD卡插入電腦,查看加載進來沒​

   fdisk -l​

  進入:cd sd_fuse/​

    cd  tiny4412​

    ./sd_fusing.sh   /dev/sdb  //燒進SD​

    分紅4部分燒進SD,查看燒寫位置:vim sd_fusing.sh,怎樣燒寫的內容不容易查看。

7.SD卡插進開發板,啓動查看。(記得按空格哦)

8.查看改動:vim System.map

   查看printf地址:/printf

   看到地址爲:43e1 1e78 複製下來

9.進入​​裸機程序目錄,更改代碼:​

   #include "regs.h"

   void (*printf)(char *, ...) = 0x43e11e78;   //地址改

   int test(void)

   {

     unsigned long value = 0;

     __asm__ __volatile__ (

     "mrs %0, cpsr\n"

     : "=&r" (value)

    );

   printf(" value = 0x%x\n", value);

   return 0;

   }​

   保存wq退出,執行:make​

   能夠看到連接地址是7000 3000​

10.安裝dnw,開發板用USB線鏈接電腦。​

   在minicom終端界面:dnw  70003000​

   在目錄操做終端界面;lsusb  查看三星的設備(此時沒驅動,沒命令)​

   接下來安裝dnw:​

   進入dnw安裝包目錄:執行​

   tar zxf dnw_linux.tar.gz​

   cd dnw_linux​

   make​

   make install​  //安裝完畢​

11.進入裸機代碼目錄執行:​

   dnw test.bin  //傳到開發板  前提在minicom終端界面執行過:dnw 70003000​

12.在minicom終端界面執行:​

   go  70003000  //運行

查看出結果。至此完畢 ,回想下都作了什麼吧。

相關文章
相關標籤/搜索