【linux】驅(qū)動(dòng)-1-環(huán)境準(zhǔn)備

1.1.2.2 編譯內(nèi)核

編譯內(nèi)核的步驟過程根據(jù)不同官方提供的腳步和Makefile不一樣而不同甲葬。以下為野火的i.M 6U編譯linux內(nèi)核例程牡直。

單獨(dú)新建一個(gè)工作目錄霉晕,將其內(nèi)核源碼放在該目錄下纵朋,切換到內(nèi)核源碼目錄惫皱,找到 make_deb.sh 腳本,修改里面的配置參數(shù)眷唉,如內(nèi)核編譯位置等等予颤。修改好配置參數(shù)后,只需要執(zhí)行腳本即可編譯內(nèi)核冬阳。(其它內(nèi)核可以參考該腳本蛤虐,也可以自己手寫一個(gè)編譯腳本)

deb_distro=bionic

DISTRO=stable

build_opts="-j 6"

build_opts="${build_opts} O=build_image/build"

build_opts="${build_opts} ARCH=arm"

build_opts="${build_opts} KBUILD_DEBARCH=${DEBARCH}"

build_opts="${build_opts} LOCALVERSION=-imx-r1"

build_opts="${build_opts} KDEB_CHANGELOG_DIST=${deb_distro}"

build_opts="${build_opts} KDEB_PKGVERSION=1${DISTRO}"

build_opts="${build_opts} CROSS_COMPILE=arm-linux-gnueabihf-"

build_opts="${build_opts} KDEB_SOURCENAME=linux-upstream"

make ${build_opts}? npi_v7_defconfig

make ${build_opts}

make ${build_opts}? bindeb-pkg

O=build_image/build:指定編譯好的內(nèi)核放置的位置。

ARCH=arm:目標(biāo)是 ARM 體系結(jié)構(gòu)內(nèi)核肝陪。

KBUILD_DEBARCH=${DEBARCH}:對(duì)于deb-pkg目標(biāo)驳庭,允許覆蓋deb-pkg部署的常規(guī)啟發(fā)式。

LOCALVERSION=-imx-r1:使用內(nèi)核配置選項(xiàng) "LOCALVERSION" 為常規(guī)內(nèi)核版本附加一個(gè)唯一的后綴氯窍。

KDEB_CHANGELOG_DIST=${deb_distro}:

KDEB_PKGVERSION=1${DISTRO}:版本信息饲常。

CROSS_COMPILE=arm-linux-gnueabihf-:指定交叉編譯器。

KDEB_SOURCENAME=linux-upstream:KDEB_SOURCENAME make變量?jī)H控制已打包的源tarball的名稱狼讨,并不影響bind -pkg和deb-pkg輸出的.deb包名稱贝淤。

make ${build_opts} npi_v7_defconfig:生成配置文件。

make ${build_opts} bindeb-pkg:編譯文件進(jìn)行打包政供。

1.2 內(nèi)核驅(qū)動(dòng)模塊編譯和加載

hello 例程可以去 李柱明的gitee clone: demo_code_for_mystudy/linux/driverTest/helloModule

1.2.1 hello 例程分析

這只是一個(gè)模塊例程播聪,不含驅(qū)動(dòng)部分

必須內(nèi)容可分為以下幾點(diǎn):

入口函數(shù)

出口函數(shù)

協(xié)議

hello_module.c

/** @file hello_module.c

* @brief 簡(jiǎn)要說明

* @details 詳細(xì)說明

* @author lzm

* @date 2021-02-21 18:08:07

* @version v1.0

* @copyright Copyright By lizhuming, All Rights Reserved

*

**********************************************************

* @LOG 修改日志:

**********************************************************

*/

#include <linux/module.h>

#include <linux/init.h>

#include <linux/kernel.h>

// 入口函數(shù):安裝驅(qū)動(dòng)時(shí)調(diào)用的函數(shù)

static int __init hello_init(void)

{

printk(KERN_EMERG "[ KERN_EMERG ] Hello Module Init\n");

printk( "[ default ] Hello Module Init\n");

return 0;

}

// 出口函數(shù):卸載驅(qū)動(dòng)時(shí)調(diào)用的函數(shù)

static void __exit hello_exit(void)

{

printk("[ default ] Hello Module Exit\n");

}

module_init(hello_init);

module_exit(hello_exit);

//MODULE_LICENSE("GPL2");

MODULE_AUTHOR("embedfire ");

MODULE_DESCRIPTION("hello world module");

MODULE_ALIAS("test_module");

