0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Openwrt開發(fā)指南 第26章 編寫應(yīng)用程序交叉編譯

嵌入式大雜燴 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2023-07-15 16:06 ? 次閱讀

1 交叉編譯環(huán)境簡介

首先說一下什么是交叉編譯:我們在 ubuntu 中寫了一個程序,比如 main.c,然后使用 ubuntu 的編譯器進(jìn)行編譯,生成的可執(zhí)行文件自然可以在 ubuntu 中運(yùn)行。但是生成的可執(zhí)行文件可以在我們的開發(fā)板中能運(yùn)行嗎?答案當(dāng)然是否定的,原因很簡單,就是平臺不同,芯片架構(gòu)不同。那我們?nèi)绾问沟?ubuntu 編譯出來的可執(zhí)行文件在開發(fā)板上面運(yùn)行呢,當(dāng)然就要借助一些工具了,通過一些工具進(jìn)行對程序編譯,生成在開發(fā)板上可以運(yùn)行的文件,那這些工具我們把它叫做交叉編譯工具,把這種從一個平臺開發(fā)另一個平臺應(yīng)用的方式稱為交叉編譯。

Toolchain 即交叉編譯工具,要在 ubuntu 編譯我們寫的應(yīng)用程序使得生成開發(fā)板可以執(zhí)行的文件,必須有這一套工具才可以進(jìn)行!

2 交叉工具的配置

首先,我們查看是否已經(jīng)有交叉編譯工具:

1.png

顯然沒有Toolchain!

注意:在本節(jié)教程的附件里編者已經(jīng)給出了交叉編譯工具。

好的,配置OpenWrt 使得支持toolchain。在openwrt/目錄下運(yùn)行 make menuconfig,并且選中 toolchain:

2.png

保存之后,編譯 OpenWrt:

$make V=99

編譯完成之后,我們可以查看是否有交叉編譯工具包的存在。

3.png

OK,解壓交叉編譯工具包:解壓完成后,然后我們cd 到解壓完成后的工具包中,再進(jìn)入該工具包中的另一個目錄,找到 bin 文件夾,同樣cd 進(jìn)去 bin 文件夾。

好了,現(xiàn)在我們就擁有交叉編譯工具了,我們要把交叉編譯工具的路徑保存在一個環(huán)境變量中,這樣做是為了,我們編譯程序時會根據(jù)這個環(huán)境變量找到交叉編譯工具的位置。以 root 的權(quán)限編輯如下文件:

#vi /etc/environment

注意:也可用sudo vi /etc/environment。

編輯前該文件的內(nèi)容如下(我的ubuntu):

4.png

好的,增加我們交叉編譯工具路徑后(注意以冒號分隔)。為了讓這個環(huán)境變量起作用,我們重啟 ubuntu!

【注意】還可如下配置。

  1. 拷貝OpenWrt-Toolchain-ramips-rt305x_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686.tar.bz2到虛擬機(jī)中的/opt/目錄下
  2. 解壓OpenWrt-Toolchain-ramips-rt305x_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686.tar.bz2, 用命令

sudo tar -xvf OpenWrt-Toolchain-ramips-rt305x_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686.tar.bz2 //必須用超級用戶模式

  1. 編輯~/.bashrc文件, vi ~/.bashrc

在文件最后增加一行

export PATH=$PATH: /opt/OpenWrt-Toolchain-ramips-rt305x_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin

保存退出

  1. 運(yùn)行 source ~/.bashrc 讓文件生效
  2. 測試

方法一:

在命令行下輸入 mipsel-o 然后按tab鍵看會不會自動補(bǔ)全

方法二:

輸入:mipsel-openwrt-linux- -v

5.png

3 測試交叉編譯環(huán)境

重啟完成后,我們編寫一個非常簡單的應(yīng)用程序:

#include < stdio.h >
int main ()
{
    printf(“hello world!n”);
    return 0;
}

然后使用交叉編譯工具進(jìn)行編譯!

6.png

編譯完成后生成可執(zhí)行文件:

7.png

