1. 程式人生 > >聯發科Linkit 7688 (一) 上手及在Mac下搭建OpenWrt交叉編譯環境,C語言編譯Hello,World

聯發科Linkit 7688 (一) 上手及在Mac下搭建OpenWrt交叉編譯環境,C語言編譯Hello,World

Linkit 系列博文:


淘了一塊聯發科 Linkit 7688 DUO 開發板(99元)。 這是一塊物聯網開發板,基於聯發科 Linkit 7688晶片、同時相容Arduino. 內建OpenWrt系統、支援Wifi聯網,用於開發智慧路由器、智慧物體等。

上手過程,記錄一下

開發板做得很精緻:


1, 首先去官網, 學一下入門教程:

      7688官網入口如下:

       進入“入門”, 教程寫得很詳細: 準備硬體及軟體、開發板上電、登入WebUI設密碼、設定Wifi, 連入網際網路, 電腦SSH登入。。。

       官網寫得很好,過程也不難,這裡不重複了

       做完這些步,應該能夠讓 LinkIt 7688開發板連線入WIFI,電腦連入同一個WIFI,  用SSH能登入 7688開發板的OpenWrt系統。

        然後,才可以做下面這些步。

2,下載 Linkit 7688的規格書 (Datasheet), 瞭解一下開發板效能

    https://labs.mediatek.com/fileMedia/download/9ef51e98-49b1-489a-b27e-391bac9f7bf3

    7688晶片為MIPS 580MHz, 64M RAM。 開發板上另提供128M 儲存

    晶片支援WIFI 802.11N,   USB2.0,  及其它常用介面( 多個GPIO,UART, JTAG等)

3,安裝C語言交叉編譯器,在OpenWrt下開發程式

      對OpenWrt的系統級開發還是要用C,因此要安裝 C語言交叉編譯器

      交叉編譯器,是一種特殊的gcc編譯器,就是在PC上編譯出MIPS的Linux程式

      編譯器包括 多個工具軟體(gcc,gdb,make等),  故稱為工具鏈

       安裝C語言工具鏈Toolchain:

      在7688官網入口中找到進入 "軟體和工具",找到 "OpenWrt SDK" ,點選下載 Toolchain.  (注意:不是下載SDK,而是Toolchain)

       交叉編譯工具鏈目前只支援linux 和 Mac OS,  我的機器是Mac, 所以下載的是 Toolchain (OSX)

      下載得到檔案: MediaTek_LinkIt_Smart_7688_Openwrt_toolchain_OSX.bz2  約35M

      解壓縮出一個目錄 : OpenWrt-Toolchain-ramips-mt7688_gcc-4.8-linaro_uClibc-0.9.33.2.Darwin-x86_64

      其中有一個子目錄: toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2  所有交叉編譯的C語言工具( gcc , gdb )就在這個目錄中了

      為了方便使用,將這個目錄改個名字為 CC_TOOLS, 複製到 Desktop中。

      則此時在Mac中, 工具鏈所在目錄的位置是:   ~/Desktop/CC_TOOLS  

      開啟Mac的終端視窗, (LaunchPad --> 其他 --> 終端)

      輸命令,進入工具鏈所在目錄

      cd  Desktop/CC_TOOLS/bin

      試了一下,好象交叉編譯器中沒有gcc, 要用g++。 用C++編譯器編譯C語言沒有問題的。 

      執行一下 g++, 檢視版本

       ./mipsel-openwrt-linux-g++ --version

       第一次執行,出錯了,顯示 "readlink: illegal option -- f ... ... "

       查了一下, mipsel-openwrt-linux-g++ 呼叫了 mipsel-openwrt-linux-uclibc-wrapper.sh 這個指令碼檔案

       用文字編譯器(我用的是UltraEdit for Mac)  開啟mipsel-openwrt-linux-uclibc-wrapper.sh  

       找到  REALNAME=`readlink -f $0` 這一行,  修改為    REALNAME=`readlink  $0`    (即去掉 -f ), 存檔。

       重新執行一下 g++, 檢視版本

       ./mipsel-openwrt-linux-g++ --version

      則此時正常顯示版本號了,表示交叉編譯器gcc安裝基本正確了

       寫一個 Hello, world 程式

        #include <stdio.h>

         int main() {

             printf("hello,world\n");

        }

        存檔為 hello.c ,   最好存檔在工具鏈 的 bin了目錄下  (因為沒有設定PATH,放在其它目錄下容易出錯)

        編譯一下

        ./mipsel-openwrt-linux-g++   hello.c -o hello

        編譯過程顯示了幾個Warning

              mipsel-openwrt-linux-uclibc-g++.bin: warning: environment variable 'STAGING_DIR' not defined

        不用管它, 編譯正常生成了  hello 程式檔案

        將Linkit 7688與Mac連入同一個WIFI

         用scp命令將 hello程式檔案上傳到 Linkit 7688 板上的 /root 目錄中 

          scp hello  [email protected]:/root       (其中:192.168.31.140 是 Linkit 7688連入WIFI網路後獲得的IP地址,你自己的具體地址不同,要改一下)

          用SSH登入進入 LinkIt 7688,  執行一下   ./hello

          則成功顯示:hello,world

          表明C語言編譯OK了。