1.2.2 和內(nèi)核源碼一起編譯

1.2.3 加載內(nèi)核驅(qū)動(dòng)模塊

編譯好得到的內(nèi)核驅(qū)動(dòng)模塊 xx.ko 可以通過多種方式拷貝到 ARM 板上,如NFS網(wǎng)絡(luò)文件系統(tǒng)布隔、SCP命令得到离陶。

掛載方法可以參考李柱明博客園NFS篇章。

1.3 設(shè)備樹編譯和加載

設(shè)備樹是在 Linux3.x 才引入的衅檀,用于描述一個(gè)硬件平臺(tái)的板級(jí)細(xì)節(jié)招刨。

本系列筆記的驅(qū)動(dòng)例程如無特殊說明,都是依賴于設(shè)備樹的哀军。

下面簡(jiǎn)略演示設(shè)備樹的編譯和加載沉眶,具體原理由具體篇章說明打却。

1.3.1 設(shè)備樹編譯

1.3.1.1 使用內(nèi)核中的dtc根據(jù)編譯

編譯后的內(nèi)核會(huì)自動(dòng)生成 dtc 工具。其路徑是:內(nèi)核/scripts/dtc/dtc沦寂。

編譯命令:內(nèi)核構(gòu)建目錄/scripts/dtc/dtc -I dts -O dtb -o xxx.dtbo xxx.dts

意為編譯 dts 為 dtb

1.3.1.2 在內(nèi)核源碼中編譯(推薦)

編譯內(nèi)核時(shí)都會(huì)自動(dòng)編譯設(shè)備樹学密,此時(shí),只需要把設(shè)備樹源文件放到規(guī)定位置即可传藏,設(shè)備樹源文件腻暮、編譯生成的設(shè)備樹文件及我們所用到的設(shè)備樹文件都會(huì)存放在 內(nèi)核源碼/arch/arm/boot/dts 里面。但是毯侦,編譯內(nèi)核耗時(shí)長(zhǎng)哭靖,所以,推薦只編譯設(shè)備樹侈离,方法如下:

兩條命令都在內(nèi)核源碼頂層路徑下執(zhí)行(其實(shí)就是利用頂層Makefile):

如果在內(nèi)核源碼中執(zhí)行了 make distclean 试幽,則必須執(zhí)行第一條命令來生成默認(rèn)的配置文件。

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- npi_v7_defconfig

make ARCH=arm -j4 CROSS_COMPILE=arm-linux-gnueabihf- dtbs

1.3.1.3 加載設(shè)備樹

替換設(shè)備樹的方法:

第一種:設(shè)備樹是編譯到內(nèi)核中的卦碾,所以铺坞,重新編譯內(nèi)核,重新制作鏡像即可洲胖。(麻煩济榨,不推薦)

第二種:將編譯好的設(shè)備樹或設(shè)備樹插件替換到開發(fā)板里面的。(推薦)

第三種:將編譯好的設(shè)備樹放到開發(fā)板中绿映,**/boot/dtbs/xxx/擒滑,修改boot啟動(dòng)參數(shù)。(推薦)

查看是否加載成功:

進(jìn)入 /proc/device-tree 目錄下查看已加載的設(shè)備節(jié)點(diǎn)叉弦,看看有沒有改動(dòng)丐一。

1.4 設(shè)備樹插件的編譯和加載

Linux4.4 以后引入了動(dòng)態(tài)設(shè)備樹,設(shè)備樹插件被動(dòng)態(tài)的加載到系統(tǒng)中淹冰,供內(nèi)核識(shí)別库车。

設(shè)備樹插件一般用于只修改添加部分硬件信息。如只添加 RGB 燈的硬件信息樱拴,就只需要編譯 RGB 燈的 .dts 文件為 .dtbo 即可凝颇。

編譯設(shè)備樹插件的時(shí)候,無需重新編譯整個(gè)設(shè)備樹插件疹鳄,只需要編譯修改的部分即可。

1.4.1 單獨(dú)使用dtc工具編譯

設(shè)備樹和設(shè)備樹插件都是使用 DTC 編譯工具編譯芦岂。

設(shè)備樹編譯后得到的是 .dtb 文件瘪弓;

而設(shè)備樹插件編譯后得到的是 .dtbo 文件。

使用野火提供的一鍵式編譯工具:

地址:git clone https://gitee.com/Embedfire/ebf-linux-dtoverlays.git

要編譯的設(shè)備樹插件源文件放在 ebf-linux-dtoverlays/overlays/ebf 目錄下禽最, 然后回到編譯工具的根目錄 ebf-linux-dtoverlays/ 執(zhí)行“make”即可腺怯。

