国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載

這篇具有很好參考價(jià)值的文章主要介紹了Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一、環(huán)境配置

?1、開(kāi)發(fā)板環(huán)境

2、uboot環(huán)境

①設(shè)置bootargs

②設(shè)置bootcmd

二、加載驅(qū)動(dòng)與卸載驅(qū)動(dòng)

?1、加載命令選擇

2、創(chuàng)建目錄環(huán)境以及驅(qū)動(dòng)文件復(fù)制

3、加載驅(qū)動(dòng)?

提示①“modprobe: can't open 'modules.dep': No such file or directory”

?提示②module license 'unspecified'

4、卸載驅(qū)動(dòng)

提示②module license 'unspecified'的解決

三、測(cè)試驅(qū)動(dòng)入口函數(shù)和出口函數(shù)

1、printk?

2、測(cè)試?


一、環(huán)境配置

?1、開(kāi)發(fā)板環(huán)境

開(kāi)發(fā)板通過(guò)從SD卡啟動(dòng),SD卡里面燒寫(xiě)了uboot,開(kāi)發(fā)板能ping通ubantu

uboot通過(guò)tftp從ubuntu里面獲取zimage和dtb,rootfs也是通過(guò)nfs掛載

2、uboot環(huán)境

①設(shè)置bootargs

setenv?bootargs='console=ttymxc0,115200 rw root=/dev/nfs nfsroot=192.168.1.222:/home/ubantu22/nfs/rootfs ip=192.168.1.221:192.168.1.222:192.168.1.1:255.255.255.0::eth0:off'

“console”為設(shè)置串口和波特率,“rw”是可讀可寫(xiě)權(quán)限,"root"告訴內(nèi)核要通過(guò)網(wǎng)絡(luò)取得根文件系統(tǒng)

“nfsroot”后面ip為uabntu的ip,路徑為根文件系統(tǒng)路徑

“ip”第一個(gè)是開(kāi)發(fā)板ip,第二個(gè)是ubantu的ip第三個(gè)是網(wǎng)關(guān),第四個(gè)是子網(wǎng)掩碼

“eth0”設(shè)置使用的網(wǎng)口

記得使用saveenv命令進(jìn)行保存

②設(shè)置bootcmd

setenv bootcmd='tftp 80800000 zImage;tftp 83000000 imx6ull-my-emmc.dtb;bootz 80800000 - 83000000;'

通過(guò)tftp下載zImage到80800000和.dtb設(shè)備樹(shù)下載到83000000

用bootz啟動(dòng)

記得使用saveenv命令進(jìn)行保存

二、加載驅(qū)動(dòng)與卸載驅(qū)動(dòng)

?1、加載命令選擇

驅(qū)動(dòng)編譯完成以后擴(kuò)展名為.ko,有兩種命令可以加載驅(qū)動(dòng)模塊: insmod和 modprobe

?insmod是最簡(jiǎn)單的模塊加載命令,此命令用于加載指定的.ko 模塊,但是insmod 命令不能解決模塊的依賴關(guān)系,比如 drv.ko 依賴 first.ko 這個(gè)模塊,就必須先使用insmod 命令加載 first.ko 這個(gè)模塊,然后再加載 drv.ko 這個(gè)模塊,所以不建議使用這個(gè)


modprobe 會(huì)分析模塊的依賴關(guān)系,然后會(huì)將所有的依賴模塊都加載到內(nèi)核中,因此modprobe 命令相比 insmod 要智能一些。 modprobe 命令主要智能在提供了模塊的依賴性分析、錯(cuò)誤檢查、錯(cuò)誤報(bào)告等功能,推薦使用 modprobe 命令來(lái)加載驅(qū)動(dòng)

要注意的是,modprobe 命令默認(rèn)會(huì)去/lib/modules/<kernel-version>目錄中查找模塊,比如這里使用的 Linux kernel 的版本號(hào)為 4.1.15,因此 modprobe 命令默認(rèn)會(huì)到/lib/modules/4.1.15 這個(gè)目錄中查找相應(yīng)的驅(qū)動(dòng)模塊,一般自己制作的根文件系統(tǒng)中是不會(huì)有這個(gè)目錄,所以需要自己手動(dòng)創(chuàng)建

2、創(chuàng)建目錄環(huán)境以及驅(qū)動(dòng)文件復(fù)制

cd lib

mkdir modules

cd modules

mkdir 4.1.15

cd 4.1.15

Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載

?這就進(jìn)入到/lib/modules/4.1.15的目錄下了,在ubantu里面把驅(qū)動(dòng)放到這個(gè)目錄下,如下圖

Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載

?在開(kāi)發(fā)板上面查看一下.ko文件,如下圖

Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載

3、加載驅(qū)動(dòng)?

利用modprobr加載驅(qū)動(dòng),如下圖

?Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載

?這里錯(cuò)誤提示“modprobe: can't open 'modules.dep': No such file or directory”

提示①“modprobe: can't open 'modules.dep': No such file or directory”