然后我們嘗試在ubuntu中運(yùn)行可執(zhí)行文件 main:

8.png

很顯然,這個可執(zhí)行文件無法在 ubuntu 上運(yùn)行,但是,卻可以在我們開發(fā)板中運(yùn)行,我們把可執(zhí)行文件移動到開發(fā)板中進(jìn)行執(zhí)行:

9.png

注意:main的權(quán)限應(yīng)為777,否則無法運(yùn)行。

10.png

【注意】交叉編譯工具鏈編譯的時報(bào)沒有STAGING_DIR,它在ubuntu上的/home/farsight/chaos_calmer/staging_dir,在ubuntu上鍵入下面命令

export STAGING_DIR=/home/farsight/chaos_calmer/staging_dir

或者放入.bashrc中,

$vi ~/.bashrc

在最后一行添加export STAGING_DIR=/home/farsight/chaos_calmer/staging_dir即可

$ source ~/.bashrc

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Ubuntu
    +關(guān)注

    關(guān)注

    5

    文章

    554

    瀏覽量

    29429
  • 交叉編譯
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    12608
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3221

    瀏覽量

    57499
  • OpenWrt
    +關(guān)注

    關(guān)注

    10

    文章

    123

    瀏覽量

    39227
收藏 人收藏

    評論

    相關(guān)推薦

    Openwrt開發(fā)指南 25 配置OpenWrt支持網(wǎng)絡(luò)攝像頭

    Openwrt開發(fā)指南 25 配置OpenWrt支持網(wǎng)絡(luò)攝像頭
    的頭像 發(fā)表于 07-13 08:56 ?2202次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>25<b class='flag-5'>章</b> 配置<b class='flag-5'>OpenWrt</b>支持網(wǎng)絡(luò)攝像頭

    Openwrt開發(fā)指南 2 OpenWrt開發(fā)環(huán)境搭建

    燒寫到設(shè)備中;另外,嵌入式設(shè)備的資源并不足以用來開發(fā)軟件。所以需要用到交叉開發(fā)模式:在主機(jī)上編輯、編譯軟件,然后在目標(biāo)板上運(yùn)行、驗(yàn)證程序。對
    的頭像 發(fā)表于 06-27 09:09 ?6555次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>2<b class='flag-5'>章</b> <b class='flag-5'>OpenWrt</b><b class='flag-5'>開發(fā)</b>環(huán)境搭建

    Openwrt開發(fā)指南 3 OpenWrt下載及配置

    編譯OpenWrt首先需要下載源碼,OpenWrt的源碼是通過git下載,OpenWrt目前已經(jīng)很好的支持了MT7620、MT7821等芯片,因此O
    的頭像 發(fā)表于 06-27 09:10 ?5136次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>3<b class='flag-5'>章</b> <b class='flag-5'>OpenWrt</b>下載及配置

    Openwrt開發(fā)指南 4 燒寫OpenWrt固件

    對于一個完整的嵌入式系統(tǒng),它由U-boot、內(nèi)核(Linux)、文件系統(tǒng)、應(yīng)用程序四部分組成。那么這四部分之間的關(guān)系是怎么樣的呢?OpenWrt是屬于哪部分呢?
    的頭像 發(fā)表于 06-27 09:11 ?4488次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>4<b class='flag-5'>章</b> 燒寫<b class='flag-5'>OpenWrt</b>固件

    Openwrt開發(fā)指南 12 添加OpenWrt軟件包

    OpenWrt是一個比較完善的嵌入式Linux開發(fā)平臺,在無線路由器應(yīng)用上已有4000多個軟件包。我們可以在其基礎(chǔ)上增加軟件包,以擴(kuò)大其應(yīng)用范圍。在OpenWrt中增加軟件包極其方便,按照
    的頭像 發(fā)表于 06-29 09:09 ?8415次閱讀

    Openwrt開發(fā)指南 13 OpenWrt啟動流程

    任何系統(tǒng)的啟動都是開發(fā)人員首要關(guān)注的問題,因?yàn)橹挥辛私饬讼到y(tǒng)的啟動流程和啟動機(jī)制,才能真正掌握一個系統(tǒng),如果對啟動的啟動不熟悉的話,是不可能真正用好一個系統(tǒng),openwrt系統(tǒng)也不例外,他的啟動和一般的嵌入式系統(tǒng)啟動還有所區(qū)別,現(xiàn)在咱們就分析一下
    的頭像 發(fā)表于 06-29 09:09 ?3277次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>13<b class='flag-5'>章</b> <b class='flag-5'>OpenWrt</b>啟動流程

    Openwrt開發(fā)指南 18 驅(qū)動開發(fā)之字符設(shè)備應(yīng)用程序

    在前面的章節(jié)中, 我們成功的寫出了我們自己的驅(qū)動程序, 并且向應(yīng)用程序提供了 open、read、write 三個接口,那么接下來我們就來編寫應(yīng)用程序,調(diào)用這些接口。
    的頭像 發(fā)表于 07-02 09:21 ?2431次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>18<b class='flag-5'>章</b> 驅(qū)動<b class='flag-5'>開發(fā)</b>之字符設(shè)備<b class='flag-5'>應(yīng)用程序</b>

    Openwrt開發(fā)指南 20 驅(qū)動開發(fā)之LED應(yīng)用程序

    在前面的章節(jié)中, 我們成功的寫出了我們自己的驅(qū)動程序, 并且向應(yīng)用程序提供了 open、ioctl 兩個接口,那么接下來我們就來編寫應(yīng)用程序,調(diào)用這些接口。
    的頭像 發(fā)表于 07-03 09:02 ?2524次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>20<b class='flag-5'>章</b> 驅(qū)動<b class='flag-5'>開發(fā)</b>之LED<b class='flag-5'>應(yīng)用程序</b>

    Openwrt開發(fā)指南 22 Openwrt串口的使用2

    在上一中,我們成功的讓驅(qū)動程序支持了串口 2,并且做了簡單的測試。接下來,我們就為串口 2 添加一個應(yīng)用程序,從而實(shí)現(xiàn) Wi-Fi 串口。實(shí)現(xiàn)過程非常簡單,首先進(jìn)入 OpenWrt
    的頭像 發(fā)表于 07-05 09:09 ?3815次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>22<b class='flag-5'>章</b> <b class='flag-5'>Openwrt</b>串口的使用2

    Openwrt開發(fā)指南 24 配置開發(fā)板支持U盤

    Openwrt開發(fā)指南 24 配置開發(fā)板支持U盤
    的頭像 發(fā)表于 07-13 08:55 ?2647次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>24<b class='flag-5'>章</b> 配置<b class='flag-5'>開發(fā)</b>板支持U盤

    Mali GPU OpenGL ES應(yīng)用程序開發(fā)指南

    這是適用于馬里GPU的OpenGL ES應(yīng)用程序開發(fā)指南。 它提供了使用OpenGL ES 1.1和OpenGL ES 2.0 API為馬里GPU開發(fā)應(yīng)用程序
    發(fā)表于 08-30 07:57

    MATLAB Runtime Server 應(yīng)用程序開發(fā)指南

    MATLAB Runtime Server 應(yīng)用程序開發(fā)指南:The MATLAB Runtime Server is a variant of MATLAB®
    發(fā)表于 02-21 08:40 ?40次下載

    openwrt開發(fā)教程1~6

    openwrt開發(fā)教程1~6
    發(fā)表于 03-17 14:23 ?53次下載

    ST微電子STM8的C交叉編譯用戶指南

    《STM8交叉編譯器用戶指南》是程序員為STM8微控制器環(huán)境編寫C程序的參考
    發(fā)表于 06-04 08:00 ?12次下載
    ST微電子STM8的C<b class='flag-5'>交叉</b><b class='flag-5'>編譯</b>用戶<b class='flag-5'>指南</b>

    4程序編寫和調(diào)試環(huán)境簡介PPT下載

    4程序編寫和調(diào)試環(huán)境簡介PPT下載
    發(fā)表于 10-08 14:49 ?13次下載