生成的.dtbo位于 ~/ebf-linux-dtoverlays/output 目錄下袱饭。

需要注意的是,如果你在執(zhí)行“make”后出現(xiàn)報(bào)錯(cuò)呛占,可以嘗試先卸載device-tree-compiler(卸載命令為:“sudo apt-get autoremove device-tree-compiler”), 重新安裝虑乖,然后在“ebf-linux-dtoverlays/basic/fixdep文件的權(quán)限, 修改權(quán)限命令為:“chmod 777 scripts/basic/fixdep”晾虑。

USB Microphone https://www.soft-voice.com/

Wooden Speakers? https://www.zeshuiplatform.com/

亞馬遜測(cè)評(píng) www.yisuping.cn

深圳網(wǎng)站建設(shè)www.sz886.com

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末疹味,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子帜篇,更是在濱河造成了極大的恐慌糙捺,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笙隙,死亡現(xiàn)場(chǎng)離奇詭異洪灯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)竟痰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門签钩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人坏快,你說我怎么就攤上這事铅檩。” “怎么了假消?”我有些...
    開封第一講書人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵柠并,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我富拗,道長(zhǎng)臼予,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任啃沪,我火速辦了婚禮粘拾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘创千。我一直安慰自己缰雇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開白布追驴。 她就那樣靜靜地躺著械哟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪殿雪。 梳的紋絲不亂的頭發(fā)上暇咆,一...
    開封第一講書人閱讀 52,807評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼爸业。 笑死其骄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扯旷。 我是一名探鬼主播拯爽,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼钧忽!你這毒婦竟也來了毯炮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤惰瓜,失蹤者是張志新(化名)和其女友劉穎否副,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體崎坊,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡备禀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奈揍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片曲尸。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖男翰,靈堂內(nèi)的尸體忽然破棺而出另患,到底是詐尸還是另有隱情,我是刑警寧澤蛾绎,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布昆箕,位于F島的核電站,受9級(jí)特大地震影響租冠,放射性物質(zhì)發(fā)生泄漏鹏倘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一顽爹、第九天 我趴在偏房一處隱蔽的房頂上張望纤泵。 院中可真熱鬧,春花似錦镜粤、人聲如沸捏题。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)公荧。三九已至,卻和暖如春同规,著一層夾襖步出監(jiān)牢的瞬間稚矿,已是汗流浹背庸诱。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晤揣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓朱灿,卻偏偏與公主長(zhǎng)得像昧识,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盗扒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 驅(qū)動(dòng): 必做實(shí)驗(yàn)一跪楞、二、四侣灶、五甸祭、十一 十天: 模塊、字符設(shè)備框架以及接口褥影、led驅(qū)動(dòng) platform總線 原子操...
    ibo閱讀 370評(píng)論 0 0
  • 大家好池户,從本篇起,一口君將手把手教大家如何來學(xué)習(xí)Linux驅(qū)動(dòng)凡怎,預(yù)計(jì)會(huì)有20篇關(guān)于驅(qū)動(dòng)初級(jí)部分知識(shí)點(diǎn)校焦。本專題會(huì)一直...
    一口Linux閱讀 569評(píng)論 0 0
  • 大家好,從本篇起统倒,一口君將手把手教大家如何來學(xué)習(xí)Linux驅(qū)動(dòng)寨典,預(yù)計(jì)會(huì)有20篇關(guān)于驅(qū)動(dòng)初級(jí)部分知識(shí)點(diǎn)。本專題會(huì)一直...
    一口Linux閱讀 551評(píng)論 0 0
  • 一房匆、Linux內(nèi)核簡(jiǎn)介 1.宏內(nèi)核與微內(nèi)核 內(nèi)核分為四大類:?jiǎn)蝺?nèi)核(宏內(nèi)核)耸成;微內(nèi)核;混合內(nèi)核浴鸿;外內(nèi)核井氢。 宏內(nèi)核(...
    Mr_Michael閱讀 1,801評(píng)論 0 2
  • Linux 對(duì)大多數(shù)的驅(qū)動(dòng)作了分類:塊設(shè)備驅(qū)動(dòng)、網(wǎng)絡(luò)驅(qū)動(dòng)赚楚、I 2 C 驅(qū)動(dòng)毙沾、USB 驅(qū)動(dòng)、SPI 驅(qū)動(dòng)宠页、音頻驅(qū)動(dòng)等...
    不配野心閱讀 2,987評(píng)論 0 0