modprobe 提示無(wú)法打開(kāi)“modules.dep”這個(gè)文件,因此驅(qū)動(dòng)掛載失敗了。對(duì)于一個(gè)新的模塊使用modprobe加載的時(shí)候需要先調(diào)用一下depmod命令,直接輸入 depmod 命令即可自動(dòng)生成modules.dep,不用手動(dòng)創(chuàng)建。有些根文件系統(tǒng)可能沒(méi)有 depmod 這個(gè)命令,如果沒(méi)有這個(gè)命令就只能重新配置busybox,使能此命令,然后重新編譯 busybox。輸入“depmod”命令以后會(huì)自動(dòng)生成 modules.alias、modules.symbols 和 modules.dep 這三個(gè)文件,如下圖

Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載

?下面重新加載驅(qū)動(dòng),使用modprobe如下圖

Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載

?提示②module license 'unspecified'

這里有提示“chrdevbase: module license 'unspecified' taints kernel.Disabling lock debugging due to kernel taint”,意為未指定許可證,這里暫時(shí)不管,學(xué)完卸載驅(qū)動(dòng)后進(jìn)行解決

下面用“l(fā)smod”查看一下當(dāng)前的驅(qū)動(dòng)模塊都有那些,如下圖

Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載

可以看到已經(jīng)有chrdevbase的驅(qū)動(dòng)了

4、卸載驅(qū)動(dòng)

利用“remod”卸載驅(qū)動(dòng),如下圖

Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載

chrdevbase?驅(qū)動(dòng)已經(jīng)被卸載了

下面先解決剛剛加載驅(qū)動(dòng)后出現(xiàn)的提示

提示②module license 'unspecified'的解決

重新加載驅(qū)動(dòng),如下圖

Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載

這次重新加載就沒(méi)有錯(cuò)誤提示了,而且也成功加載,可能是只提示一次,但還是要解決

出現(xiàn)提示“chrdevbase: module license 'unspecified' taints kernel主要是因?yàn)轵?qū)動(dòng)沒(méi)有 license信息

下面在編譯驅(qū)動(dòng)的c文件里面添加 license信息和作者信息(可不加),代碼如下

MODULE_LICENSE("GPL");????????????????????????/* license許可信息,采用 GPL 協(xié)議*/
MODULE_AUTHOR("ba che kai qi lai");????????/*作者*/

Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載

?重新編譯,再拷貝到開(kāi)發(fā)板根文件系統(tǒng)的/lib/modules/4.1.15的目錄下

Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載

Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載

?先把已經(jīng)加載的chrdevbase驅(qū)動(dòng)卸載

Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載

?重啟開(kāi)發(fā)板來(lái)測(cè)試是否還會(huì)有提示,重新加載驅(qū)動(dòng)

Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載

可以看到不再出現(xiàn)“module license 'unspecified' ”的提示了

三、測(cè)試驅(qū)動(dòng)入口函數(shù)和出口函數(shù)

1、printk?

先了解一下關(guān)于printf和printk,在內(nèi)核里面沒(méi)有printf這個(gè)函數(shù)的

printf運(yùn)行在用戶態(tài),而printk運(yùn)行在內(nèi)核態(tài),printk使用有等級(jí)之分,具體可以自行了解

想要在內(nèi)核里面向控制臺(tái)輸出或顯示一些內(nèi)容就需要用printk這個(gè)函數(shù)

在驅(qū)動(dòng)入口函數(shù)里面輸入下面代碼

#include<linux/kernel.h>
#include<linux/init.h>

printk("chrdevbase_init\r\n");

printk("chrdevbase_exit\r\n");

Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載

?添加完成重新編譯和復(fù)制到開(kāi)發(fā)板根文件系統(tǒng)的/lib/modules/4.1.15的目錄下

Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載

2、測(cè)試?

?再來(lái)測(cè)試加載驅(qū)動(dòng)和卸載驅(qū)動(dòng)

Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載

這里都已經(jīng)打印提示信息,說(shuō)明驅(qū)動(dòng)出口和入口函數(shù)都已經(jīng)執(zhí)行了?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-449001.html