4, 設定PATH路徑

       在Mac中,開啟終端視窗,輸入命令,用vi編輯  ~/.profile 檔案

       vi ~/.profile

       在檔案末尾加入一句話 (設定CC_TOOLS/bin目錄到PATH中)

       export PATH=$PATH:~/Desktop/CC_TOOLS/bin

       存檔,退出

       關閉終端視窗, 再重新開啟終端視窗

       輸入命令    echo $PATH   檢視一下PATH路徑已包含 CC_TOOLS/bin

       設好了,則可以在任何目錄下呼叫編譯器了, 如上例

        mipsel-openwrt-linux-uclibc-g++   -o hello hello.c

5, 安裝7688 SDK開發包

     在7688官網入口中找到進入 "軟體和工具",找到 "OpenWrt SDK" ,點選下載 SDK。 (我下的是SDK (OSX) )

     下載得到檔案:MediaTek_LinkIt_Smart_7688_Openwrt_sdk_OSX.bz2

      解壓縮出一個目錄 : OpenWrt-SDK-ramips-mt7688_gcc-4.8-linaro_uClibc-0.9.33.2.Darwin-x86_64

       為了方便使用,將這個目錄改個名字為 7688SDK, 複製到 Desktop中。    

     則此時在Mac中, SDK所在目錄的位置是:   ~/Desktop/7688SDK

      設定STAGING_DIR環境變數

       在Mac中,開啟終端視窗,輸入命令,用vi編輯  ~/.profile 檔案

       vi ~/.profile

       在檔案末尾加入一句話

       export STAGING_DIR=~/Desktop/7688SDK/staging_dir

       存檔,退出

       關閉終端視窗, 再重新開啟終端視窗

       輸入命令    echo $STAGING_DIR 檢視一下STAGING_DIR環境變數是否已設定好

       設好了,再次編譯hello.c, 將沒有warning

C/C++語言交叉編譯開發環境設好了。



相關推薦

Linkit 7688 上手Mac搭建OpenWrt交叉編譯環境C語言編譯Hello,World

Linkit 系列博文: 淘了一塊聯發科 Linkit 7688 DUO 開發板(99元)。 這是一塊物聯網開發板,基於聯發科 Linkit 7688晶片、同時相容Arduino. 內建OpenWrt系統、支援Wifi聯網,用於開發智慧路由器、智慧物體等。

Linkit 7688 GPIO基本操作與C語言程式設計

Linkit 系列博文: GPIO ( General Purpose Input Output ) 全名為通用輸入輸出,是CPU的一種管腳,即可以做輸入、也可以做輸出, 常用於將開關、按鍵、LED、感測器等接到CPU。 Linkit 7688 有40多

java線程與並編程實踐

tee start new read 它的 static ctrl+ als 函數 一、給出線程的定義 線程就是一條在程序代碼中獨立執行的路徑二、給出runnable的定義 一個runnable就是一段封裝在對象中的代碼序列,它的類實現了runnable接口三、

Eclipse + Apache Axis2 布RESTful WebService基礎知識

開發 pac clas html url lips 體系結構 OS class 1、什麽是WebService 學習 WebService 第一步:體系結構、三元素SOAP/WSDL/UDDI 2、什麽是Axis2 Axis2是Apache一套嶄新的WebService引擎

Java並AQS原理分析

jpg 子類 ole success ces || pro 同步 無法 我們說的AQS就是AbstractQueuedSynchronizer,他在java.util.concurrent.locks包下,這個類是Java並發的一個核心類。第一次知道有這個類是在看可重入鎖R

linux學習之多高並服務器篇

多線程 同步 https 進程調度 creat server side lis logs 高並發服務器 高並發服務器 並發服務器開發 1.多進程並發服務器   使用多進程並發服務器時要考慮以下幾點: 父最大文件描述個數(父進程中需要close關閉accept返回的新文件

隱馬爾夫模型

基本概念 要理解隱馬爾科夫模型,首先要回答三個問題 1)什麼是馬爾科夫性? 2)什麼是馬爾科夫鏈? 3)什麼是馬爾科夫過程? 馬爾科夫性: 要介紹馬爾科夫性,還要先了解下隨機過程的概念。百度百科給出的隨機過程的定義: 隨機過程是依賴於引數的一族隨機變數的全體,引數通常是時間。 一

