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

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

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

飛凌嵌入式i.MX8MP開(kāi)發(fā)板移植驅(qū)動(dòng),其實(shí)可以很簡(jiǎn)單

飛凌嵌入式 ? 2022-11-15 14:06 ? 次閱讀

各位工程師用戶(hù)在對(duì)飛凌嵌入式OKMX8MP-C開(kāi)發(fā)板進(jìn)行開(kāi)發(fā)的過(guò)程中,可能會(huì)遇到需要移植驅(qū)動(dòng)的情況。為避免用戶(hù)因不了解移植驅(qū)動(dòng)的過(guò)程而影響開(kāi)發(fā)進(jìn)度,今天小編會(huì)以寫(xiě)一個(gè)hello驅(qū)動(dòng)為例,演示移植驅(qū)動(dòng)的過(guò)程,有需求的小伙伴可參考此方法自行操作。

3f150496-5ec3-11ed-b116-dac502259ad0.png

01

進(jìn)入源碼的drivers目錄下,并創(chuàng)建一個(gè)名為hello的目錄:


forlinx@ubuntu:~$  cd  /home/forlinx/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers
forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers$mkdir  hello

02

進(jìn)入hello目錄,創(chuàng)建hello.c:


forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers$  cd hello
forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers/hello$  vi hello.c

在hello.c中寫(xiě)入如下內(nèi)容:


#include  
#include  
static  int hello_init(void)
{
printk(KERN_ALERT  "Hello world\n");
return  0;
}
static  void hello_exit(void)
{
printk(KERN_ALERT  "Goodbye world\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("Dual  BSD/GPL");


程序含義:insmod驅(qū)動(dòng)掛載時(shí)打印Hello world,rmmod驅(qū)動(dòng)卸載時(shí)打印Goodbye world

03

在該文件夾下創(chuàng)建Kconfig,Makefile兩個(gè)文件。


forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers/hello$  vi  Kconfig

在Kconfig文件中寫(xiě)入如下內(nèi)容:


config  HAVE_HELLO
tristate       "hello driver"
help
This  hello  driver  is  just  to  show  how  to  develop  driver  process.


This  driver  can  also  be  built  as  a  module.  If  so,  the  module will  be  called  .
default  y
#endmenu

表示如果使能了CONFIG_HAVE_HELLO,在內(nèi)核裁剪配置文件中,將顯示hellodrivers菜單,默認(rèn)編譯進(jìn)內(nèi)核:

y:編譯進(jìn)內(nèi)核

m:編譯為模塊.ko文件

n:表示不編譯,未使能。


forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers/hello$  vi  Kconfig

在Makefile文件中寫(xiě)入如下內(nèi)容:

obj-$(CONFIG_HAVE_HELLO)        +=      hello.o

注意:

宏定義的名字要和Kconfig中的一樣。后面添加需要編譯的文件名,因?yàn)閮?nèi)核會(huì)自動(dòng)添加前綴CONFIG,所以我們這里也要在名字前面添加CONFIG_,表示CONFIG_HAVE_HELLO使能時(shí),編譯規(guī)則指定的文件為hello.c。

給添加的這三個(gè)文件權(quán)限:


forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers/hello$  chmod  777 hello.c
forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers/hello$  chmod  777 Kconfig
forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers/hello$  chmod  777 Makefile

04

編輯drivers頂層的Kconfig,Makefile文件。


forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers/hello$  cd  ..
forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers$  vi Kconfig

在Kconfig文件中寫(xiě)入如下內(nèi)容:


source  "drivers/counter/Kconfig"
source  "drivers/mxc/Kconfig"
source  "drivers/hello/Kconfig"    //在endmenu前添加hello文件夾的配置文件解析
endmenu

如此一來(lái),配置系統(tǒng)就會(huì)按照這個(gè)配置去解析hello文件夾下的Kconfig。

編輯Makefile:


forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers$  vi Makefile

在Makefile文件中寫(xiě)入如下內(nèi)容:


obj-$(CONFIG_COUNTER)           += counter/
obj-y                           += mxc/
obj-$(CONFIG_HAVE_HELLO)        +=      hello/     //在Makefile最后加入這一句