到了這里,關(guān)于Linux驅(qū)動(dòng)3:驅(qū)動(dòng)模塊加載與卸載的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Linux驅(qū)動(dòng)】VScode 環(huán)境簡(jiǎn)單配置

    【Linux驅(qū)動(dòng)】VScode 環(huán)境簡(jiǎn)單配置

    在開(kāi)始編寫(xiě)驅(qū)動(dòng)之前,我們需要保證良好的編碼環(huán)境,這里編寫(xiě)代碼所使用的編輯器是VScode,如果進(jìn)行環(huán)境配置,可能會(huì)提示很多錯(cuò)誤,比如頭文件找不到、內(nèi)核函數(shù)的定義無(wú)法跳轉(zhuǎn)等等。 VScode 在這里只作為編輯器使用,配置的 是編輯環(huán)境 ,而 不是編譯環(huán)境 。 目錄 一、

    2024年02月14日
    瀏覽(18)
  • 【VSCode】VScode 配置 Linux 驅(qū)動(dòng)環(huán)境(簡(jiǎn)單版)

    【VSCode】VScode 配置 Linux 驅(qū)動(dòng)環(huán)境(簡(jiǎn)單版)

    在開(kāi)始編寫(xiě)驅(qū)動(dòng)之前,我們需要保證良好的編碼環(huán)境,這里編寫(xiě)代碼所使用的編輯器是VScode,如果進(jìn)行環(huán)境配置,可能會(huì)提示很多錯(cuò)誤,比如頭文件找不到、內(nèi)核函數(shù)的定義無(wú)法跳轉(zhuǎn)等等。 VScode 在這里只作為編輯器使用,配置的 是編輯環(huán)境 ,而 不是編譯環(huán)境 。 目錄 一、

    2024年02月08日
    瀏覽(23)
  • Linux內(nèi)核顯示、加載、卸載等超實(shí)用命令

    內(nèi)核模塊是 Linux 系統(tǒng)中一種特殊的可執(zhí)行文件,它可以在運(yùn)行時(shí)動(dòng)態(tài)地加載到內(nèi)核中或卸載出內(nèi)核,從而實(shí)現(xiàn)內(nèi)核的擴(kuò)展和優(yōu)化。內(nèi)核模塊操作相關(guān)的命令主要有以下幾種: 列出當(dāng)前已加載的內(nèi)核模塊及其依賴關(guān)系和使用情況。 將指定的內(nèi)核模塊加載到內(nèi)核中,需要提供完

    2024年02月08日
    瀏覽(97)
  • 詳解Linux環(huán)境下卸載MySQL

    最后查看一下是否卸載完畢,無(wú)結(jié)果說(shuō)明卸載完成。

    2024年03月21日
    瀏覽(31)
  • 修改linux的/sys目錄下內(nèi)核參數(shù)、模塊...

    ① /sys/devices 該目錄下是全局設(shè)備結(jié)構(gòu)體系,包含所有被發(fā)現(xiàn)的注冊(cè)在各種總線上的各種物理設(shè)備。一般來(lái)說(shuō),所有的物理設(shè)備都按其在總線上的拓?fù)浣Y(jié)構(gòu)來(lái)顯示,但有兩個(gè)例外,即platform devices和system devices。platform devices一般是掛在芯片內(nèi)部的高速或者低速總線上的各種控制

    2024年02月05日
    瀏覽(92)
  • linux 安全系列目錄 - seccomp安全模塊問(wèn)題排查

    linux 安全系列目錄 - seccomp安全模塊問(wèn)題排查

    涉及seccomp安全模塊問(wèn)題時(shí),可以參照本文檔案例進(jìn)行擴(kuò)展分析,可以多訪問(wèn)文中的鏈接,很有用。 通過(guò)使用libseccomp,開(kāi)發(fā)人員可以定義一組允許的系統(tǒng)調(diào)用規(guī)則,從而限制應(yīng)用程序的系統(tǒng)調(diào)用(system call)集合,阻止對(duì)潛在危險(xiǎn)的系統(tǒng)調(diào)用的調(diào)用。它最初被用于 cpushare 這個(gè)

    2024年02月05日
    瀏覽(23)
  • 如何將模塊加載到linux內(nèi)核

    如何將模塊加載到linux內(nèi)核

    假設(shè)存在一個(gè)文件叫mymq.c,下該文件相同目錄下的makefile如下語(yǔ)句: obj-y += mymq.o 然后編譯:編譯完成了以后,mymq.c文件中,有個(gè)函數(shù)叫mymq_open,搜索這個(gè)函數(shù)在不在System.map文件中,如果在,就說(shuō)明這個(gè)模塊被內(nèi)置到內(nèi)核中了。 執(zhí)行g(shù)rep -rn mymq_open System.map,在文件System.map中搜索

    2023年04月24日
    瀏覽(91)
  • Linux 卸載、安裝 anaconda 以及新建環(huán)境

    Linux 卸載、安裝 anaconda 以及新建環(huán)境

    卸載 anaconda 博客 參照上述博客可以卸載 anaconda,注意編輯文件時(shí),i 是進(jìn)入輸入模式,修改完畢后保存并退出操作是:先按 Esc 退出輸入模式,shift+:+wq+Enter 即可保存修改并退出。 安裝 anaconda 博客 參照上述博客可以安裝 anaconda 同時(shí)也有第三部分的 pytorch 下載教程 在 pytorch

    2024年02月12日
    瀏覽(24)
  • Linux環(huán)境如何徹底卸載感干凈RabbitMQ

    總共就兩步。 1、卸載前先停掉rabbitmq服務(wù),執(zhí)行命令 2、查看rabbitmq安裝的相關(guān)列表 3、卸載rabbitmq已安裝的相關(guān)內(nèi)容 1、查看erlang安裝的相關(guān)列表 2、卸載erlang已安裝的相關(guān)內(nèi)容

    2024年02月16日
    瀏覽(80)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包