女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

如何在Petalinux創(chuàng)建Linux內(nèi)核模塊?

YCqV_FPGA_EETre ? 來(lái)源:賽靈思中文社區(qū)論壇 ? 作者:付漢杰 ? 2021-03-02 11:10 ? 次閱讀

創(chuàng)建內(nèi)核模塊

Petalinux可以幫助工程師簡(jiǎn)化內(nèi)核模塊的創(chuàng)建工作。在petalinux工程目錄下,使用命令“ petalinux-create -t modules --name --enable”,能創(chuàng)建Linux內(nèi)核模塊,包括c源代碼文件,Makefile,Yocto的bb文件。相關(guān)文件放在目錄“ project-spec / meta-user / recipes-modules”中,目錄結(jié)構(gòu)如下。

hankf@XSZGS4:~/proj/vcu-trd-2020.2-peta-qt/project-spec/meta-user/recipes-modules$ tree

.

└── linux-test-module

├── files

│ ├── COPYING

│ ├── linux-test-module.c

│ └── Makefile

├── linux-test-module.bb

└── README

2 directories, 5 files

Makefile

原始Makefile

原始的Makefile只支持一個(gè)源文件,內(nèi)容如下:

obj-m := linux-module-module.o

MY_CFLAGS += -g -DDEBUG

ccflags-y += ${MY_CFLAGS}

SRC := $(shell pwd)

all:

$(MAKE) -C $(KERNEL_SRC) M=$(SRC)

modules_install:

$(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules_install

clean:

rm -f *.o *~ core .depend .*.cmd *.ko *.mod.c

rm -f Module.markers Module.symvers modules.order

rm -rf .tmp_versions Modules.symvers

原始的Makefile,支持模塊在內(nèi)核源碼目錄外編譯。編譯的命令是“$(MAKE) -C $(KERNEL_SRC) M=$(SRC)”。其中-C選項(xiàng)將當(dāng)前工作目錄轉(zhuǎn)移到指定的位置;KERNEL_SRC是Yocto/PetaLinux在文件components/yocto/layers/core/meta/classes/module.bbclass里定義的變量,指定了Linux內(nèi)核源代碼目錄,一般是Petalinux工程目錄下的子目錄“build/tmp/work-shared/zynqmp-generic/kernel-source”。這樣編譯時(shí)先進(jìn)入內(nèi)核源代碼目錄,先執(zhí)行其中的頂層Makefile。M是內(nèi)核根目錄下的Makefile中使用的變量,讓make在構(gòu)造modules目標(biāo)之前返回到內(nèi)核模塊源的代碼目錄。

Linux內(nèi)核頂層Makefile關(guān)于M變量的代碼:

# Use make M=dir or set the environment variable KBUILD_EXTMOD to specify the

# directory of external module to build. Setting M= takes precedence.

ifeq ("$(origin M)", "command line")

KBUILD_EXTMOD := $(M)

endif

module.bbclass里定義的變量KERNEL_SRC的代碼:

python do_devshell_prepend () {

os.environ['CFLAGS'] = ''

os.environ['CPPFLAGS'] = ''

os.environ['CXXFLAGS'] = ''

os.environ['LDFLAGS'] = ''

os.environ['KERNEL_PATH'] = d.getVar('STAGING_KERNEL_DIR')

os.environ['KERNEL_SRC'] = d.getVar('STAGING_KERNEL_DIR')

os.environ['KERNEL_VERSION'] = d.getVar('KERNEL_VERSION')

os.environ['CC'] = d.getVar('KERNEL_CC')

os.environ['LD'] = d.getVar('KERNEL_LD')

os.environ['AR'] = d.getVar('KERNEL_AR')

os.environ['O'] = d.getVar('STAGING_KERNEL_BUILDDIR')

kbuild_extra_symbols = d.getVar('KBUILD_EXTRA_SYMBOLS')

if kbuild_extra_symbols:

os.environ['KBUILD_EXTRA_SYMBOLS'] = kbuild_extra_symbols

else:

os.environ['KBUILD_EXTRA_SYMBOLS'] = ''

}

語(yǔ)句“obj-m := linux-test-module.o”指示Kbuild將模塊編譯成Linux內(nèi)核模塊文件linux-test-module.ko。

更多信息可以參考相關(guān)文檔,比如深入理解 Linux 配置/構(gòu)建系統(tǒng)是如何工作的,LINUX內(nèi)核編譯學(xué)習(xí)筆記, Linux 內(nèi)核模塊編譯 Makefile, Linux 2.6內(nèi)核Makefile淺析。

多源文件Makefile

如果有多個(gè)源文件,也可以學(xué)習(xí)Linux內(nèi)核模塊的Makefile寫(xiě)法,使Petalinux的內(nèi)核模塊也支持多個(gè)源文件。Linux內(nèi)核通過(guò)$(-objs)包含多個(gè)目標(biāo)文件,使Kbuild編譯多個(gè)源文件。因此在支持新Makefile里,增加了objs語(yǔ)句。首先通過(guò)TEST_FILES列出所有C文件,再將C文件替換成Obj文件賦值給$(TEST_MODULE_NAME)-objs 。

export TEST_MODULE_NAME = linux-test-module

export TEST_FILES = linux-test-module.c linux-test-module-internal.c

$(TEST_MODULE_NAME)-objs = $(patsubst %.c,%.o,$(filter %.c,$(TEST_FILES)))

obj-m += $(TEST_MODULE_NAME).o

MY_CFLAGS += -g -DDEBUG

ccflags-y += ${MY_CFLAGS}

SRC := $(shell pwd)

all:

$(MAKE) -C $(KERNEL_SRC) M=$(SRC)

modules_install:

$(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules_install

clean:

rm -f *.o *~ core .depend .*.cmd *.ko *.mod.c

rm -f Module.markers Module.symvers modules.order

rm -rf .tmp_versions Modules.symvers

內(nèi)核源碼目錄內(nèi)Makefile

有時(shí)內(nèi)核模塊也需要在Linux內(nèi)核源碼目錄內(nèi)編譯,不需要指定編譯命令。KERNELRELEASE是Linux內(nèi)核源碼的頂層Makefile定義的一個(gè)變量。如果在內(nèi)核源碼目錄內(nèi)編譯,先執(zhí)行Linux內(nèi)核源碼的頂層Makefile,會(huì)定義KERNELRELEASE的具體值。如果加上對(duì)KERNELRELEASE的檢查,前面的Makefile可以改造成既可以在在內(nèi)核源碼目錄內(nèi)編譯,也可以在在內(nèi)核源碼目錄外編譯。下面的Makefile,增加了檢查KERNELRELEASE的語(yǔ)句“ifeq ($(KERNELRELEASE),)”。

export TEST_MODULE_NAME = linux-test-module

export TEST_FILES = linux-test-module.c linux-test-module-internal.c

$(TEST_MODULE_NAME)-objs = $(patsubst %.c,%.o,$(filter %.c,$(TEST_FILES)))

obj-m += $(TEST_MODULE_NAME).o

MY_CFLAGS += -g -DDEBUG

ccflags-y += ${MY_CFLAGS}

ifeq ($(KERNELRELEASE),)

SRC := $(shell pwd)

# KERNEL_src=/proj/hankf/zcu106/rdf0428-zcu106-vcu-trd-2020.2/source/linux-kernel

all:

$(MAKE) -C $(KERNEL_SRC) M=$(SRC)

modules_install:

$(MAKE) -C $(KERNEL_SRC) M=$(SRC) modules_install

clean:

rm -f *.o *~ core .depend .*.cmd *.ko *.mod.c

rm -f Module.markers Module.symvers modules.order

rm -rf .tmp_versions Modules.symvers

endif

實(shí)際測(cè)試中,不加KERNELRELEASE相關(guān)語(yǔ)句,也不影響在Linux內(nèi)核源碼目錄內(nèi)編譯。據(jù)說(shuō)舊版本Kbuild才需要的KERNELRELEASE相關(guān)語(yǔ)句。


上面的Makefile文件也可以作為一個(gè)模板。只需要更改TEST_MODULE_NAME的值“l(fā)inux-test-module”,和更改TEST_FILES后的文件列表,可以用于編譯其它模塊。


如果既不在PetaLinux環(huán)境里編譯,也不再Linux內(nèi)核源碼目錄內(nèi)編譯,請(qǐng)?jiān)僭谏厦娴腗akefile文件里定義內(nèi)核源碼目錄。

Yocto recipe文件

Yocto recipe文件的擴(kuò)展名是.bb,它定義recipe需要的文件。

原始bb文件

原始的recipe的bb文件的只含有一個(gè)C文件。

SUMMARY = "Recipe for build an external linux-test-module Linux kernel module"

SECTION = "PETALINUX/modules"

LICENSE = "GPLv2"

LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e"

inherit module

INHIBIT_PACKAGE_STRIP = "1"

SRC_URI = "file://Makefile

file://linux-test-module.c

file://COPYING

"

S = "${WORKDIR}"

# The inherit of module.bbclass will automatically name module packages with

# "kernel-module-" prefix as required by the oe-core build environment.

新bb文件

由于要支持多個(gè)源文件,需要在recipe的bb文件的添加所有C文件。修改其實(shí)也很簡(jiǎn)單。下面的bb文件添加了行“file://linux-test-module-internal.c”以為Yocto/PetaLinux增加文件linux-test-module-internal.c。

SUMMARY = "Recipe for build an external linux-test-module Linux kernel module"

SECTION = "PETALINUX/modules"

LICENSE = "GPLv2"

LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e"

inherit module

INHIBIT_PACKAGE_STRIP = "1"

SRC_URI = "file://Makefile

file://linux-test-module.c

file://linux-test-module-internal.c

file://COPYING

"

S = "${WORKDIR}"

# The inherit of module.bbclass will automatically name module packages with

# "kernel-module-" prefix as required by the oe-core build environment.

測(cè)試環(huán)境UBuntu 18.04
PetaLinux 2020.2

原文標(biāo)題:【工程師分享】在Petalinux編譯多個(gè)源文件的Linux內(nèi)核模塊,以及擴(kuò)展Makefile功能

文章出處:【微信公眾號(hào):FPGA開(kāi)發(fā)圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(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)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1408

    瀏覽量

    41089
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11456

    瀏覽量

    212756

原文標(biāo)題:【工程師分享】在Petalinux編譯多個(gè)源文件的Linux內(nèi)核模塊,以及擴(kuò)展Makefile功能

文章出處:【微信號(hào):FPGA-EETrend,微信公眾號(hào):FPGA開(kāi)發(fā)圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    迅為RK3568開(kāi)發(fā)板內(nèi)核模塊實(shí)現(xiàn)-查看模塊信息

    在驅(qū)動(dòng)模塊加載之后,使用“modinfo helloworld.ko”命令可以獲得模塊的信息,包括模塊作者,模塊說(shuō)明,模塊支持的參數(shù)等等。
    發(fā)表于 05-16 11:18

    迅為RK3568開(kāi)發(fā)板內(nèi)核模塊實(shí)現(xiàn)-模塊加載與卸載

    有了內(nèi)核模塊以后,我們要如何使用呢?編譯驅(qū)動(dòng)有倆種方式,那 Linux 驅(qū)動(dòng)的運(yùn)行方式也肯定有倆種。一種就是將驅(qū)動(dòng)編譯進(jìn)內(nèi)核,這樣 Linux 系統(tǒng)啟動(dòng)后會(huì)自動(dòng)運(yùn)行程序。第二種就是將驅(qū)
    發(fā)表于 05-14 10:56

    迅為RK3568開(kāi)發(fā)板內(nèi)核模塊實(shí)現(xiàn)-編譯模塊

    有了 Makefile 以后,輸入“make”命令就可以編譯 helloworld 驅(qū)動(dòng)模塊,如下圖(圖 4-7)所示: 編譯完生成 helloworld.ko 目標(biāo)文件就是我們需要的內(nèi)核模塊
    發(fā)表于 05-12 11:09

    迅為RK3568開(kāi)發(fā)板內(nèi)核模塊實(shí)現(xiàn)-編寫(xiě) Makefile

    ;lt;文件>:將指定的文件(需要是以.o 結(jié)尾)設(shè)為編譯時(shí)以模塊形式編譯 第 4 行是設(shè)備樹(shù)內(nèi)核的源碼路徑,請(qǐng)大家根據(jù)實(shí)際內(nèi)核路徑進(jìn)行修改。 第 5 行是獲取當(dāng)前目錄的變量 第 7 行
    發(fā)表于 04-24 13:36

    在任何平臺(tái)上使用PetaLinux的先決條件

    本篇文章介紹了在任何平臺(tái)上使用 PetaLinux 的先決條件。PetaLinux 是一種嵌入式 Linux 軟件開(kāi)發(fā)套件 (SDK),主要用于基于 FPGA 的系統(tǒng)級(jí)芯片 (SoC) 設(shè)計(jì)或 FPGA 設(shè)計(jì)。
    的頭像 發(fā)表于 04-24 10:40 ?374次閱讀
    在任何平臺(tái)上使用<b class='flag-5'>PetaLinux</b>的先決條件

    從零開(kāi)始馴服Linux(一):ZYNQ-Linux啟動(dòng)文件構(gòu)建全解析

    /atk-zynq-linux-xlnx),可看到Linux內(nèi)核源碼目錄結(jié)構(gòu),如下圖所示: 圖 1.2.7 Linux內(nèi)核源碼目錄結(jié)構(gòu) 拷貝
    發(fā)表于 03-20 16:48

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-Linux內(nèi)核移植之內(nèi)核簡(jiǎn)介

    所以每個(gè)模塊都有對(duì)應(yīng)的維護(hù)人員。維護(hù)人員的工作就是審核人們提交的代碼是否正確,如果沒(méi)有問(wèn)題,就會(huì)合并到主分支上。這樣就會(huì)使linux內(nèi)核不斷完善和更新。接下來(lái)就是芯片原廠例如恩智浦,開(kāi)發(fā)人員會(huì)不定期在
    發(fā)表于 12-16 13:08

    飛凌嵌入式ElfBoard ELF 1板卡-Linux內(nèi)核移植之內(nèi)核簡(jiǎn)介

    所以每個(gè)模塊都有對(duì)應(yīng)的維護(hù)人員。維護(hù)人員的工作就是審核人們提交的代碼是否正確,如果沒(méi)有問(wèn)題,就會(huì)合并到主分支上。這樣就會(huì)使linux內(nèi)核不斷完善和更新。接下來(lái)就是芯片原廠例如恩智浦,開(kāi)發(fā)人員會(huì)不定期在
    發(fā)表于 12-13 09:03

    何在Petalinux下Patch u-boot源碼

    在軟件開(kāi)發(fā)過(guò)程中我們經(jīng)常遇到用 Patch 來(lái)傳遞和更新代碼的場(chǎng)景。本文以一個(gè)端到端的例子來(lái)演示在 Petalinux 使用過(guò)程中,如何給 u-boot 的源碼生成 Patch 并在 Petalinux 中編譯。
    的頭像 發(fā)表于 12-04 16:26 ?1614次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>Petalinux</b>下Patch u-boot源碼

    Multi-Scaler IP的Linux示例以及Debug(下)

    設(shè)置好 2022.2 Petalinux 環(huán)境。使用 2022.2 ZCU06 BSP,創(chuàng)建 Petalinux 工程:
    的頭像 發(fā)表于 09-18 10:05 ?535次閱讀
    Multi-Scaler IP的<b class='flag-5'>Linux</b>示例以及Debug(下)

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

    ,需要了解Linux內(nèi)核的基本概念和API。以下是一些關(guān)鍵概念: 1.1 內(nèi)核模塊Linux內(nèi)核模塊是一種動(dòng)態(tài)加載和卸載的代碼,可以在不重
    的頭像 發(fā)表于 08-30 15:02 ?954次閱讀

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

    Linux驅(qū)動(dòng)程序的編譯方法主要包括兩種: 與內(nèi)核一起編譯 和 編譯成獨(dú)立的內(nèi)核模塊 。以下是對(duì)這兩種方法的介紹: 一、與內(nèi)核一起編譯 與內(nèi)核
    的頭像 發(fā)表于 08-30 14:46 ?1100次閱讀

    Linux內(nèi)核測(cè)試技術(shù)

    Linux 內(nèi)核Linux操作系統(tǒng)的核心部分,負(fù)責(zé)管理硬件資源和提供系統(tǒng)調(diào)用接口。隨著 Linux 內(nèi)核的不斷發(fā)展和更新,其復(fù)雜性和代碼規(guī)
    的頭像 發(fā)表于 08-13 13:42 ?905次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>測(cè)試技術(shù)

    NVIDIA全面轉(zhuǎn)向開(kāi)源GPU內(nèi)核模塊

    借助 R515 驅(qū)動(dòng)程序,NVIDIA 于 2022 年 5 月發(fā)布了一套開(kāi)源的 Linux GPU 內(nèi)核模塊,該模塊采用雙許可證,即 GPL 和 MIT 許可。初始版本主要面向數(shù)據(jù)中心計(jì)算 GPU,而 GeForce 和工作站
    的頭像 發(fā)表于 07-25 09:56 ?910次閱讀
    NVIDIA全面轉(zhuǎn)向開(kāi)源GPU<b class='flag-5'>內(nèi)核模塊</b>

    英偉達(dá)將全面轉(zhuǎn)向開(kāi)源GPU內(nèi)核模塊

    英偉達(dá)公司近期宣布了一項(xiàng)重大決策,即全面轉(zhuǎn)向開(kāi)源GPU內(nèi)核模塊,并計(jì)劃最終以此取代閉源驅(qū)動(dòng)程序。這一戰(zhàn)略轉(zhuǎn)變標(biāo)志著英偉達(dá)在開(kāi)源領(lǐng)域邁出了重要一步,旨在為用戶(hù)提供更強(qiáng)大、更全面的Linux支持。
    的頭像 發(fā)表于 07-19 15:26 ?791次閱讀