色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

linux 了解內核模塊的原理 《Rice linux 學習開發》

lPCU_elecfans ? 來源:未知 ? 作者:肖冰 ? 2019-07-16 10:08 ? 次閱讀

更多技術干貨內容請穩步到“電子發燒友網”公眾號,回復資料即可免費獲取一份技術資料,在這里每天可以獲取最專業、最前沿的電子技術。
Linux內核是整體性結構,各個子系統緊密聯系,上接用戶控件,下接硬件,作為一個大程序在內核控件運行。

如果將所有的設備驅動和內核功能都集成在內核中,則內核會不斷的龐大,對我們的內核裁剪也會帶來更大的挑戰,為了解決這個問題,Linux內核引入內核模塊機制,通過動態加載內核模塊,從而實現在運行過程中擴展內核的功能。

內核模塊是什么?

1 內核模塊是一種沒有經過鏈接,不能獨立運行的目標文件,是在內核空間中運行的程序。經過鏈接裝載到內核里面成為內核的一部分,可以訪問內核的公用符號(函數和變量)。

2 內核模塊可以讓操作系統內核在需要時載入和執行,在不需要時由操作系統卸載。它們擴展了操作系統內核的功能卻不需要重新啟動系統。

3 如果沒有內核模塊,我們不得不一次又一次重新編譯生成單內核操作系統的內核鏡像來加入新的功能。這還意味著一個臃腫的內核。

模塊機制的優點:

1 減小內核映像尺寸,增加系統靈活性;

2 節省開發時間;修改內核,不必重新編譯整個內核。

3 模塊的目標代碼一旦被鏈入內核,作用和靜態鏈接的內核目標代碼完全等價。

模塊機制的缺點:

1 對系統性能有一定損失;

2 使用不當時會導致系統崩潰;

接下來通過介紹一下內核模塊的實現:

首先先附上模塊的代碼(hello_world.c

1 #include

2 #include

3 #include

4

5 static int hello_init(void)

6 {

7 printk("hello world module! ");

8 return 0;

9 }

10

11 static void hello_exit(void)

12 {

13 printk("good bye module! ");

14 }

15

16 module_init(hello_init);

17 module_exit(hello_exit);

18

19 MODULE_LICENSE("GPL");

內核模塊至少包含兩個函數:

入口函數->初始化函數(xxx_init()):模塊加載時,被調用

出口函數->卸載函數(xxx_exit()):模塊卸載時,被調用

模塊的入口函數名和出口函數名可以任意命名,通過宏module_init()申明入口函數,通過宏module_exit()申明出口函數。模塊需要包含頭文件:#include

內核模塊證書:2.4內核后,引入識別代碼是否在GPL許可下發布的機制 。在使用非公開的源代碼產品時會得到警告。通過宏MODULE_LICENSE(“GPL”),設置模塊遵守GPL證書,取消警告信息

內核模塊的構建:

管理模塊源碼方法: ① 模塊源碼加入到內核源碼樹中。② 模塊源碼飯仔內核源碼樹之外。

注:本文介紹的是放在內核源碼樹外編譯。

接下來是Makefile的實現:

首先附上Makefile的源碼

1 KERNEL_DIR = /home/FAN/linux-kernel

2

3 all:

4 make -C $(KERNEL_DIR) M=`pwd` modules

5 clean:

6 make -C $(KERNEL_DIR) M=`pwd` modules clean

7 rm -rf modules.order Module.symvers

8

9 obj-m += hello_world.o

其中:

1、KERNEL_DIR參數,賦值內核的位置,例如我的內核源碼的路徑:/home/fan/linux-kernrl

2、當終端執行make時,會運行make -C $(KERNEL_DIR) M=`pwd` modules,其中M=`pwd`指向是模塊所在的路徑。

3、當終端執行make clean時,會運行下面兩條命令,將編譯生成的文件刪除

make -C $(KERNEL_DIR) M=`pwd` modules clean

rm -rf modules.order Module.symvers

4、obj-m += hello_world.o:其中 –m 表示將hello_world.c編譯成模塊

–y 表示將hello_world.c編譯進內核鏡像中

編譯生成文件:

在終端運行make,則會生成hello_world.ko文件.

hello_world.ko發送到板子上,然后在板子上運行insmod hello_world.ko, 會調用hello_init()函數運行rmmod hello_world.ko,會調用hello_exit()函數

下圖為運行結果:

本文作者:飯仔DIY,工作之余喜歡電子DIY,開源分享是我寫文章的動力,互相學習才能讓自己不斷強大。

歡迎廣大電子發燒友們投稿,投稿郵箱:liuyong@elecfans.com


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11320

    瀏覽量

    209849

原文標題:【原創】linux 了解內核模塊的原理 《Rice linux 學習開發》

文章出處:【微信號:elecfans,微信公眾號:電子發燒友網】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux 內核模塊工作原理及內核模塊編譯案例

    一個內核模塊至少包含兩個函數,模塊被加載時執行的初始化函數init_module()和模塊被卸載時執行的結束函數cleanup_module()。
    發表于 09-23 09:39 ?2519次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>內核模塊</b>工作原理及<b class='flag-5'>內核模塊</b>編譯案例

    詳解Linux內核模塊的編寫方法

    Linux 系統為應用程序提供了功能強大且容易擴展的 API,但在某些情況下,這還遠遠不夠。與硬件交互或進行需要訪問系統中特權信息的操作時,就需要一個內核模塊。
    的頭像 發表于 05-11 08:55 ?3752次閱讀

    Linux內核模塊間通訊方法

    Linux內核模塊間通訊方法非常的多,最便捷的方法莫過于函數或變量符號導出,然后直接調用。默認情況下,模塊模塊之間、模塊
    發表于 06-07 16:23 ?2587次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核模塊</b>間通訊方法

    RZ/G2L Linux系統如何添加新的內核模塊

    RZ/G2L Linux系統的鏡像基于yocto構建,本篇介紹如何添加新的內核模塊
    的頭像 發表于 01-04 12:19 ?1808次閱讀
    RZ/G2L <b class='flag-5'>Linux</b>系統如何添加新的<b class='flag-5'>內核模塊</b>

    Linux內核模塊程序結構

    Linux設備驅動會以內核模塊的形式出現,因此,學會編寫Linux內核模塊編程是學習Linux
    發表于 05-27 09:36

    【微信精選】linux 了解內核模塊的原理 《Rice linux 學習開發

    的挑戰,為了解決這個問題,Linux內核引入內核模塊機制,通過動態加載內核模塊,從而實現在運行過程中擴展
    發表于 07-16 07:00

    高效學習Linux內核——內核模塊編譯

    內核是世界上最大的開源項目之一,但是內核是什么,它用于什么?一、什么是linux內核模塊內核是與計算機硬件接口的易替換軟件的最低級別。它負
    發表于 09-24 09:11

    內核模塊開發的相關資料下載

    我的嵌入式LINUX學習.卷28------內核模塊開發
    發表于 12-20 07:22

    Linux設備驅動開發詳解》第4章、Linux內核模塊

    Linux設備驅動開發詳解》第4章、Linux內核模塊
    發表于 10-27 14:15 ?0次下載
    《<b class='flag-5'>Linux</b>設備驅動<b class='flag-5'>開發</b>詳解》第4章、<b class='flag-5'>Linux</b><b class='flag-5'>內核模塊</b>

    什么是 Linux 內核模塊?

    lsmod 命令能夠告訴你當前系統上加載了哪些內核模塊,以及關于使用它們的一些有趣的細節。
    的頭像 發表于 08-09 17:01 ?3259次閱讀

    嵌入式LINUX系統內核內核模塊調試教程

    本文檔的主要內容詳細介紹的是嵌入式LINUX系統內核內核模塊調試教程。
    發表于 11-06 17:32 ?21次下載
    嵌入式<b class='flag-5'>LINUX</b>系統<b class='flag-5'>內核</b>和<b class='flag-5'>內核模塊</b>調試教程

    如何在Petalinux創建Linux內核模塊

    --enable”,能創建Linux內核模塊,包括c源代碼文件,Makefile,Yocto的bb文件。相關文件放在目錄“ project-spec / meta-user / recipes-modules”中
    的頭像 發表于 03-02 11:10 ?4386次閱讀

    嵌入式LINUX系統內核內核模塊調試

    嵌入式LINUX系統內核內核模塊調試(嵌入式開發和硬件開發)-嵌入式LINUX系統
    發表于 07-30 13:55 ?10次下載
    嵌入式<b class='flag-5'>LINUX</b>系統<b class='flag-5'>內核</b>和<b class='flag-5'>內核模塊</b>調試

    Linux內核模塊參數傳遞與sysfs文件系統

    Linux應用開發中,為使應用程序更加靈活地執行用戶的預期功能,我們有時候會通過命令行傳遞一些參數到main函數中,使得代碼邏輯可以依據參數執行不同的任務。同樣,Linux內核也提供了
    發表于 06-07 16:23 ?2162次閱讀

    linux驅動程序如何加載進內核

    ,需要了解Linux內核的基本概念和API。以下是一些關鍵概念: 1.1 內核模塊Linux內核模塊
    的頭像 發表于 08-30 15:02 ?518次閱讀
    主站蜘蛛池模板: 亚洲国产成人精品久久久久 | 苍老师刺激的120分钟| 日韩一区二区三区四区区区| 黄色片软件大全| 成人在线免费观看| 在线 无码 中文 强 乱| 双性h浪荡受bl| 欧美国产成人在线| 九九热最新视频| 国产精品丰满人妻AV麻豆| 97蜜桃网123.com| 亚洲永久精品ww47app| 手机在线观看无码日韩视频| 免费看亚洲| 久久久久久久尹人综合网亚洲| 国产精品无码久久av| 超碰97人人做人人爱网站| 5580免费午夜福利院| 亚洲国产高清在线| 水蜜桃亚洲一二三四在线| 男人叼女人| 久久久久久久网| 精品国产人成亚洲区| 国产麻豆91网在线看| 成人AV无码一二二区视频免费看| 2019午夜福合集不打码| 伊人久久精品99热超碰| 午夜亚洲WWW湿好爽| 日日噜噜噜噜夜夜爽亚洲精品| 欧美特黄三级成人| 年轻的搜子8中字在线观看| 浪潮AV色综合久久天堂| 久久国产精品免费网站| 激情内射亚洲一区二区三区爱妻| 国产日韩亚洲专区无码| 国产精片久久久久久婷婷| 福利一区福利二区| 俄罗斯大肥BBXX| 超熟女专门志| 插我一区二区在线观看| 爆操日本美女|