RM新时代网站-首页

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

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

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

Linux編譯驅(qū)動、內(nèi)核及應(yīng)用程序分析

UtFs_Zlgmcu7890 ? 來源:cc ? 作者:佚名 ? 2019-01-17 13:46 ? 次閱讀

作為一名嵌入式Linux新手,在學(xué)習(xí)的過程中會遇到很多問題。寫了一個驅(qū)動程序怎么編譯?怎么加載進(jìn)內(nèi)核?本文將介紹嵌入式Linux開發(fā)的一些入門基本操作,手把手讓你掌握編譯驅(qū)動、內(nèi)核及應(yīng)用程序。

小王是一名剛接觸Linux的新手,看了一些關(guān)于Linux驅(qū)動的書籍之后,買了一塊Cortex-A9的ARM開發(fā)板,準(zhǔn)備大干一場。編寫了第一個屬于自己的驅(qū)動程序并命名為hellodrv.c,程序源碼如下所示。

這個驅(qū)動程序怎么編譯成可以在板子上跑的程序呢,小王經(jīng)過一番網(wǎng)上查詢,原來需要交叉編譯工具鏈,小王找到了光盤資料里的交叉編譯工具并按說明正確安裝了交叉編譯工具。

一、安裝交叉編譯工具

1編寫Makefile

小王編寫好的驅(qū)動程序為hellodrv.c,要把該驅(qū)動程序編譯為模塊,在同一目錄下新建了一個Makefile文件。編寫的Makefile如下。

2驅(qū)動編譯

小王經(jīng)過查詢,編譯驅(qū)動主要有兩種方式,一種是修改內(nèi)核源碼頂層目錄下的Makefile文件,另外也可以在編譯命令指定架構(gòu)及交叉編譯工具。

1、修改Makefile

例如:Linux內(nèi)核源碼的目錄為/home/vmuser/kernel-imx,打開該目錄下的Makefile文件,找到ARCH及CROSS_COMPILE相關(guān)語句,修改為如下所示語句。

如果交叉編譯工具鏈未設(shè)置環(huán)境變量則CROSS_COMPILE設(shè)置為交叉編譯工具鏈的絕對路徑,設(shè)置如下。

修改完之后,直接執(zhí)行make命令,生成了hellodrv.ko文件。

2、在編譯命令指定

執(zhí)行如下命令進(jìn)行編譯。

這種方式也可以生成hellodrv.ko,可是驅(qū)動要依賴于內(nèi)核才能跑起來,小王于是開始了Linux內(nèi)核的配置及編譯。

二、Linux內(nèi)核配置及編譯

編譯內(nèi)核時指定架構(gòu)和交叉編譯工具的方式同編譯模塊一樣,經(jīng)過上面的操作,小王已經(jīng)輕車熟路了。小王還學(xué)會了首先導(dǎo)環(huán)境變量然后進(jìn)行編譯的方法。

在首次進(jìn)行配置編譯之前,需要清除之前編譯生成的文件,可用如下命令進(jìn)行清除。

接下來進(jìn)行內(nèi)核的配置,內(nèi)核的配置可以使用如下命令中的一個。

這四種方式中,值得推薦的是make menuconfig,它不依賴于QT或GTK+,且非常直觀。使用make menuconfig命令后,會進(jìn)入如圖1所示的界面,在該界面根據(jù)需求對需要編譯進(jìn)內(nèi)核的選項進(jìn)行裁剪。對于bool型選項,按Y或者N決定是否選擇編譯進(jìn)內(nèi)核。[*]表示選中,[]表示未選中。對于tristate型選項,根據(jù)需求可以有Y、M、N三種選擇,<*>表示靜態(tài)編譯,表示編譯為模塊,<>表示不編譯進(jìn)內(nèi)核。

圖1 內(nèi)核配置界面

配置完成后,選擇保存,然后退出。配置后會生成.config文件,該文件保存了配置信息,供Makefile在編譯內(nèi)核時使用。

在配置界面我們根據(jù)需求把需要的功能以及相應(yīng)設(shè)備驅(qū)動的支持等配置好,然后進(jìn)行內(nèi)核及設(shè)備樹的編譯。內(nèi)核及設(shè)備樹編譯用以下命令。

為了加快編譯速度可以在編譯命令后加“-j”選項,例如PC的CPU為4核,則編譯命令如下。

如果要把某些驅(qū)動編譯為模塊,則使用如下命令。

針對相應(yīng)的開發(fā)板,廠家一般都會有默認(rèn)的配置,這些配置文件位于內(nèi)核源碼arch/arm/configs目錄下。例如:使用如下的默認(rèn)配置。

如果已有.config文件,可以使用如下命令載入既有的.config配置文件。

內(nèi)核及設(shè)備樹編譯完成后將會生成zImage和相應(yīng)的dtb文件,按照廠家提供的燒寫方式將鏡像燒寫到目標(biāo)板。

