98国产精品综合一区二区三区,国产福利视频,男人添女人囗交做爰视频,日本免费一区二区三区视频观看

您好,歡迎進入深圳市穎特新科技有限公司官方網站!

您現(xiàn)在的位置:首頁 新聞資訊 >> 新聞頭條 >> NUC972----最簡單的驅動(轉)
新聞資訊
NEWS INFORMATION

NUC972----最簡單的驅動(轉)

發(fā)布時間:2019-05-22

1.新建文本文檔,重命名為 hello_dev.c (驅動的開發(fā)同應用的開發(fā)一樣,也是在文本文檔下開發(fā)的)。

2.包含頭文件

內核模塊需要包含內核相關頭文件,不同模塊根據(jù)功能的差異,所需要的頭文件也不相同,但是<linux/module.h>和<linux/init.h>是必不可少的。

 

#include <linux/module.h>

#include <linux/init.h>

 

 

 

3.模塊初始化

模塊的初始化負責注冊模塊本身。如果一個內核模塊沒有被注冊,則其內部的各種方法(函數(shù))無法被應用程序使用,只有已注冊模塊的各種方法才能夠被應用程序使用并發(fā)揮各方法的實際功能。模塊并不是內核內部的代碼,而是獨立于內核之外,通過初始化,能夠讓內核之外的代碼來替內核完成本應該由內核完成的功能,模塊初始化的功能相當于模塊與內核之間銜接的橋梁,告知內核“我進來了”。

 

static int __init module_init_func(void)

{

初始化代碼

}

module_init(module_init_func);

 

說明:

(1) 模塊初始化函數(shù)一般都需聲明為 static,因為初始化函數(shù)對于其它文件沒有任何意義;

(2) __init 表示初始化函數(shù)僅僅在初始化期間使用,一旦初始化完畢,將釋放初始化函數(shù)所占用的內存,類似的還有__initdata;

(3) module_init 是必須的,沒有這個定義,內核將無法執(zhí)行初始化代碼。module_init宏定義會在模塊的目標代碼中增加一個特殊的代碼段,用于說明該初始化函數(shù)所在的位置。

當使用 insmod 將模塊加載進內核的時候,初始化函數(shù)的代碼將會被執(zhí)行。模塊初始化代碼只與內核模塊管理子系統(tǒng)打交道,并不與應用程序交互。

4.模塊退出。

當系統(tǒng)不再需要某個模塊,可以卸載這個模塊以釋放該模塊所占用的資源。模塊的退出相當于告知內核“我要離開了”。實現(xiàn)模塊退出的函數(shù)常稱為模塊的退出函數(shù)或者清除函數(shù)

 

static void __exit module_exit_func(void)

{

模塊退出代碼

}

module_exit(module_exit_func);

 

說明:

(1) 模塊退出函數(shù)沒有返回值;

(2) __exit 標記這段代碼僅用于模塊卸載;

(3) module_exit 不是必須的。但是,沒有 module_exit 定義的模塊無法被卸載,如果需要支持模塊卸載則必須有 module_exit。

當使用 rmmod 卸載模塊時,退出函數(shù)的代碼將被執(zhí)行。模塊退出代碼只與內核模塊管理子系統(tǒng)打交道,并不直接與應用程序交互。

5.許可證

Linux 內核是開源的,遵守 GPL 協(xié)議,所以要求加載進內核的模塊也最好遵循相關協(xié)議。為模塊指定遵守的協(xié)議用 MODULE_LINCENSE 來聲明,如:

 

MODULE_LICENSE("GPL");

 

內核能夠識別的協(xié)議有“GPL”、“GPL v2”、“GPL and additional rights(GPL 及附加權利)”、“Dual BSD/GPL(BSD/GPL 雙重許可)”、“Dual MPL/GPL(MPL/GPL 雙重許可)”以及“Proprietary(私有)”。

如果一個模塊沒有指定任何許可協(xié)議,則會被認為是私有協(xié)議。采用私有協(xié)議的模塊,在加載過程中會出現(xiàn)警告,并且不能被靜態(tài)編譯進內核。

 

執(zhí)行完上面步驟,一個最小的linux驅動便寫好了。全部代碼如下:

 

6.編譯

內核模塊的編譯需要Makefile文件,在hello_dev.c所在路徑建立Makefile文件:

在Makefile輸入以下文本并保存。

 

obj-m := hello_dev.o

PWD  := $(shell pwd)

KVER ?= $(shell uname -r)

KDIR :=/home/qlqcetc/nuc970bsp/02.linux內核3.10.x

all:

  $(MAKE) -C $(KDIR) M=$(PWD)

clean:

  rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions

 

其中obj-m 指定要編譯的源文件是hello_dev.c,KDIR指定內核的路徑,驅動模塊的編譯是需要內核源碼的相關文件的,所以需要設置內核源碼所在路徑。

中斷進入驅動源碼所在文件夾:

#/home/qlqcetc/nuc970bsp/06.示例驅動程序/00.hello_dev

#ls

編譯:

#make

#ls

生成的hello_dev.ko就是驅動模塊,使用U盤將其復制到開發(fā)板的/lib/modules/路徑下(modules文件夾需要創(chuàng)建),就可以加載驅動模塊了。

開發(fā)板終端輸入:

# cd /lib/modules/

# insmod hello_dev.ko

可以看到驅動加載成功,驅動打印出信息:

開發(fā)板終端輸入:

# mkdir 3.10.101

# rmmod hello_dev.ko

可以看到驅動卸載成功,驅動打印出信息:

聯(lián)系方式0755-82591179

郵箱:ivy@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A09

国产精品揄拍100视频| 偷窥 自由 xxx 视频| 无码精品人妻一区二区三区人妻斩| 女人爽到高潮潮喷叫床69| 日日摸天天爽天天爽视频| 国产乱码精品一区二区三区久久| 国产麻豆精品一区二区三区V视界| 俄罗斯引擎yandex网站| 国产在线视频一区二区三区| 中文字日产幕码三区的做法大全| 热re99久久精品国产99热| 天天躁日日躁aaaaxxxx| 公翁的粗大放进我的秘密电影| 侯府荡女h叶凝欢h| 成全动漫视频在线观看| 欧美放荡办公室videos按摩| 我在ktv被六个男人玩一晚上| 日本laurenphilips| 久久精品人妻少妇一区二区三区| 东北50岁熟妇露脸在线| 久久久久99人妻一区二区三区| 理科生坠入情网电视剧免费观看| 在厨房我撕开岳的丁字裤| 国产在线视频一区二区三区| 美艳人妻办公室抽搐呻吟| 国产又湿又紧又大又爽av视频| 国产精品久久欧美久久一区| 西西人体扒开大胆大尺度展露| 啊轻点灬太粗嗯太深了用力| 97人妻精品一区二区三区| 伦理片在线观看| 日本无码蜜桃波多野结衣| 国偷自产av一区二区三区| 在线永久看片免费的视频| 精品国产污污免费网站入口| 中文字幕精品一区二区三区| 医生边走边吮男男h| 欧美日韩免费观看| 你日的我走不了路了| 被各种陌生人np调教灌尿| 人鲁交yazhonghucxx|