這句話(huà)的作用是當(dāng)CONFIG_HAVE_HELLO使能后,在哪里去找源文件。再結(jié)合hello文件下模塊Makefile就形成了層次式Makefile。注意不要少了/,這里添加自定義文件夾的名字,表示把這個(gè)文件夾編譯進(jìn)內(nèi)核。

05

開(kāi)始編譯:


forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers$  cd ../..
forlinx@ubuntu:~/work/OK8MP-linux-sdk$  .  /opt/fsl-imx-xwayland/5.4-zeus/environment-setup-aarch64-poky-linux
forlinx@ubuntu:~/work/OK8MP-linux-sdk$  .  environment-setup-aarch64-poky-linux
forlinx@ubuntu:~/work/OK8MP-linux-sdk$  cd  OK8MP-linux-kernel
forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel$  make modules
scripts/kconfig/conf --syncconfig Kconfig
drivers/hello/Kconfig:7:warning:  ignoring unsupported character '?'
drivers/hello/Kconfig:7:warning:  ignoring unsupported character '?'
drivers/hello/Kconfig:7:warning:  ignoring unsupported character '?'
drivers/hello/Kconfig:7:warning:  ignoring unsupported character '?'
*
* Restart config...
*
*
* Device Drivers
*
Trust the bootloader  to initialize Linux's CRNG (RANDOM_TRUST_BOOTLOADER) [N/y/?] n
Platform support for  Chrome hardware (transitional) (MFD_CROS_EC) [Y/n/m/?] y
Trusted Execution  Environment support (TEE) [Y/n/m/?] y
hello driver  (HAVE_HELLO) [Y/n/m/?] (NEW) m    //將hello驅(qū)動(dòng)編譯進(jìn)內(nèi)核就配置為m
CALL   scripts/checksyscalls.sh
CALL   scripts/atomic/check-atomics.sh
CHK      include/generated/compile.h
GZIP   kernel/config_data.gz
CC     kernel/configs.o
[…]
LD      vmlinux
SORTEX  vmlinux
SYSMAP  System.map
Building modules,  stage 2.
MODPOST 536 modules
CC [M] drivers/hello/hello.mod.o
LD [M] drivers/hello/hello.ko

編譯完成后,即可在OK8MP-linux-kernel/drivers/hello目錄下看到編譯生成的驅(qū)動(dòng)了:


forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/$  ls drivers/hello
hello.c  hello.ko  hello.mod  hello.mod.c  hello.mod.o  hello.o  Kconfig  Makefile modules.order

06

將hello.ko使用U盤(pán)或TF卡拷貝到開(kāi)發(fā)板里進(jìn)行驗(yàn)證:

root@OK8MP:~# cd  /run/media/sda1/              //進(jìn)入U(xiǎn)盤(pán)的路徑下
root@OK8MP:/run/media/sda1#  insmod  hello.ko   //掛載hello.ko
[  138.679964] Hello  world                     //掛載驅(qū)動(dòng)打印信息
root@OK8MP:/run/media/sda1#  rmmod  hello.ko    //卸載hello.ko
[  142.022115]  Goodbye  world                  //卸載驅(qū)動(dòng)打印信息
root@OK8MP:/run/media/sda1#

由上述測(cè)試可看,hello.ko驅(qū)動(dòng)可正常運(yùn)行。