c++並編程基礎:並、並行域多線程

競爭 安全 開發 引用 詳解 輕量 事情 地址空間 var 正文 C++11標準在標準庫中為多線程提供了組件,這意味著使用C++編寫與平臺無關的多線程程序成為可能,而C++程序的可移植性也得到了有力的保證。另外,並發編程可提高應用的性能,這對對性能錙銖必較的C++程序員來

C++並多線程

線程 棧空間 調度 系統 運行 tac 切換 有時 非阻塞 並發:兩個或者更多的任務同時發生,一個程序同時執行多個獨立的任務。 以往計算機 單核CPU 某一個時刻只能執行一個任務 由操作系統調度 每秒鐘進行多次所謂的任務切換並發的假象(不是真正的並發),這種切換(上下文切

【轉】Nodejs學習筆記--- 簡介安裝Node.js開發環境

ack 目錄 javascrip 難度 時間 網站開發 clas jetbrains 常用 目錄 學習資料 簡介 安裝Node.js npm簡介 開發工具 Sublime Node.js開發環境配置 擴展:安裝多版本管理器 學習資料   1.深入淺出Node.j

Unity3D學習:簡單梳理Unity跨平臺的機制原理

12px get 一個 bsp 嵌入 ram 屬於 開源 runtime 前言 首先需要了解的是,Unity3D的C#基礎腳本模塊是通過Mono來實現的。 什麽是Mono? 參考下百度百科:Mono是一個由Novell公司(由Xamarin發起)主持的項目,並由Migu

MyBatis學習簡介入門案例

結果集 提交 ace 支持 nag 實例 exce 空間 cti 1.什麽是MyBatis?   MyBatis是一個支持普通SQL查詢,存儲過程,和高級映射的優秀持久層框架。MyBatis去掉了幾乎所有的JDBC代碼和參數的手工設置以及對結果集的檢索封裝。MyBatis可

php手動搭建wamp環境--之 Windows系統PHP環境搭建

1、PHP環境搭建的前提是 Apache HTTP Server (Apache 伺服器)已經安裝部署成功,並可以正常訪問到伺服器的主頁面。Apache HTTP Server 的安裝部署已經在上一篇講解的很詳細了,不清楚的可以點選“ Apache HTTP Servcer-Apache伺服器下載與

MongoDB:Python-windowsmongodb安裝與使用整理

序言: 本部落格通過六大方面介紹如下內容: 前言介紹:介紹了包含MongoDB、NoSQL、關係型資料庫和非關係型資料的優缺點等內容。 Windows 平臺安裝MongoDB:介紹瞭如何在Windows下安裝MongoDB,學習python時可能會遇到安裝MongoDB,對於習慣

HIVE簡明教程學習筆記——資料庫表的操作HIVE DDL

1.建立資料庫 create database if not exists aa_db; 2.檢視資料庫定義 describe database aa_db; 3.檢視資料庫列表 show databases; 4.刪除資料庫 drop database if exists testdb casca

c/c++區別函式的預設值 函式過載 行內函數 c/c++介面呼叫 const在c/c++的區別

c/c++ 的區別 一.函式的預設值 在C語言裡函式的引數是不能夠帶預設值的。比如int func(int a, int b = 1);這樣的宣告就是不正確的。但是在C++中上述的宣告是被允許的   函式的預設引數值,即在定義引數的時候同時給它一個初始值。在呼叫函式的時候,

Image Caption 論文理解

準備開始讀一下Image Caption,先記錄一下對論文的理解,一些公式沒有記錄下來,在論文中可查。 目錄 1.Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Transla

vue入門安裝建立第一個專案

前端近幾年來飛速發展,各種技術框架層出不窮,架構模式也從主流MVC慢慢轉向MVVM。使用AngularJS、React和Vue.js等框架進行前端開發已經成為趨勢。因此我也開始了vue.js的修煉之路(之所以選擇vue.js是因其入門門檻低)。 一、安裝 為了讓我們建立Vue專案更加容易,我

KVM簡介安裝

  1. KVM 介紹 1.0 虛擬化簡史 其中,KVM 全稱是 基於核心的虛擬機器(Kernel-based Virtual Machine),它是一個 Linux 的一個核心模組,該核心模組使得 Linux 變成了一個 Hypervisor: 它由 Quramnet

基於以太坊的DPOS實現原始碼測試執行

原始碼 目錄 測試執行 安裝環境 開始之前請先確認已經安裝配置好Go語言環境,安裝包可以從https://golang.org下載,如果連不Go的官網請自行百度下安裝包。gttc現在支援Go版本為 1.9.x、1.10.x 及1.11.x。 $ go ver