三、應(yīng)用程序編譯及文件傳輸

1應(yīng)用程序編譯

例如需要編譯的應(yīng)用程序文件為test.c,需要把該程序編譯放到arm開發(fā)板上運行。編譯命令如下。

這是一個非常簡單的程序,并且只有一個文件,所以可以采用直接輸入命令進(jìn)行交叉編譯。如果工程較大,這種方式就不可取了,通常需要編寫Makefile文件,通過make程序來進(jìn)行工程管理。應(yīng)用程序的Makefile范例如下。

編寫完Makefile后執(zhí)行make命令即可生成目標(biāo)文件test。

2文件傳輸

編譯生成的可執(zhí)行文件可以通過TFTP,NFS等方式下載到開發(fā)板,關(guān)于TFTP,NFS服務(wù)器在PC上的搭建可參考網(wǎng)絡(luò)上相關(guān)文章,這里不贅述。

1、NFS文件傳輸

將目標(biāo)板接入局域網(wǎng)或通過交叉網(wǎng)線與PC主機(jī)相連,設(shè)定目標(biāo)板的IP,使之與主機(jī)在同一網(wǎng)段,然后進(jìn)行遠(yuǎn)程mount操作。將需要傳輸?shù)奈募旁赑C機(jī)搭建的NFS服務(wù)器目錄下。在開發(fā)板上執(zhí)行如下操作。

在進(jìn)行遠(yuǎn)程掛載之前,最好先用ping命令檢查網(wǎng)絡(luò)通信是否正常,只有在能ping通的情況下,才能進(jìn)行正常掛載,否則請檢查網(wǎng)絡(luò)。如果在已經(jīng)ping通的情況下,遠(yuǎn)程掛載出現(xiàn)錯誤,請檢查主機(jī)和目標(biāo)機(jī)的其它設(shè)置。

2、TFTP文件傳輸

把需要傳輸?shù)奈募旁赑C機(jī)的tftp服務(wù)器目錄下。TFTP下載命令格式如下。

例如:下載IP為192.168.1.168的tftp服務(wù)器的hellodrv.ko文件,在開發(fā)板的當(dāng)前目錄下執(zhí)行如下命令。

通過以上任一方式將在PC機(jī)上編譯完成的驅(qū)動模塊hellodrv.ko和test應(yīng)用程序拷貝到目標(biāo)板上。

四、驅(qū)動模塊的加載及移除

執(zhí)行如下命令把驅(qū)動模塊動態(tài)加載進(jìn)內(nèi)核。

查看加載的模塊使用如下命令。

如需要移除模塊使用如下命令。

IoT9000A-LI是廣州致遠(yuǎn)電子有限公司開發(fā)的基于M6708-T系列核心板的ARM工控主板,核心板標(biāo)配處理器為i.MX 6U,Cortex?-A9簡單雙核。板上集成了大量的外設(shè)接口,包括千兆以太網(wǎng)、音頻、USB、HDMI、LVDS、LCD、miniPCIE、攝像頭、CAN信號、UART信號等接口,同時整合的多功能HD視頻引擎可提供1080P 60fps視頻解碼、1080P 30fps視頻編碼,并帶有2D、3D圖形引擎,可滿足消費電子工業(yè)和汽車車載娛樂系統(tǒng)等新一代應(yīng)用,以及醫(yī)療應(yīng)用的豐富圖形和高響應(yīng)需求。

圖2 IoT9000A_LI產(chǎn)品

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

    關(guān)注

    87

    文章

    11292

    瀏覽量

    209323
  • 驅(qū)動程序
    +關(guān)注

    關(guān)注

    19

    文章

    831

    瀏覽量

    48022

原文標(biāo)題:【純干貨】五分鐘帶你掌握Linux編譯驅(qū)動、內(nèi)核及應(yīng)用程序