以上就是小編為大家演示的自行書(shū)寫(xiě)并添加一個(gè)驅(qū)動(dòng)的過(guò)程,若您想要移植某一個(gè)模塊,可向模塊廠家索要現(xiàn)成的驅(qū)動(dòng).c文件,之后再按照上述步驟配置Makefile和Kconfig即可。

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

    關(guān)注

    134

    文章

    9143

    瀏覽量

    368360
  • 嵌入式
    +關(guān)注

    關(guān)注

    5089

    文章

    19160

    瀏覽量

    306623
  • NXP
    NXP
    +關(guān)注

    關(guān)注

    60

    文章

    1287

    瀏覽量

    184894
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    3.1s啟動(dòng)!嵌入式i.MX93開(kāi)發(fā)板部署LVGL,打造更高效的GUI

    近期,嵌入式為基于NXP i.MX93系列處理器打造的OK-MX9352-C開(kāi)發(fā)板成功
    的頭像 發(fā)表于 01-16 11:52 ?137次閱讀
    3.1s啟動(dòng)!<b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b><b class='flag-5'>i.MX</b>93<b class='flag-5'>開(kāi)發(fā)板</b>部署LVGL,打造更高效的GUI

    2秒啟動(dòng)!嵌入式RK3506開(kāi)發(fā)板LVGL顯示方案,讓界面炫起來(lái)

    近期,嵌入式為OK3506J-S開(kāi)發(fā)板移植了最新9.2版本的LVGL,支持多種屏幕構(gòu)件以及鼠標(biāo)、鍵盤(pán)、觸摸等多種輸入方式, 能夠帶來(lái)更加
    的頭像 發(fā)表于 01-10 10:52 ?247次閱讀
    2秒啟動(dòng)!<b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>RK3506<b class='flag-5'>開(kāi)發(fā)板</b>LVGL顯示方案,讓界面炫起來(lái)

    嵌入式i.MX8M Mini核心已支持Linux6.1

    嵌入式FETMX8MM-C核心現(xiàn)已支持Linux6.1系統(tǒng),此次升級(jí)不僅使系統(tǒng)功能更加豐富,還通過(guò)全新BSP實(shí)現(xiàn)了內(nèi)存性能的顯著提升。
    的頭像 發(fā)表于 01-10 09:56 ?1596次閱讀
    <b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b><b class='flag-5'>i.MX8</b>M Mini核心<b class='flag-5'>板</b>已支持Linux6.1

    嵌入式OK3588J-C開(kāi)發(fā)板體驗(yàn)】OK3588J-C開(kāi)發(fā)板開(kāi)箱評(píng)測(cè)

    很高興收到嵌入式提供的OK3588J-C開(kāi)發(fā)板,這是瑞芯微最新的8K旗艦8核SOC,非常適合
    發(fā)表于 12-04 15:23

    基于AR1335和i.MX8MP的視覺(jué)方案

    在現(xiàn)代科技的推動(dòng)下,視覺(jué)技術(shù)在各個(gè)領(lǐng)域的應(yīng)用越來(lái)越廣泛。你是否曾想過(guò),如何在低光環(huán)境下依然能捕捉到清晰、細(xì)膩的圖像?本文將為你揭示基于AR1335和i.MX8MP的視覺(jué)方案,如何在無(wú)人機(jī)、智能家居等
    的頭像 發(fā)表于 11-13 01:01 ?276次閱讀
    基于AR1335和<b class='flag-5'>i.MX8MP</b>的視覺(jué)方案

    強(qiáng)大視覺(jué)方案:i.MX8MP與AR0144的完美結(jié)合

    大聯(lián)大友尚集團(tuán)推出基于NXPi.MX8MP處理器和onsemiAR0144圖像傳感器的全新視覺(jué)方案。該方案不僅具備強(qiáng)大的圖像處理能力,還能廣泛應(yīng)用于監(jiān)控、智能零售、機(jī)器人視覺(jué)等領(lǐng)域。一、應(yīng)用場(chǎng)景描述及市場(chǎng)優(yōu)勢(shì)該方案采用NXP的i.MX8MP作為主控平臺(tái),搭配onsemi的
    的頭像 發(fā)表于 10-29 08:04 ?266次閱讀
    強(qiáng)大視覺(jué)方案:<b class='flag-5'>i.MX8MP</b>與AR0144的完美結(jié)合

    【北京迅為】i.mx8mm嵌入式linux開(kāi)發(fā)指南第四篇 嵌入式Linux系統(tǒng)移植篇第六十九章uboot移植

    【北京迅為】i.mx8mm嵌入式linux開(kāi)發(fā)指南第四篇 嵌入式Linux系統(tǒng)移植篇第六十九章uboot
    的頭像 發(fā)表于 10-22 14:46 ?705次閱讀
    【北京迅為】<b class='flag-5'>i.mx8</b>mm<b class='flag-5'>嵌入式</b>linux<b class='flag-5'>開(kāi)發(fā)</b>指南第四篇 <b class='flag-5'>嵌入式</b>Linux系統(tǒng)<b class='flag-5'>移植</b>篇第六十九章uboot<b class='flag-5'>移植</b>

    嵌入式作為首個(gè)嵌入式板卡合作伙伴入駐「恩智浦云實(shí)驗(yàn)室」

    嵌入式作為恩智浦云實(shí)驗(yàn)室的首個(gè)嵌入式板卡合作伙伴,已經(jīng)攜OK-MX95xx-C和OK-MX8
    的頭像 發(fā)表于 10-15 08:01 ?457次閱讀
    <b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>作為首個(gè)<b class='flag-5'>嵌入式</b>板卡合作伙伴入駐「恩智浦云實(shí)驗(yàn)室」

    嵌入式OK3576-C開(kāi)發(fā)板體驗(yàn)】開(kāi)箱報(bào)告

    簡(jiǎn)介 很榮幸參與到本次由嵌入式和電子發(fā)燒友提供的OK3576-C開(kāi)發(fā)板的試用機(jī)會(huì)。
    發(fā)表于 08-22 02:13

    嵌入式i.MX 8M Plus開(kāi)發(fā)板的OTA遠(yuǎn)程升級(jí)方案

    的方式,可升級(jí)系統(tǒng)內(nèi)核、文件系統(tǒng)和應(yīng)用。接下來(lái),將以嵌入式OKMX8MP-C開(kāi)發(fā)板為例,基于Linux 5.4.70版本內(nèi)核,展示升級(jí)前
    的頭像 發(fā)表于 06-03 17:59 ?773次閱讀
    <b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b><b class='flag-5'>i.MX</b> <b class='flag-5'>8</b>M Plus<b class='flag-5'>開(kāi)發(fā)板</b>的OTA遠(yuǎn)程升級(jí)方案

    嵌入式i.MX8M Plus開(kāi)發(fā)板的OTA遠(yuǎn)程升級(jí)方案

    的方式,可升級(jí)系統(tǒng)內(nèi)核、文件系統(tǒng)和應(yīng)用。接下來(lái),將以嵌入式OKMX8MP-C開(kāi)發(fā)板為例,基于Linux5.4.70版本內(nèi)核,展示升級(jí)前后
    的頭像 發(fā)表于 04-29 08:01 ?778次閱讀
    <b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b><b class='flag-5'>i.MX8</b>M Plus<b class='flag-5'>開(kāi)發(fā)板</b>的OTA遠(yuǎn)程升級(jí)方案

    如何在嵌入式T113-i開(kāi)發(fā)板的Buildroot中移植MQTT協(xié)議?

    新功能。本篇文章,小編就以在Buildroot移植MQTT協(xié)議為例為大家介紹。 配置文件介紹 首先了解一下在Buildroot中移植功能時(shí)涉及到的配置文件。 查看
    發(fā)表于 02-04 11:27

    嵌入式RK3568開(kāi)發(fā)板藍(lán)牙收、發(fā)文件測(cè)試

    本文由電子發(fā)燒友論壇用戶(hù)fsdzdzy提供,感謝分享。嵌入式每月定期開(kāi)展新的開(kāi)發(fā)板體驗(yàn)活動(dòng),歡迎更多工程師朋友的關(guān)注和參與。
    的頭像 發(fā)表于 02-02 16:31 ?1926次閱讀
    <b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>RK3568<b class='flag-5'>開(kāi)發(fā)板</b>藍(lán)牙收、發(fā)文件測(cè)試

    嵌入式T113-i開(kāi)發(fā)板的調(diào)屏方法

    對(duì)于飛嵌入式T113-i開(kāi)發(fā)板的調(diào)屏問(wèn)題,需要按照以下步驟進(jìn)行操作
    的頭像 發(fā)表于 01-29 16:25 ?1078次閱讀

    如何在嵌入式T113-i開(kāi)發(fā)板的Buildroot中移植MQTT協(xié)議?

    嵌入式OK113i-S開(kāi)發(fā)板上市一段時(shí)間以來(lái)收獲了很多關(guān)注,也成為了許多客戶(hù)項(xiàng)目選型的優(yōu)質(zhì)之選。在實(shí)際的項(xiàng)目
    的頭像 發(fā)表于 01-26 08:02 ?556次閱讀
    如何在<b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>T113-<b class='flag-5'>i</b><b class='flag-5'>開(kāi)發(fā)板</b>的Buildroot中<b class='flag-5'>移植</b>MQTT協(xié)議?