文章出處:【微信號:Zlgmcu7890,微信公眾號:周立功單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Linux內(nèi)核編譯主要過程

    Linux內(nèi)核編譯主要過程: 配置、編譯、安裝 。
    發(fā)表于 08-08 16:02 ?726次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>的<b class='flag-5'>編譯</b>主要過程

    如何構(gòu)建linux開發(fā)環(huán)境和編譯軟件工程、應(yīng)用程序

    前文介紹了如何使用官方提供的鏡像文件啟動開發(fā)板,本文將說明如何構(gòu)建linux開發(fā)環(huán)境和編譯軟件工程、應(yīng)用程序。
    的頭像 發(fā)表于 01-03 12:31 ?2037次閱讀
    如何構(gòu)建<b class='flag-5'>linux</b>開發(fā)環(huán)境和<b class='flag-5'>編譯</b>軟件工程、<b class='flag-5'>應(yīng)用程序</b>

    關(guān)于Linux應(yīng)用程序開發(fā)到內(nèi)核開發(fā)的指南!

    起來很快,估計2周就能上手。3. 進(jìn)入 Linux 內(nèi)核開發(fā)。內(nèi)核開發(fā)的學(xué)習(xí)難度要比 Linux 應(yīng)用程序開發(fā)大 3倍左右?;旧?,有一年的
    發(fā)表于 09-24 11:12

    Linux內(nèi)核編譯詳談

    Linux內(nèi)核編譯詳談
    發(fā)表于 10-30 09:51 ?7次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>編譯</b>詳談

    基于Arm的Linux內(nèi)核編譯指導(dǎo)

    基于Arm的Linux內(nèi)核編譯指導(dǎo)
    發(fā)表于 10-30 10:13 ?15次下載
    基于Arm的<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>編譯</b>指導(dǎo)

    嵌入式Linux內(nèi)核驅(qū)動程序開發(fā)是怎樣的

    設(shè)備驅(qū)動程序linux內(nèi)核的一部分,是操作系統(tǒng)內(nèi)核和機(jī)器硬件之間的接口,它由一組函數(shù)和一些私有數(shù)據(jù)組成,是連接應(yīng)用程序與具體硬件的橋梁。
    發(fā)表于 11-06 11:33 ?1503次閱讀
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>的<b class='flag-5'>驅(qū)動程序</b>開發(fā)是怎樣的

    Linux內(nèi)核配置編譯分析的設(shè)計方案

    Linux內(nèi)核配置編譯分析的設(shè)計方案
    發(fā)表于 07-08 16:53 ?18次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>配置<b class='flag-5'>編譯</b><b class='flag-5'>分析</b>的設(shè)計方案

    如何才能編譯Linux內(nèi)核

    內(nèi)核,是一個操作系統(tǒng)的核心。它負(fù)責(zé)管理系統(tǒng)的進(jìn)程、內(nèi)存、設(shè)備驅(qū)動程序、文件和網(wǎng)絡(luò)系統(tǒng),決定著系統(tǒng)的性能和穩(wěn)定性。Linux 作為一個自由軟件,在廣大愛好者的支持下,內(nèi)核版本不斷更新。新
    發(fā)表于 11-04 18:04 ?8次下載

    Linux內(nèi)核編譯與運行

    本文檔的主要內(nèi)容詳細(xì)介紹的是Linux內(nèi)核編譯與運行免費下載。
    發(fā)表于 03-25 13:48 ?11次下載

    嵌入式linux編譯 ko,嵌入式linux:編譯linux驅(qū)動模塊

    是如何別被構(gòu)造的。模塊的構(gòu)造過程與用戶空間的應(yīng)用程序的構(gòu)造過程有顯著不同;內(nèi)核是一個大的、獨立的程序,對于它的各個部分如何組合在一起有詳細(xì)的明確的要求。Linux2.6
    發(fā)表于 11-01 16:31 ?9次下載
    嵌入式<b class='flag-5'>linux</b><b class='flag-5'>編譯</b> ko,嵌入式<b class='flag-5'>linux</b>:<b class='flag-5'>編譯</b><b class='flag-5'>linux</b><b class='flag-5'>驅(qū)動</b>模塊

    嵌入式Linux內(nèi)核編譯

    實驗環(huán)境VMware Workstation PlayerUbuntu16.04kernel-3.2.tar.bz2Linux內(nèi)核編譯在ubuntu上編譯嵌入式
    發(fā)表于 11-01 17:07 ?16次下載
    嵌入式<b class='flag-5'>Linux</b>的<b class='flag-5'>內(nèi)核</b><b class='flag-5'>編譯</b>

    Linux內(nèi)核編譯和運行

    想讓Linux內(nèi)核代碼跑起來,得先搭建編譯和運行代碼的環(huán)境。
    發(fā)表于 06-23 11:56 ?1477次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>的<b class='flag-5'>編譯</b>和運行

    linux驅(qū)動程序編譯方法有哪兩種

    Linux驅(qū)動程序編譯方法主要可以歸納為兩種: 手動編譯 和 使用內(nèi)核構(gòu)建系統(tǒng)(Makefile)自動
    的頭像 發(fā)表于 08-30 14:39 ?640次閱讀

    linux驅(qū)動程序編譯方法是什么

    Linux驅(qū)動程序編譯方法主要包括兩種: 與內(nèi)核一起編譯編譯成獨立的
    的頭像 發(fā)表于 08-30 14:46 ?536次閱讀

    linux驅(qū)動程序如何加載進(jìn)內(nèi)核

    Linux系統(tǒng)中,驅(qū)動程序內(nèi)核與硬件設(shè)備之間的橋梁。它們允許內(nèi)核與硬件設(shè)備進(jìn)行通信,從而實現(xiàn)對硬件設(shè)備的控制和管理。 驅(qū)動程序的編寫
    的頭像 發(fā)表于 08-30 15:02 ?439次閱讀
    RM新时代网站-首页